Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-08-21 13:24:14 +0000
committerMaxime Porhel2015-08-25 13:42:33 +0000
commitef5371f3061d69b2ebf67e7b8b36ab1857ea59e8 (patch)
tree3b770f4732eb70bfc3185b22d2f4185ce4690f8c
parentae79199c97c51a5cecd2cfc2f29d22eafd1ffb88 (diff)
downloadorg.eclipse.sirius-ef5371f3061d69b2ebf67e7b8b36ab1857ea59e8.tar.gz
org.eclipse.sirius-ef5371f3061d69b2ebf67e7b8b36ab1857ea59e8.tar.xz
org.eclipse.sirius-ef5371f3061d69b2ebf67e7b8b36ab1857ea59e8.zip
[472036] Allow the user to handle empty space when F3 is pressed
This allows to manually resize the last regions without resizing their parent container and to resize a container without resizing its regions. User can remove the empty space in recursive region containers or when the specified RC size is bigger than the Region size. Bug: 472036 Change-Id: Ic1f98270c3b8ec7760df83a0f305ac14a11fc397 Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java41
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionResizableEditPolicy.java34
2 files changed, 75 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
index 4fd8be0488..f1233ef1b7 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
@@ -14,9 +14,11 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
@@ -202,11 +204,25 @@ public class RegionContainerResizableEditPolicy extends AirResizableEditPolicy {
ChangeBoundsRequest req = initConstrainedRequest(request);
req.setEditParts(Lists.newArrayList(regionToResize));
req.setSizeDelta(new Dimension(sizeDelta.width, 0));
+ if (query.isResizeFromRight()) {
+ // Handle F3 for regions in region to allow manual layout.
+ // Allow manual resize of the region container to reduce
+ // empty space due to VSM specified size or recursive
+ // regions.
+ req = handleEmptySpace(request, req);
+ }
constrainedRequests.add(req);
} else if (stackDirection == PositionConstants.EAST_WEST && (query.isResizeFromTop() || query.isResizeFromBottom()) && sizeDelta.height != 0) {
ChangeBoundsRequest req = initConstrainedRequest(request);
req.setEditParts(Lists.newArrayList(regionToResize));
req.setSizeDelta(new Dimension(0, sizeDelta.height));
+ if (query.isResizeFromBottom()) {
+ // Handle F3 for regions in region to allow manual layout.
+ // Allow manual resize of the region container to reduce
+ // empty space due to VSM specified size or recursive
+ // regions.
+ req = handleEmptySpace(request, req);
+ }
constrainedRequests.add(req);
}
}
@@ -214,6 +230,31 @@ public class RegionContainerResizableEditPolicy extends AirResizableEditPolicy {
return constrainedRequests;
}
+ private ChangeBoundsRequest handleEmptySpace(ChangeBoundsRequest initialRequest, ChangeBoundsRequest constrainedRequest) {
+ ChangeBoundsRequest result = constrainedRequest;
+ Object object = initialRequest.getExtendedData().get(SiriusResizeTracker.CHILDREN_MOVE_MODE_KEY);
+ boolean keepSameAbsoluteLocation = (object == null && SiriusResizeTracker.DEFAULT_CHILDREN_MOVE_MODE) || (object != null && ((Boolean) object).booleanValue());
+ if (!initialRequest.isConstrainedResize() && !keepSameAbsoluteLocation) {
+ result.setMoveDelta(new Point(0, 0));
+ result.setSizeDelta(new Dimension(0, 0));
+
+ Rectangle rect = new Rectangle();
+ IFigure parentFigure = getHostFigure();
+ for (IGraphicalEditPart part : Iterables.filter(constrainedRequest.getEditParts(), IGraphicalEditPart.class)) {
+ IFigure figure = part.getFigure();
+ rect = rect.getUnion(figure.getBounds());
+ parentFigure = figure.getParent();
+ }
+
+ // Restrict the move to the parent bounds.
+ RequestQuery requestQuery = new RequestQuery(initialRequest);
+ if (rect.contains(requestQuery.getLogicalTransformedRectangle(parentFigure.getBounds()).getBottomRight())) {
+ result = null;
+ }
+ }
+ return result;
+ }
+
private ChangeBoundsRequest initConstrainedRequest(ChangeBoundsRequest request) {
ChangeBoundsRequest req = new ChangeBoundsRequest();
req.setConstrainedResize(true);
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionResizableEditPolicy.java
index 0d380b27b0..58ac59ce5a 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionResizableEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionResizableEditPolicy.java
@@ -126,6 +126,9 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
if (concernRegion()) {
Option<ChangeBoundsRequest> siblingRequest = getConstrainedSiblingRequest(request);
if (siblingRequest.some() && siblingRequest.get().getEditParts() != null && siblingRequest.get().getEditParts().size() == 1) {
+ if (siblingRequest.get().getTransformedRectangle(new Rectangle()).equals(new Rectangle())) {
+ return;
+ }
EditPart siblingPart = (EditPart) siblingRequest.get().getEditParts().get(0);
siblingPart.showSourceFeedback(siblingRequest.get());
}
@@ -139,6 +142,9 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
if (concernRegion()) {
Option<ChangeBoundsRequest> siblingRequest = getConstrainedSiblingRequest(request);
if (siblingRequest.some() && siblingRequest.get().getEditParts() != null && siblingRequest.get().getEditParts().size() == 1) {
+ if (siblingRequest.get().getTransformedRectangle(new Rectangle()).equals(new Rectangle())) {
+ return;
+ }
EditPart siblingPart = (EditPart) siblingRequest.get().getEditParts().get(0);
siblingPart.eraseSourceFeedback(siblingRequest.get());
}
@@ -279,6 +285,11 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setResizeDirection(request.getResizeDirection());
req.setSizeDelta(new Dimension(0, sizeDelta.height));
constrainedRequest = req;
+ // Handle F3 for regions in region to allow manual layout.
+ // Allow manual resize of the region container to reduce
+ // empty space due to VSM specified size or recursive
+ // regions.
+ constrainedRequest = handleEmptySpaceInContainerOnLastRegionResize(request, constrainedRequest);
}
} else {
Option<AbstractDiagramElementContainerEditPart> follo = getFollowingRegion();
@@ -315,6 +326,24 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
return constrainedRequest;
}
+ private ChangeBoundsRequest handleEmptySpaceInContainerOnLastRegionResize(ChangeBoundsRequest initialRequest, ChangeBoundsRequest constrainedRequest) {
+ ChangeBoundsRequest result = constrainedRequest;
+ Object object = initialRequest.getExtendedData().get(SiriusResizeTracker.CHILDREN_MOVE_MODE_KEY);
+ boolean keepSameAbsoluteLocation = (object == null && SiriusResizeTracker.DEFAULT_CHILDREN_MOVE_MODE) || (object != null && ((Boolean) object).booleanValue());
+ if (!initialRequest.isConstrainedResize() && !keepSameAbsoluteLocation) {
+ result.setMoveDelta(new Point(0, 0));
+ result.setSizeDelta(new Dimension(0, 0));
+
+ IFigure hostFigure = getHostFigure();
+ IFigure parentFigure = hostFigure.getParent();
+ // Restrict the move to the parent bounds.
+ if (!parentFigure.getBounds().contains(new RequestQuery(initialRequest).getLogicalTransformedRectangle(hostFigure.getBounds()).getBottomRight())) {
+ result = null;
+ }
+ }
+ return result;
+ }
+
private ChangeBoundsRequest getHStackConstrainedSiblingRequest(ChangeBoundsRequest request, RequestQuery query, Dimension sizeDelta) {
ChangeBoundsRequest constrainedRequest = null;
ChangeBoundsRequest req = initSiblingRequest(request);
@@ -348,6 +377,11 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setResizeDirection(request.getResizeDirection());
req.setSizeDelta(new Dimension(sizeDelta.width, 0));
constrainedRequest = req;
+ // Handle F3 for regions in region to allow manual layout.
+ // Allow manual resize of the region container to reduce
+ // empty space due to VSM specified size or recursive
+ // regions.
+ constrainedRequest = handleEmptySpaceInContainerOnLastRegionResize(request, constrainedRequest);
}
} else {
Option<AbstractDiagramElementContainerEditPart> follo = getFollowingRegion();

Back to the top