diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java index 8b33d75326..e825285585 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XCreator.java @@ -68,9 +68,6 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo protected Widget data; protected JComponent editor; protected CoverReportPane coverPanel; - - protected boolean inAbsoluteBodyLayout = false; - // XCreator加入到某些XLayoutContainer中时,能调整宽度或者高度 private int[] directions; private Rectangle backupBound; @@ -897,29 +894,4 @@ public abstract class XCreator extends JPanel implements XComponent, XCreatorToo } return ((XCreator) this.getParent()).getLevel() + 1; } - - public boolean isAbleDrawSpacingLine() { - return !isBody() && !isParameter() && !isInPara() && isInAbsoluteBodyLayout(); - } - - public boolean isBody() { - return false; - } - - public boolean isParameter() { - return false; - } - - public boolean isInPara() { - XLayoutContainer container = XCreatorUtils.getHotspotContainer(this); - return container != null && container.acceptType(XWParameterLayout.class); - } - - public boolean isInAbsoluteBodyLayout() { - return inAbsoluteBodyLayout; - } - - public void setInAbsoluteBodyLayout(boolean inAbsoluteBodyLayout) { - this.inAbsoluteBodyLayout = inAbsoluteBodyLayout; - } } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java index 40786a6d5b..aa5612c09f 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java @@ -12,7 +12,6 @@ import com.fr.stable.core.PropertyChangeAdapter; import java.awt.Component; import java.awt.Dimension; -import java.awt.event.ContainerEvent; import java.beans.IntrospectionException; /** @@ -136,16 +135,4 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout { return false; } - @Override - public void componentAdded(ContainerEvent e) { - super.componentAdded(e); - XWidgetCreator creator = (XWidgetCreator) e.getChild(); - creator.setInAbsoluteBodyLayout(true); - } - - @Override - public boolean isBody() { - return true; - } - } diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java index 9fa256f8a0..fc01aefaa9 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWParameterLayout.java @@ -260,9 +260,4 @@ public class XWParameterLayout extends XWAbsoluteLayout { public boolean isTopable() { return false; } - - @Override - public boolean isParameter() { - return true; - } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java b/designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java index d78290810c..1ed4c6cca2 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormSpacingLineDrawer.java @@ -5,6 +5,9 @@ import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreatorUtils; import com.fr.design.designer.creator.XElementCase; import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWParameterLayout; +import com.fr.design.form.parameter.FormParaDesigner; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.utils.ComponentUtils; import com.fr.stable.Constants; import com.fr.stable.GraphDrawHelper; @@ -28,6 +31,7 @@ public class FormSpacingLineDrawer { private FormDesigner designer; private XCreator hoverCreator = null; + private XCreator selectedCreator = null; private Rectangle selectedRec; private Rectangle hoveredRec; private boolean isMouseMoveEvent = false; @@ -37,15 +41,15 @@ public class FormSpacingLineDrawer { } public void updateMouseEvent(MouseEvent e, boolean isMouseMoveEvent) { - XCreator creator = designer.getSelectionModel().getSelection().getSelectedCreator(); - if (creator != null) { + selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); + if (selectedCreator != null) { this.hoverCreator = getHoverComponentAt(e.getX(), e.getY()); } this.isMouseMoveEvent = isMouseMoveEvent; } public void draw(Graphics g) { - if (!isMouseMoveEvent) { + if (!isMouseMoveEvent || selectedCreator == null || hoverCreator == null) { return; } @@ -53,10 +57,6 @@ public class FormSpacingLineDrawer { return; } - if (!hoverCreator.isParentAbsolute()) { - return; - } - this.selectedRec = designer.getSelectionModel().getSelection().getRelativeBounds(); this.hoveredRec = ComponentUtils.getRelativeBounds(hoverCreator); @@ -137,13 +137,55 @@ public class FormSpacingLineDrawer { GraphDrawHelper.drawString(g2d, text, labelX, labelY); } + private boolean isSelectedParaComponent() { + return designer.getParaComponent() == selectedCreator; + } + + private boolean isSelectedRootComponent() { + return designer.isRoot(selectedCreator); + } + + private boolean isSelectedForm() { + return selectedCreator.getParent() == null; + } + private boolean isNeedExtendedLine(AbstractFormParallelLine[] nearestSides) { return nearestSides[0].isVerticalCenterLineBeforeTheParallelLine(nearestSides[1]) || nearestSides[0].isVerticalCenterLineBehindTheParallelLine(nearestSides[1]); } + private boolean isSelectedRootPane() { + // form、body、para这三个选中了,都不要画任何间距线 + return isSelectedForm() || isSelectedRootComponent() || isSelectedParaComponent(); + } + + // 当前组件是否在参数面板里面 + private boolean isCompInBody(XCreator creator) { + XLayoutContainer container = XCreatorUtils.getHotspotContainer(creator); + return container != null && !container.acceptType(XWParameterLayout.class); + } + + private boolean isSelectedCompInBody() { + return isCompInBody(selectedCreator); + } + + private boolean isHoveredCompInBody() { + return isCompInBody(hoverCreator); + } + + private boolean isCompInBody() { + return isSelectedCompInBody() && isHoveredCompInBody(); + } + + private boolean isBodyAbsoluteLayout() { + return !(designer instanceof FormParaDesigner) && FormDesignerUtils.isBodyAbsolute(designer); + } + + private boolean isInAbsoluteLayout() { + return isBodyAbsoluteLayout() && hoverCreator.isParentAbsolute() && selectedCreator.isParentAbsolute(); + } + private boolean isDrawSpacingLine() { - XCreator selectedCreator = designer.getSelectionModel().getSelection().getSelectedCreator(); - return hoverCreator != null && selectedCreator != null && hoverCreator.isAbleDrawSpacingLine() && selectedCreator.isAbleDrawSpacingLine(); + return isInAbsoluteLayout() && !isSelectedRootPane() && isCompInBody(); } private AbstractFormParallelLine[] getNearestHorizontalSide() {