|
|
|
@ -38,6 +38,7 @@ import com.fr.design.designer.creator.XWBorderLayout;
|
|
|
|
|
import com.fr.design.designer.creator.XWFitLayout; |
|
|
|
|
import com.fr.design.designer.creator.XWParameterLayout; |
|
|
|
|
import com.fr.design.designer.creator.XWTitleLayout; |
|
|
|
|
import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; |
|
|
|
|
import com.fr.design.designer.properties.FormWidgetAuthorityEditPane; |
|
|
|
|
import com.fr.design.dialog.FineJOptionPane; |
|
|
|
|
import com.fr.design.event.DesignerOpenedListener; |
|
|
|
@ -64,6 +65,7 @@ import com.fr.form.ui.Widget;
|
|
|
|
|
import com.fr.form.ui.WidgetValue; |
|
|
|
|
import com.fr.form.ui.container.WBorderLayout; |
|
|
|
|
import com.fr.form.ui.container.WFitLayout; |
|
|
|
|
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; |
|
|
|
|
import com.fr.general.ComparatorUtils; |
|
|
|
|
import com.fr.general.FRLogger; |
|
|
|
|
import com.fr.log.FineLoggerFactory; |
|
|
|
@ -189,6 +191,7 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
|
|
|
|
|
|
|
|
|
|
this.switchAction = switchAction; |
|
|
|
|
topXCreators=new TopXCreators(this); |
|
|
|
|
topXCreators.setVisible(true); |
|
|
|
|
add(topXCreators); |
|
|
|
|
|
|
|
|
|
// 必须刷新"参数/控件树"面板,否则,若最近一次打开模版为 cpt,重启设计器,打开 frm,控件树消失
|
|
|
|
@ -834,17 +837,22 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
|
|
|
|
|
/** |
|
|
|
|
* 从已选择的组件中找x,y所在的组件 |
|
|
|
|
*/ |
|
|
|
|
private XCreator xCreatorAt(int x, int y, XCreator[] xCreators) { |
|
|
|
|
private XCreator xCreatorAt(int x, int y,XCreator root) { |
|
|
|
|
XCreator[] xCreators = selectionModel.getSelection().getSelectedCreators(); |
|
|
|
|
for (XCreator creator : xCreators) { |
|
|
|
|
if (creator == null || !creator.isVisible()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (creator instanceof XWAbsoluteBodyLayout || creator instanceof XWFitLayout || creator instanceof XWParameterLayout) { |
|
|
|
|
boolean shouldContinue = creator == null |
|
|
|
|
|| !creator.isVisible() |
|
|
|
|
|| !XCreatorUtils.containComponent(root, creator) |
|
|
|
|
|| creator instanceof XWAbsoluteBodyLayout |
|
|
|
|
|| creator instanceof XWFitLayout |
|
|
|
|
|| creator instanceof XWParameterLayout; |
|
|
|
|
if (shouldContinue) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
x -= creator.getX(); |
|
|
|
|
y -= creator.getY(); |
|
|
|
|
Rectangle rect = ComponentUtils.computeVisibleRect(creator); |
|
|
|
|
rect.y += nestTabCount(creator) * WCardMainBorderLayout.TAB_HEIGHT; |
|
|
|
|
// 判断是否处于交叉区域
|
|
|
|
|
if (!isIntersectArea(x, y, rect)) { |
|
|
|
|
continue; |
|
|
|
@ -852,11 +860,24 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
|
|
|
|
|
if (creator instanceof XWTitleLayout) { |
|
|
|
|
return creator.getEditingChildCreator(); |
|
|
|
|
} |
|
|
|
|
return creator; |
|
|
|
|
return xCreatorAt(x, y, creator, null); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 计算嵌套的tab层数 |
|
|
|
|
*/ |
|
|
|
|
private int nestTabCount(Container xCreator) { |
|
|
|
|
if (xCreator == null) { |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
if (xCreator instanceof XWTabFitLayout) { |
|
|
|
|
return 1 + nestTabCount(xCreator.getParent()); |
|
|
|
|
} |
|
|
|
|
return nestTabCount(xCreator.getParent()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 刷新顶层组件 |
|
|
|
|
* */ |
|
|
|
@ -1056,7 +1077,7 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
|
|
|
|
|
} |
|
|
|
|
int relativeX = x + (int) (formArea.getHorizontalValue() / scale) - container.getX(); |
|
|
|
|
int relativeY = y + (int) (formArea.getVerticalValue() / scale) - container.getY(); |
|
|
|
|
XCreator result = xCreatorAt(relativeX, relativeY, selectionModel.getSelection().getSelectedCreators()); |
|
|
|
|
XCreator result = xCreatorAt(relativeX, relativeY, container); |
|
|
|
|
return result == null ? getComponentAt(x, y, null) : result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|