Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Barbin2014-10-21 16:16:30 +0000
committerFlorian Barbin2014-10-22 09:42:20 +0000
commitbc7cca665b5978b9d8f6d54b8371b5d87a3a50dc (patch)
treedc6ba101eccc33eccac00d4b5dc5f236367a355c
parent5608523e2474c181bba1c7679498c43e29fabd48 (diff)
downloadorg.eclipse.sirius-bc7cca665b5978b9d8f6d54b8371b5d87a3a50dc.tar.gz
org.eclipse.sirius-bc7cca665b5978b9d8f6d54b8371b5d87a3a50dc.tar.xz
org.eclipse.sirius-bc7cca665b5978b9d8f6d54b8371b5d87a3a50dc.zip
[437528] Handle the resize case
* If a centered edge source or target is resized, we now launch a command to keep the edge ends centered if needed. * This commit fixes the problem described in comment 19 of bug 437528 [1] [1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=437528#c19 Bug: 437528 Change-Id: Iae1773a2b1e83e6032de0c394689ad2d7885641e Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/AirResizableEditPolicy.java7
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SpecificBorderItemSelectionEditPolicy.java5
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/commands/CenterEditPartEdgesCommand.java76
3 files changed, 88 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/AirResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/AirResizableEditPolicy.java
index e2679b43f1..8f99eeacb3 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/AirResizableEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/AirResizableEditPolicy.java
@@ -44,6 +44,7 @@ import org.eclipse.sirius.diagram.NodeStyle;
import org.eclipse.sirius.diagram.description.DiagramElementMapping;
import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramNodeEditPart;
import org.eclipse.sirius.diagram.ui.edit.internal.validators.ResizeValidator;
+import org.eclipse.sirius.diagram.ui.internal.edit.commands.CenterEditPartEdgesCommand;
import org.eclipse.sirius.diagram.ui.internal.edit.commands.ChangeBendpointsOfEdgesCommand;
import org.eclipse.sirius.diagram.ui.internal.edit.commands.ChildrenAdjustmentCommand;
import org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabel;
@@ -186,6 +187,12 @@ public class AirResizableEditPolicy extends ResizableShapeEditPolicy {
result = new ICommandProxy(solution);
}
}
+
+ // we add a command to keep the edges centered (if they should be)
+ if (result != null && getHost() instanceof IGraphicalEditPart) {
+ CenterEditPartEdgesCommand centerEditPartEdgesCommand = new CenterEditPartEdgesCommand((IGraphicalEditPart) getHost());
+ result = result.chain(new ICommandProxy(centerEditPartEdgesCommand));
+ }
return result;
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SpecificBorderItemSelectionEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SpecificBorderItemSelectionEditPolicy.java
index 25064e3cc5..ba4a129937 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SpecificBorderItemSelectionEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/SpecificBorderItemSelectionEditPolicy.java
@@ -65,6 +65,7 @@ import org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery;
import org.eclipse.sirius.diagram.ui.business.internal.query.RequestQuery;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart;
import org.eclipse.sirius.diagram.ui.edit.internal.part.PortLayoutHelper;
+import org.eclipse.sirius.diagram.ui.internal.edit.commands.CenterEditPartEdgesCommand;
import org.eclipse.sirius.diagram.ui.internal.edit.commands.ChangeBendpointsOfEdgesCommand;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.operation.ShiftEdgeIdentityAnchorOperation;
@@ -640,6 +641,10 @@ public class SpecificBorderItemSelectionEditPolicy extends ResizableEditPolicyEx
ShiftEdgeIdentityAnchorOperation operation = new ShiftEdgeIdentityAnchorOperation(request);
ICommand command = CommandFactory.createICommand(editingDomain, operation);
ctc.add(command);
+
+ // we add a command to keep the edges centered (if they should be)
+ CenterEditPartEdgesCommand centerEditPartEdgesCommand = new CenterEditPartEdgesCommand((IGraphicalEditPart) host);
+ ctc.add(centerEditPartEdgesCommand);
return new ICommandProxy(ctc);
}
return superCommand;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/commands/CenterEditPartEdgesCommand.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/commands/CenterEditPartEdgesCommand.java
new file mode 100644
index 0000000000..edfe7ee2d3
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/commands/CenterEditPartEdgesCommand.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2014 THALES GLOBAL SERVICES.
+ * 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.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.sirius.diagram.ui.internal.operation.CenterEdgeEndModelChangeOperation;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * A command that centers (if needed) the incoming and outgoing edges of the
+ * given graphicalEditPart.
+ *
+ * @author Florian Barbin
+ *
+ */
+public class CenterEditPartEdgesCommand extends AbstractTransactionalCommand {
+
+ IGraphicalEditPart editPart;
+
+ /**
+ * Constructor.
+ *
+ * @param graphicalEditPart
+ * the edit part for which we need to keep center edges (if they
+ * should be)
+ */
+ public CenterEditPartEdgesCommand(IGraphicalEditPart graphicalEditPart) {
+ super(graphicalEditPart.getEditingDomain(), "Center Edges", null);
+ editPart = graphicalEditPart;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+
+ List<Object> edges = new ArrayList<Object>();
+ edges.addAll(editPart.getSourceConnections());
+ edges.addAll(editPart.getTargetConnections());
+ for (ConnectionEditPart connection : Iterables.filter(edges, ConnectionEditPart.class)) {
+ Object model = connection.getModel();
+ if (model instanceof Edge) {
+ CenterEdgeEndModelChangeOperation centerEdgeEndModelChangeOperation = new CenterEdgeEndModelChangeOperation((Edge) model, false);
+ centerEdgeEndModelChangeOperation.execute();
+ }
+
+ }
+
+ return CommandResult.newOKCommandResult();
+ }
+
+ @Override
+ public void dispose() {
+ editPart = null;
+ super.dispose();
+ }
+
+}

Back to the top