Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java')
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java72
1 files changed, 61 insertions, 11 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
index 108152866b..d1e4af8d49 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2020 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2007, 2022 THALES GLOBAL SERVICES and others.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@ import org.eclipse.gef.editpolicies.LayoutEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.CreateRequest;
import org.eclipse.gef.requests.DropRequest;
+import org.eclipse.gef.requests.SelectionRequest;
import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand;
import org.eclipse.gmf.runtime.diagram.ui.editparts.AbstractBorderItemEditPart;
@@ -66,7 +67,7 @@ import org.eclipse.sirius.diagram.ResizeKind;
import org.eclipse.sirius.diagram.ShapeContainerStyle;
import org.eclipse.sirius.diagram.WorkspaceImage;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
-import org.eclipse.sirius.diagram.business.internal.query.DDiagramElementContainerExperimentalQuery;
+import org.eclipse.sirius.diagram.model.business.internal.query.DDiagramElementContainerExperimentalQuery;
import org.eclipse.sirius.diagram.ui.business.internal.query.DNodeContainerQuery;
import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.AbstractDiagramNodeEditPartOperation;
@@ -88,8 +89,10 @@ import org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle;
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelogram;
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc;
import org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutUtils;
+import org.eclipse.sirius.diagram.ui.tools.internal.figure.ContainerBorderedNodeFigure;
import org.eclipse.sirius.diagram.ui.tools.internal.figure.ContainerWithTitleBlockFigure;
import org.eclipse.sirius.diagram.ui.tools.internal.figure.RegionRoundedGradientRectangle;
+import org.eclipse.sirius.diagram.ui.tools.internal.layout.LayoutUtil;
import org.eclipse.sirius.diagram.ui.tools.internal.util.EditPartQuery;
import org.eclipse.sirius.diagram.ui.tools.internal.util.NotificationQuery;
import org.eclipse.sirius.ext.base.Option;
@@ -453,6 +456,42 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
* @return the default figure dimension of this edit part
*/
public Dimension getDefaultDimension() {
+ if (LayoutUtil.isArrangeAtOpeningChangesDisabled()) {
+ return oldGetDefaultDimension();
+ } else {
+ DDiagramElement dde = resolveDiagramElement();
+ Dimension defaultSize = LayoutUtils.NEW_DEFAULT_CONTAINER_DIMENSION;
+ if (dde instanceof DNodeContainer) {
+ defaultSize = new DNodeContainerQuery((DNodeContainer) dde).getDefaultDimension();
+ }
+
+ if (new EditPartQuery(this).isCollapsed() && getParentStackDirection() == PositionConstants.NORTH_SOUTH) {
+ defaultSize = defaultSize.getCopy().setHeight(LayoutUtils.COLLAPSED_VERTICAL_REGION_HEIGHT);
+ } else if (isRegion()) {
+ // For region with a defined size in the VSM, the defined size is considered instead of the default one.
+ // I'm not sure that this rule should be the same for all kind of containers... I let this comment as a
+ // clue if an analysis, about a bug concerning "standard container", brings you here.
+ Integer width = ((DDiagramElementContainer) dde).getWidth();
+ if (width != null && width > 0) {
+ defaultSize = defaultSize.getCopy().setWidth(width * LayoutUtils.SCALE);
+ }
+
+ Integer height = ((DDiagramElementContainer) dde).getHeight();
+ if (height != null && height > 0) {
+ defaultSize = defaultSize.getCopy().setHeight(height * LayoutUtils.SCALE);
+ }
+ }
+ return defaultSize;
+ }
+ }
+
+ /**
+ * Get the default figure dimension of this edit part.
+ *
+ * @return the default figure dimension of this edit part
+ * @deprecated Only here as security if user activates {@link LayoutUtil#isArrangeAtOpeningChangesDisabled()}.
+ */
+ public Dimension oldGetDefaultDimension() {
DDiagramElement dde = resolveDiagramElement();
Dimension defaultSize = LayoutUtils.NEW_DEFAULT_CONTAINER_DIMENSION;
if (dde instanceof DNodeContainer) {
@@ -536,7 +575,7 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
*/
@Override
protected NodeFigure createNodeFigure() {
- BorderedNodeFigure nodeFigure = new BorderedNodeFigure(createMainFigure()) {
+ BorderedNodeFigure nodeFigure = new ContainerBorderedNodeFigure(createMainFigure()) {
@Override
public void paint(Graphics graphics) {
ShowingViewUtil.initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
@@ -825,23 +864,23 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
final Point position = new Point();
if (graphicalEditPart.getNotationView() instanceof Node && ((Node) graphicalEditPart.getNotationView()).getLayoutConstraint() instanceof Size) {
final Size size = (Size) ((Node) graphicalEditPart.getNotationView()).getLayoutConstraint();
- dimension.width = size.getWidth();
- dimension.height = size.getHeight();
+ dimension.setWidth(size.getWidth());
+ dimension.setHeight(size.getHeight());
}
if (graphicalEditPart.getNotationView() instanceof Node && ((Node) graphicalEditPart.getNotationView()).getLayoutConstraint() instanceof Location) {
final Location location = (Location) ((Node) graphicalEditPart.getNotationView()).getLayoutConstraint();
- position.x = location.getX();
- position.y = location.getY();
+ position.setX(location.getX());
+ position.setY(location.getY());
}
final DNode viewNode = (DNode) semantic;
boolean collapsed = new DDiagramElementQuery(viewNode).isIndirectlyCollapsed();
if (!collapsed && (viewNode.getResizeKind() == ResizeKind.NSEW_LITERAL || viewNode.getResizeKind() == ResizeKind.NORTH_SOUTH_LITERAL)) {
- dimension.height += request.getSizeDelta().height / getZoomManager().getZoom();
+ dimension.setHeight(dimension.height + (int) (request.getSizeDelta().height / getZoomManager().getZoom()));
switch (request.getResizeDirection()) {
case PositionConstants.NORTH:
case PositionConstants.NORTH_WEST:
case PositionConstants.NORTH_EAST:
- position.y -= request.getSizeDelta().height / getZoomManager().getZoom();
+ position.setY(position.y - (int) (request.getSizeDelta().height / getZoomManager().getZoom()));
break;
default:
break;
@@ -849,12 +888,12 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
}
if (!collapsed && (viewNode.getResizeKind() == ResizeKind.NSEW_LITERAL || viewNode.getResizeKind() == ResizeKind.EAST_WEST_LITERAL)) {
- dimension.width += request.getSizeDelta().width / getZoomManager().getZoom();
+ dimension.setWidth(dimension.width + (int) (request.getSizeDelta().width / getZoomManager().getZoom()));
switch (request.getResizeDirection()) {
case PositionConstants.WEST:
case PositionConstants.NORTH_WEST:
case PositionConstants.SOUTH_WEST:
- position.x -= request.getSizeDelta().width / getZoomManager().getZoom();
+ position.setX(position.x - (int) (request.getSizeDelta().width / getZoomManager().getZoom()));
break;
default:
break;
@@ -957,4 +996,15 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
this.useOverlayLabel = useOverlayLabel;
}
+ /**
+ * Return true if the current container is a region and if the CTRL shortcut key is pressed, false otherwise.<BR/>
+ * This mechanism allows to select and move the regions container more easily.
+ *
+ * @param request
+ * The request "in progress"
+ * @return true if the current container is a region and if the CTRL shortcut key is pressed, false otherwise.
+ */
+ public boolean shouldUseRegionsContainerDragTracker(Request request) {
+ return request instanceof SelectionRequest && ((SelectionRequest) request).isControlKeyPressed() && isRegion() && getParent() != null;
+ }
}

Back to the top