From dea84a0299d3358757c43decfd93cf3609f48046 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Fri, 6 Jul 2018 21:38:22 +0300 Subject: [PATCH] ERD layout fix Former-commit-id: 56ccbe9479d9852c857b29dd8f3f19ee4f559430 --- .../dbeaver/ext/erd/layout/GraphLayoutAuto.java | 2 +- .../direct/DirectedGraphLayoutVisitor.java | 13 +++++++++---- .../jkiss/dbeaver/ext/erd/model/ERDDecorator.java | 6 ++++++ .../dbeaver/ext/erd/model/ERDDecoratorDefault.java | 6 ++++++ .../jkiss/dbeaver/ext/erd/part/AssociationPart.java | 11 ++++++----- .../ext/erd/policy/DiagramXYLayoutPolicy.java | 6 +++--- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/GraphLayoutAuto.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/GraphLayoutAuto.java index 99e7e1ac41..7466d206a0 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/GraphLayoutAuto.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/GraphLayoutAuto.java @@ -69,7 +69,7 @@ public class GraphLayoutAuto extends AbstractLayout */ // TODO: REPLACE WITH ZEST! - new DirectedGraphLayoutVisitor().layoutDiagram(diagram); + new DirectedGraphLayoutVisitor(diagram.getDiagram().getDecorator()).layoutDiagram(diagram); diagram.setTableModelBounds(); //new ZestGraphLayout().layoutDiagram(diagram); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/algorithm/direct/DirectedGraphLayoutVisitor.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/algorithm/direct/DirectedGraphLayoutVisitor.java index 450c823985..3f12fb037b 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/algorithm/direct/DirectedGraphLayoutVisitor.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/layout/algorithm/direct/DirectedGraphLayoutVisitor.java @@ -23,7 +23,6 @@ package org.jkiss.dbeaver.ext.erd.layout.algorithm.direct; import org.jkiss.dbeaver.Log; import org.eclipse.draw2d.*; import org.eclipse.draw2d.geometry.Dimension; -import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.draw2d.graph.*; import org.eclipse.gef.EditPart; @@ -32,6 +31,7 @@ import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.editparts.AbstractConnectionEditPart; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.jkiss.dbeaver.ext.erd.layout.GraphAnimation; +import org.jkiss.dbeaver.ext.erd.model.ERDDecorator; import org.jkiss.dbeaver.ext.erd.part.EntityPart; import java.util.ArrayList; @@ -48,8 +48,13 @@ import java.util.Map; public class DirectedGraphLayoutVisitor { private static final Log log = Log.getLog(DirectedGraphLayoutVisitor.class); - Map partToNodesMap; - DirectedGraph graph; + private final ERDDecorator decorator; + private Map partToNodesMap; + private DirectedGraph graph; + + public DirectedGraphLayoutVisitor(ERDDecorator decorator) { + this.decorator = decorator; + } /** * Public method for reading graph nodes @@ -100,7 +105,7 @@ public class DirectedGraphLayoutVisitor { Dimension preferredSize = nodeEditPart.getFigure().getPreferredSize(-1, -1); entityNode.width = preferredSize.width; entityNode.height = preferredSize.height; - entityNode.setPadding(new Insets(20, 20, 10, 20)); + entityNode.setPadding(decorator.getDefaultEntityInsets()); partToNodesMap.put(nodeEditPart, entityNode); graph.nodes.add(entityNode); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecorator.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecorator.java index 674ea6223c..f0ac063e76 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecorator.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecorator.java @@ -16,6 +16,7 @@ */ package org.jkiss.dbeaver.ext.erd.model; +import org.eclipse.draw2d.geometry.Insets; import org.eclipse.gef.EditPartFactory; import org.eclipse.gef.palette.PaletteRoot; import org.jkiss.code.NotNull; @@ -32,6 +33,11 @@ public interface ERDDecorator { boolean allowEntityDuplicates(); + /** + * Margin around entity figure. This affects diagram connections layout + */ + Insets getDefaultEntityInsets(); + @NotNull EditPartFactory createPartFactory(); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java index b09ef274a1..fe1e5ca9cf 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/model/ERDDecoratorDefault.java @@ -16,6 +16,7 @@ */ package org.jkiss.dbeaver.ext.erd.model; +import org.eclipse.draw2d.geometry.Insets; import org.eclipse.gef.EditPartFactory; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.palette.*; @@ -61,6 +62,11 @@ public class ERDDecoratorDefault implements ERDDecorator { return false; } + @Override + public Insets getDefaultEntityInsets() { + return new Insets(20, 20, 10, 20); + } + @Override public EditPartFactory createPartFactory() { return new ERDEditPartFactory(); diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AssociationPart.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AssociationPart.java index 6d049b627f..ce3ec1ebcc 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AssociationPart.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/part/AssociationPart.java @@ -27,7 +27,6 @@ import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.*; import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy; import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Display; import org.jkiss.dbeaver.ext.erd.ERDConstants; import org.jkiss.dbeaver.ext.erd.model.ERDAssociation; import org.jkiss.dbeaver.ext.erd.model.ERDEntityAttribute; @@ -89,14 +88,15 @@ public class AssociationPart extends PropertyAwareConnectionPart { conn.setForegroundColor(UIUtils.getColorRegistry().get(ERDConstants.COLOR_ERD_LINES_FOREGROUND)); - setConnectionStyles(association, conn); - setConnectionRouting(association, conn); + setConnectionStyles(conn); + setConnectionRouting(conn); setConnectionToolTip(conn); return conn; } - protected void setConnectionRouting(ERDAssociation association, PolylineConnection conn) { + protected void setConnectionRouting(PolylineConnection conn) { + ERDAssociation association = getAssociation(); // Set router and initial bends ConnectionLayer cLayer = (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER); conn.setConnectionRouter(cLayer.getConnectionRouter()); @@ -130,8 +130,9 @@ public class AssociationPart extends PropertyAwareConnectionPart { } } - protected void setConnectionStyles(ERDAssociation association, PolylineConnection conn) { + protected void setConnectionStyles(PolylineConnection conn) { + ERDAssociation association = getAssociation(); boolean identifying = ERDUtils.isIdentifyingAssociation(association); if (association.getObject().getConstraintType() == DBSEntityConstraintType.INHERITANCE) { diff --git a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/DiagramXYLayoutPolicy.java b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/DiagramXYLayoutPolicy.java index a7b34d2189..1e6f3d360c 100644 --- a/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/DiagramXYLayoutPolicy.java +++ b/plugins/org.jkiss.dbeaver.ext.erd/src/org/jkiss/dbeaver/ext/erd/policy/DiagramXYLayoutPolicy.java @@ -86,9 +86,9 @@ public class DiagramXYLayoutPolicy extends XYLayoutEditPolicy { IFigure fig = child.getFigure(); - Rectangle rectangle = (Rectangle) fig.getParent().getLayoutManager().getConstraint(fig); - if (rectangle == null) - { + Object constraint = fig.getParent().getLayoutManager().getConstraint(fig); + Rectangle rectangle = constraint instanceof Rectangle ? (Rectangle) constraint : null; + if (rectangle == null) { rectangle = fig.getBounds(); } return rectangle; -- GitLab