Browse Source

REPORT-38969 修改按照点击坐标获取组件的逻辑

feature/big-screen
Yuan.Wang 4 years ago
parent
commit
f3708aadeb
  1. 7
      designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java
  2. 17
      designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java

7
designer-form/src/main/java/com/fr/design/designer/creator/XCreatorUtils.java

@ -336,4 +336,11 @@ public class XCreatorUtils {
}
return IOUtils.readIcon(iconPath);
}
public static boolean containComponent(Container ancestor, Container xCreator) {
while (xCreator != null && xCreator.getParent() != ancestor) {
xCreator = xCreator.getParent();
}
return xCreator != null;
}
}

17
designer-form/src/main/java/com/fr/design/mainframe/FormDesigner.java

@ -191,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,控件树消失
@ -836,12 +837,16 @@ 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();
@ -1072,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;
}

Loading…
Cancel
Save