Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-09-10 12:13:00 +0000
committerMaxime Porhel2015-09-11 09:55:21 +0000
commitc519ba977db3dc4fb31e1270883cabb4e650b2e6 (patch)
tree3e4859f2c579701ac819d0ea39be2ada4fe0e49e
parentc22c95db074dc6f12790a0fd39ccaf2d460f13a3 (diff)
downloadorg.eclipse.sirius-c519ba977db3dc4fb31e1270883cabb4e650b2e6.tar.gz
org.eclipse.sirius-c519ba977db3dc4fb31e1270883cabb4e650b2e6.tar.xz
org.eclipse.sirius-c519ba977db3dc4fb31e1270883cabb4e650b2e6.zip
[477049] Delegate edge creation and reconnection to the RegionContainer
. Delegates the edge creation request to the RegionContainer when there is no executable creation command. The getCommand() method is called in understand request to easily handle all cases: getConnectionCreationCommand, getConnectionCompleteCommand, EdgeCreationTool with(out) precondition, extra mappings, NoteAttachment. . Always delegate the reconnect request to the RegionContainer. Bug: 477049 Change-Id: Ic848d03bafa2cfcb4ce25708cfbccc6561431918 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/edit/api/part/AbstractDiagramElementContainerEditPart.java12
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SiriusGraphicalNodeEditPolicy.java15
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/AbstractDDiagramElementContainerItemSemanticEditPolicy.java20
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/RegionGraphicalNodeEditPolicy.java53
4 files changed, 86 insertions, 14 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 4cffa47282..014d5bc0a5 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
@@ -69,10 +69,10 @@ import org.eclipse.sirius.diagram.ui.edit.internal.part.AbstractDiagramNodeEditP
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramContainerEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.validators.ResizeValidator;
-import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusGraphicalNodeEditPolicy;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.AbstractDiagramElementContainerNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNode4EditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.policies.NonResizableAndNonDuplicableEditPolicy;
+import org.eclipse.sirius.diagram.ui.internal.edit.policies.RegionGraphicalNodeEditPolicy;
import org.eclipse.sirius.diagram.ui.internal.view.factories.ViewLocationHint;
import org.eclipse.sirius.diagram.ui.tools.api.figure.AlphaDropShadowBorder;
import org.eclipse.sirius.diagram.ui.tools.api.figure.FoldingToggleAwareClippingStrategy;
@@ -190,11 +190,11 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
@Override
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
- // CompoundEditPolicy compoundEditPolicy = new CompoundEditPolicy();
- // compoundEditPolicy.addEditPolicy(new
- // SiriusGraphicalNodeEditPolicy(getEditingDomain()));
+
AbstractDiagramNodeEditPartOperation.createDefaultEditPolicies(this);
- installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new SiriusGraphicalNodeEditPolicy());
+ if (isRegion()) {
+ installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new RegionGraphicalNodeEditPolicy());
+ }
installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
}
@@ -862,7 +862,7 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
if (containerCompartment != null) {
mainFigure.add(containerCompartment);
}
-
+
// Update drop shadow.
mainFigure.setBorder(tmpFigure.getBorder());
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SiriusGraphicalNodeEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SiriusGraphicalNodeEditPolicy.java
index 8c2f1de2e9..531abbc85a 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SiriusGraphicalNodeEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SiriusGraphicalNodeEditPolicy.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES.
+ * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -879,6 +879,9 @@ public class SiriusGraphicalNodeEditPolicy extends TreeGraphicalNodeEditPolicy {
* the snapToGrid state.
*/
protected EdgeLayoutData getEdgeLayoutDataWithSnapToGrid(CreateConnectionRequest request, INodeEditPart sourceEditPart, INodeEditPart targetEditPart, Point sourceLocation, Point targetLocation) {
+ IGraphicalEditPart srcEditPart = (IGraphicalEditPart) sourceEditPart;
+ IGraphicalEditPart tgtEditPart = (IGraphicalEditPart) targetEditPart;
+
// Get the absolute source and target location but in 100% to facilitate
// the computing
Rectangle absoluteSourceBoundsIn100Percent = GraphicalHelper.getAbsoluteBoundsIn100Percent(sourceEditPart);
@@ -888,12 +891,10 @@ public class SiriusGraphicalNodeEditPolicy extends TreeGraphicalNodeEditPolicy {
// Compute intersection between the line (source location<-->target
// location) and the source node
- Option<Point> intersectionSourcePoint = GraphicalHelper.getIntersection(absoluteSourceLocationIn100Percent, absoluteTargetLocationIn100Percent, (IGraphicalEditPart) sourceEditPart, false,
- true);
+ Option<Point> intersectionSourcePoint = GraphicalHelper.getIntersection(absoluteSourceLocationIn100Percent, absoluteTargetLocationIn100Percent, srcEditPart, false, true);
// Compute intersection between the line (source location<-->target
// location) and the target node
- Option<Point> intersectionTargetPoint = GraphicalHelper.getIntersection(absoluteSourceLocationIn100Percent, absoluteTargetLocationIn100Percent, (IGraphicalEditPart) targetEditPart, true,
- true);
+ Option<Point> intersectionTargetPoint = GraphicalHelper.getIntersection(absoluteSourceLocationIn100Percent, absoluteTargetLocationIn100Percent, tgtEditPart, true, true);
// Compute the snap source location and the snap target location
Point absoluteSourceLocationSnapIn100Percent;
Point absoluteTargetLocationSnapIn100Percent;
@@ -925,9 +926,9 @@ public class SiriusGraphicalNodeEditPolicy extends TreeGraphicalNodeEditPolicy {
// Applied the zoom of the current diagram to set the pointList, the
// source reference point and the target reference point.
PrecisionPoint absoluteSourceLocationSnap = new PrecisionPoint(absoluteSourceLocationSnapIn100Percent);
- GraphicalHelper.applyInverseZoomOnPoint((IGraphicalEditPart) sourceEditPart, absoluteSourceLocationSnap);
+ GraphicalHelper.applyInverseZoomOnPoint(srcEditPart, absoluteSourceLocationSnap);
PrecisionPoint absoluteTargteLoactionSnap = new PrecisionPoint(absoluteTargetLocationSnapIn100Percent);
- GraphicalHelper.applyInverseZoomOnPoint((IGraphicalEditPart) targetEditPart, absoluteTargteLoactionSnap);
+ GraphicalHelper.applyInverseZoomOnPoint(tgtEditPart, absoluteTargteLoactionSnap);
edgeLayoutData.setSourceRefPoint(absoluteSourceLocationSnap);
edgeLayoutData.setTargetRefPoint(absoluteTargteLoactionSnap);
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/AbstractDDiagramElementContainerItemSemanticEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/AbstractDDiagramElementContainerItemSemanticEditPolicy.java
index eadba88acb..da77ba5bf2 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/AbstractDDiagramElementContainerItemSemanticEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/AbstractDDiagramElementContainerItemSemanticEditPolicy.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2013 THALES GLOBAL SERVICES.
+ * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.internal.edit.policies;
+import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
@@ -18,6 +19,7 @@ import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.DiagramPackage;
+import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.commands.DEdgeCreateCommand;
import org.eclipse.sirius.diagram.ui.internal.edit.commands.DNode4CreateCommand;
import org.eclipse.sirius.diagram.ui.internal.providers.SiriusElementTypes;
@@ -94,4 +96,20 @@ public abstract class AbstractDDiagramElementContainerItemSemanticEditPolicy ext
return null;
}
+ @Override
+ public boolean understandsRequest(Request request) {
+ boolean understandsRequest = super.understandsRequest(request);
+ if (understandsRequest) {
+ // Reconnect is disabled on Regions: the reconnect tool does not
+ // handle extra source/target mapping and there is currently no
+ // other means to allow reconnect tools on the RegionContainer.
+ if (REQ_RECONNECT_SOURCE.equals(request.getType()) || REQ_RECONNECT_TARGET.equals(request.getType())) {
+ if (getHost() instanceof AbstractDiagramElementContainerEditPart) {
+ return !((AbstractDiagramElementContainerEditPart) getHost()).isRegion();
+ }
+ }
+ }
+ return understandsRequest;
+ }
+
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/RegionGraphicalNodeEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/RegionGraphicalNodeEditPolicy.java
new file mode 100644
index 0000000000..7ea223dbd2
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/policies/RegionGraphicalNodeEditPolicy.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.diagram.ui.internal.edit.policies;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagramElementContainer;
+import org.eclipse.sirius.diagram.business.internal.query.DDiagramElementContainerExperimentalQuery;
+import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusGraphicalNodeEditPolicy;
+
+/**
+ * Specific graphical node policy for Regions: if an edge creation tool
+ *
+ * @author mporhel
+ */
+@SuppressWarnings("restriction")
+public class RegionGraphicalNodeEditPolicy extends SiriusGraphicalNodeEditPolicy {
+
+ @Override
+ public EditPart getTargetEditPart(Request request) {
+ EditPart targetEp = super.getTargetEditPart(request);
+ org.eclipse.gef.GraphicalEditPart host = (org.eclipse.gef.GraphicalEditPart) this.getHost();
+ if (targetEp == host && host.getModel() instanceof View) {
+ View view = (View) host.getModel();
+ if (view.getElement() instanceof DDiagramElementContainer && new DDiagramElementContainerExperimentalQuery((DDiagramElementContainer) view.getElement()).isRegion()) {
+ if (REQ_CONNECTION_START.equals(request.getType()) || REQ_CONNECTION_END.equals(request.getType())) {
+ // Delegate this request to the RegionContainer if there is
+ // no valid edge creation tool for this request.
+ Command command = getCommand(request);
+ if (command == null || !command.canExecute()) {
+ targetEp = null;
+ }
+ } else {
+ // Delegate all reconnect requests to the RegionContainer
+ // until ReconnectionEdgeDescription handles extra
+ // source/target mappings.
+ targetEp = null;
+ }
+ }
+ }
+ return targetEp;
+ }
+}

Back to the top