Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-09-17 09:07:22 +0000
committerMaxime Porhel2015-09-22 13:00:50 +0000
commit92b96cbbc73ebf2b9af5b194ec849b44cb5791cb (patch)
treea69f7278fab8340f9d4ba1b43670c437c0413864
parent459e4ae10765c5184104f83a772d5eca0b5e38fa (diff)
downloadorg.eclipse.sirius-92b96cbbc73ebf2b9af5b194ec849b44cb5791cb.tar.gz
org.eclipse.sirius-92b96cbbc73ebf2b9af5b194ec849b44cb5791cb.tar.xz
org.eclipse.sirius-92b96cbbc73ebf2b9af5b194ec849b44cb5791cb.zip
[472036] Correct resize from top propagation to HStack region container
. The resize from top of a RegionContainer displayed as HStack region and resized from its first region was not propagated to the main RegionContainer. . Simplify the propagation request computation. Bug: 472036 Change-Id: I018f3eb0317debb32bab0ef8802e2d2cfc359f95 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/RegionResizableEditPolicy.java167
1 files changed, 74 insertions, 93 deletions
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 622ea6509a..610f4964ec 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
@@ -242,31 +242,25 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
RequestQuery query = new RequestQuery(request);
Dimension sizeDelta = request.getSizeDelta().getCopy();
+ EditPart regionContainer = getRegionContainerPart();
+ boolean allowedRegionContainerPropagation = !request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer;
+
int stackDirection = getStackDirection();
if (stackDirection == PositionConstants.NORTH_SOUTH) {
- constrainedRequest = Options.newSome(getVStackConstrainedSiblingRequest(request, query, sizeDelta));
+ constrainedRequest = Options.newSome(getVStackConstrainedSiblingRequest(request, query, sizeDelta, allowedRegionContainerPropagation, regionContainer));
} else if (stackDirection == PositionConstants.EAST_WEST) {
- constrainedRequest = Options.newSome(getHStackConstrainedSiblingRequest(request, query, sizeDelta));
+ constrainedRequest = Options.newSome(getHStackConstrainedSiblingRequest(request, query, sizeDelta, allowedRegionContainerPropagation, regionContainer));
}
return constrainedRequest;
}
- private ChangeBoundsRequest getVStackConstrainedSiblingRequest(ChangeBoundsRequest request, RequestQuery query, Dimension sizeDelta) {
+ private ChangeBoundsRequest getVStackConstrainedSiblingRequest(ChangeBoundsRequest request, RequestQuery query, Dimension sizeDelta, boolean allowedRegionContainerPropagation,
+ EditPart regionContainer) {
ChangeBoundsRequest constrainedRequest = null;
ChangeBoundsRequest req = initSiblingRequest(request);
if (query.isResizeFromTop()) {
- EditPart regionContainer = getRegionContainerPart();
- if (isFirstRegionPart()) {
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- req.setResizeDirection(request.getResizeDirection());
- req.setSizeDelta(new Dimension(0, sizeDelta.height));
- req.setMoveDelta(new Point(0, -sizeDelta.height));
- constrainedRequest = req;
- }
- } else {
+ if (!isFirstRegionPart()) {
Option<AbstractDiagramElementContainerEditPart> pred = getPrecedingRegion();
if (pred.some() && !request.isConstrainedResize()) {
req.setEditParts(pred.get());
@@ -274,23 +268,16 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setSizeDelta(new Dimension(0, sizeDelta.getNegated().height));
constrainedRequest = req;
}
+ } else if (allowedRegionContainerPropagation) {
+ // resize regioncontainer from first region part resize.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(0, sizeDelta.height));
+ req.setMoveDelta(new Point(0, -sizeDelta.height));
+ constrainedRequest = req;
}
} else if (query.isResizeFromBottom()) {
- EditPart regionContainer = getRegionContainerPart();
- if (isLastRegionPart()) {
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- 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 {
+ if (!isLastRegionPart()) {
Option<AbstractDiagramElementContainerEditPart> follo = getFollowingRegion();
if (follo.some() && !request.isConstrainedResize()) {
Point moveDelta = new Point(sizeDelta.width, sizeDelta.height);
@@ -300,27 +287,31 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setMoveDelta(new Point(0, moveDelta.y));
constrainedRequest = req;
}
- }
- } else if (query.isResizeFromRight()) {
- EditPart regionContainer = getRegionContainerPart();
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- req.setResizeDirection(request.getResizeDirection());
- req.setSizeDelta(new Dimension(sizeDelta.width, 0));
- constrainedRequest = req;
- }
- } else if (query.isResizeFromLeft()) {
- EditPart regionContainer = getRegionContainerPart();
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
+ } else if (allowedRegionContainerPropagation) {
+ // resize regioncontainer from last region part resize.
req.setEditParts(regionContainer);
req.setResizeDirection(request.getResizeDirection());
- req.setSizeDelta(new Dimension(sizeDelta.width, 0));
- req.setMoveDelta(new Point(-sizeDelta.width, 0));
+ 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 if (query.isResizeFromRight() && allowedRegionContainerPropagation) {
+ // resize regioncontainer.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(sizeDelta.width, 0));
+ constrainedRequest = req;
+ } else if (query.isResizeFromLeft() && allowedRegionContainerPropagation) {
+ // resize regioncontainer.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(sizeDelta.width, 0));
+ req.setMoveDelta(new Point(-sizeDelta.width, 0));
+ constrainedRequest = req;
}
return constrainedRequest;
}
@@ -343,22 +334,13 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
return result;
}
- private ChangeBoundsRequest getHStackConstrainedSiblingRequest(ChangeBoundsRequest request, RequestQuery query, Dimension sizeDelta) {
+ private ChangeBoundsRequest getHStackConstrainedSiblingRequest(ChangeBoundsRequest request, RequestQuery query, Dimension sizeDelta, boolean regionContainerPropagationAllowed,
+ EditPart regionContainer) {
ChangeBoundsRequest constrainedRequest = null;
ChangeBoundsRequest req = initSiblingRequest(request);
if (query.isResizeFromLeft()) {
- EditPart regionContainer = getRegionContainerPart();
- if (isFirstRegionPart()) {
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- req.setResizeDirection(request.getResizeDirection());
- req.setSizeDelta(new Dimension(sizeDelta.width, 0));
- req.setMoveDelta(new Point(-sizeDelta.width, 0));
- constrainedRequest = req;
- }
- } else {
+ if (!isFirstRegionPart()) {
Option<AbstractDiagramElementContainerEditPart> pred = getPrecedingRegion();
if (pred.some() && !request.isConstrainedResize()) {
req.setEditParts(pred.get());
@@ -366,23 +348,16 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setSizeDelta(new Dimension(sizeDelta.getNegated().width, 0));
constrainedRequest = req;
}
+ } else if (regionContainerPropagationAllowed) {
+ // resize regioncontainer from first region part resize.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(sizeDelta.width, 0));
+ req.setMoveDelta(new Point(-sizeDelta.width, 0));
+ constrainedRequest = req;
}
} else if (query.isResizeFromRight()) {
- if (isLastRegionPart()) {
- EditPart regionContainer = getRegionContainerPart();
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- 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 {
+ if (!isLastRegionPart()) {
Option<AbstractDiagramElementContainerEditPart> follo = getFollowingRegion();
if (follo.some() && !request.isConstrainedResize()) {
req.setEditParts(follo.get());
@@ -391,25 +366,31 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
req.setMoveDelta(new Point(sizeDelta.width, 0));
constrainedRequest = req;
}
- }
- } else if (query.isResizeFromBottom()) {
- EditPart regionContainer = getRegionContainerPart();
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
+ } else if (regionContainerPropagationAllowed) {
+ // resize regioncontainer from last region part resize.
req.setEditParts(regionContainer);
req.setResizeDirection(request.getResizeDirection());
- req.setSizeDelta(new Dimension(0, sizeDelta.height));
- constrainedRequest = req;
- }
- } else if (query.isResizeFromTop()) {
- EditPart regionContainer = getRegionContainerPart();
- if (!request.isConstrainedResize() || request.getExtendedData().get(RegionContainerResizableEditPolicy.REGION_RESIZE_PROPAGATOR) != regionContainer) {
- // resize regioncontainer.
- req.setEditParts(regionContainer);
- req.setSizeDelta(new Dimension(0, sizeDelta.height));
- req.setMoveDelta(new Point(0, -sizeDelta.height));
+ 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 if (query.isResizeFromBottom() && regionContainerPropagationAllowed) {
+ // resize regioncontainer.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(0, sizeDelta.height));
+ constrainedRequest = req;
+ } else if (query.isResizeFromTop() && regionContainerPropagationAllowed) {
+ // resize regioncontainer from first region part resize.
+ req.setEditParts(regionContainer);
+ req.setResizeDirection(request.getResizeDirection());
+ req.setSizeDelta(new Dimension(0, sizeDelta.height));
+ req.setMoveDelta(new Point(0, -sizeDelta.height));
+ constrainedRequest = req;
}
return constrainedRequest;
}
@@ -434,7 +415,7 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
}
private Option<AbstractDiagramElementContainerEditPart> getPrecedingRegion() {
- List<AbstractDiagramElementContainerEditPart> siblingRegions = getSiblingRegionPart();
+ List<AbstractDiagramElementContainerEditPart> siblingRegions = getSiblingRegionParts();
int precedingIndex = siblingRegions.indexOf(getHost()) - 1;
if (precedingIndex >= 0 && siblingRegions.size() >= precedingIndex) {
return Options.newSome(siblingRegions.get(precedingIndex));
@@ -443,7 +424,7 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
}
private Option<AbstractDiagramElementContainerEditPart> getFollowingRegion() {
- List<AbstractDiagramElementContainerEditPart> siblingRegions = getSiblingRegionPart();
+ List<AbstractDiagramElementContainerEditPart> siblingRegions = getSiblingRegionParts();
int followingIndex = siblingRegions.indexOf(getHost()) + 1;
if (followingIndex > 0 && siblingRegions.size() > followingIndex) {
return Options.newSome(siblingRegions.get(followingIndex));
@@ -471,7 +452,7 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
return direction;
}
- private List<AbstractDiagramElementContainerEditPart> getSiblingRegionPart() {
+ private List<AbstractDiagramElementContainerEditPart> getSiblingRegionParts() {
EditPart parent = getHost() != null ? getHost().getParent() : null;
if (parent instanceof AbstractDNodeContainerCompartmentEditPart) {
return Lists.newArrayList(Iterables.filter(parent.getChildren(), AbstractDiagramElementContainerEditPart.class));
@@ -480,12 +461,12 @@ public class RegionResizableEditPolicy extends AirResizableEditPolicy {
}
private boolean isFirstRegionPart() {
- Iterable<AbstractDiagramElementContainerEditPart> regionParts = getSiblingRegionPart();
+ Iterable<AbstractDiagramElementContainerEditPart> regionParts = getSiblingRegionParts();
return !Iterables.isEmpty(regionParts) && Iterables.getFirst(regionParts, null) == getHost();
}
private boolean isLastRegionPart() {
- Iterable<AbstractDiagramElementContainerEditPart> regionParts = getSiblingRegionPart();
+ Iterable<AbstractDiagramElementContainerEditPart> regionParts = getSiblingRegionParts();
return !Iterables.isEmpty(regionParts) && Iterables.getLast(regionParts, null) == getHost();
}

Back to the top