diff options
author | Mickael ADAM | 2017-10-18 08:31:53 +0000 |
---|---|---|
committer | Patrick Tessier | 2017-10-30 14:12:29 +0000 |
commit | c022e227d510d7fd09971ef391d76e04842b88aa (patch) | |
tree | d4a2b56b0874e6d190e2be1d9114cf580d1ae41c | |
parent | a3975d6effe09127a5cb5007895a4bb506020ace (diff) | |
download | org.eclipse.papyrus-c022e227d510d7fd09971ef391d76e04842b88aa.tar.gz org.eclipse.papyrus-c022e227d510d7fd09971ef391d76e04842b88aa.tar.xz org.eclipse.papyrus-c022e227d510d7fd09971ef391d76e04842b88aa.zip |
Bug 526191 - [Sequence Diagram] Element on lifeline must follow the move
up of another below it.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=526191
Change-Id: I324c328520c8eac8fc7dc85dc705c6b48ed67811
Signed-off-by: Mickael ADAM <mickael.adam@all4tec.net>
8 files changed, 117 insertions, 43 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceReferenceEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceReferenceEditPolicy.java index f589cb21e8d..fdda0b20c6e 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceReferenceEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/SequenceReferenceEditPolicy.java @@ -8,7 +8,7 @@ *
* Contributors:
* Patrick Tessier (CEA LIST) - Initial API and implementation
- * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 521312, 526079
+ * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 521312, 526079, 526191
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
@@ -277,9 +277,9 @@ public class SequenceReferenceEditPolicy extends GraphicalEditPolicy implements if (messageEnd.getMessage() != null) {
IGraphicalEditPart resultedEditPart = getEditPartFromSemantic(messageEnd.getMessage());
if (resultedEditPart != null) {
- if (referenceList.equals(strongReferences)) {
+ if (referenceList == strongReferences) {
referenceList.put(resultedEditPart, role);
- } else if (referenceList.equals(weakReferences) && !(strongReferences.containsKey(resultedEditPart))) {
+ } else if (referenceList == weakReferences && !(strongReferences.containsKey(resultedEditPart))) {
referenceList.put(resultedEditPart, role);
}
}
@@ -322,7 +322,7 @@ public class SequenceReferenceEditPolicy extends GraphicalEditPolicy implements ExecutionSpecification executionSpec = getExecutionSpecificationAssociatedToEvent(sourceEvent);
if (executionSpec != null) {
IGraphicalEditPart resultedEditPart = getEditPartFromSemantic(executionSpec);
- if (referenceList.equals(strongReferences)) {
+ if (referenceList == strongReferences) {
if (resultedEditPart != null) {
if (executionSpec.getStart().equals(sourceEvent)) {
referenceList.put(resultedEditPart, ROLE_START);
@@ -330,7 +330,7 @@ public class SequenceReferenceEditPolicy extends GraphicalEditPolicy implements referenceList.put(resultedEditPart, ROLE_FINISH);
}
}
- } else if (referenceList.equals(weakReferences) && !(strongReferences.containsKey(resultedEditPart))) {
+ } else if (referenceList == weakReferences && !(strongReferences.containsKey(resultedEditPart))) {
if (resultedEditPart != null) {
if (executionSpec.getStart().equals(sourceEvent)) {
referenceList.put(resultedEditPart, ROLE_START);
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceEditPolicy.java index d2dd5ad901e..905b346bb54 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceEditPolicy.java @@ -8,7 +8,7 @@ *
* Contributors:
* CEA LIST - Initial API and implementation
- *
+ * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 526191
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
@@ -25,12 +25,14 @@ import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.commands.UnexecutableCommand;
import org.eclipse.gef.editpolicies.GraphicalEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.ReconnectRequest;
import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.CLifeLineEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.keyboardlistener.IKeyPressState;
import org.eclipse.papyrus.uml.diagram.sequence.keyboardlistener.KeyboardListener;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
@@ -57,9 +59,13 @@ public abstract class UpdateWeakReferenceEditPolicy extends GraphicalEditPolicy private final MoveMessagePropertyChangeListener moveMessageListener = new MoveMessagePropertyChangeListener();
/**
- * The must move preference boolean. Set to true if messages above the current message must move down at the same time.
+ * The must move preference boolean. Set to true if messages below the current message must move up at the same time.
*/
- private boolean mustMovePreference;
+ protected boolean mustMoveBelowAtMovingUp;
+ /**
+ * The must move preference boolean. Set to true if messages below the current message must move down at the same time.
+ */
+ protected boolean mustMoveBelowAtMovingDown;
/**
* Constructor.
@@ -75,7 +81,8 @@ public abstract class UpdateWeakReferenceEditPolicy extends GraphicalEditPolicy // activate listeners
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.KeyDown, SHIFTDown);
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.KeyUp, SHIFTUp);
- mustMove = mustMovePreference = UMLDiagramEditorPlugin.getInstance().getPreferenceStore().getBoolean(CustomDiagramGeneralPreferencePage.PREF_MOVE_ABOVE_MESSAGE);
+ mustMoveBelowAtMovingUp = UMLDiagramEditorPlugin.getInstance().getPreferenceStore().getBoolean(CustomDiagramGeneralPreferencePage.PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP);
+ mustMoveBelowAtMovingDown = UMLDiagramEditorPlugin.getInstance().getPreferenceStore().getBoolean(CustomDiagramGeneralPreferencePage.PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN);
UMLDiagramEditorPlugin.getInstance().getPreferenceStore().addPropertyChangeListener(moveMessageListener);
}
@@ -125,7 +132,7 @@ public abstract class UpdateWeakReferenceEditPolicy extends GraphicalEditPolicy */
@Override
public void setKeyPressState(Boolean isPressed) {
- mustMove = mustMovePreference && !isPressed;
+ mustMove = !isPressed;
}
/**
@@ -143,11 +150,21 @@ public abstract class UpdateWeakReferenceEditPolicy extends GraphicalEditPolicy SenderRequestUtils.addRequestSenders(changeBoundsRequest, senderList);
SenderRequestUtils.addRequestSender(changeBoundsRequest, hostEditPart);
GraphicalEditPart gEditPart = (GraphicalEditPart) editPartToMove;
- changeBoundsRequest.setLocation(new Point(gEditPart.getFigure().getBounds().getTopLeft().x, gEditPart.getFigure().getBounds().getTopLeft().x + moveDelta.y()));
- changeBoundsRequest.setEditParts(editPartToMove);
- changeBoundsRequest.setMoveDelta(moveDelta);
- changeBoundsRequest.setSizeDelta(new Dimension(0, 0));
- compoundCommand.add(editPartToMove.getCommand(changeBoundsRequest));
+ Point newLocation = new Point(gEditPart.getFigure().getBounds().getTopLeft().x, gEditPart.getFigure().getBounds().getTopLeft().y + moveDelta.y());
+
+ if (editPartToMove.getParent() instanceof CLifeLineEditPart) {
+ // Translate to relative
+ int stickerHeight = ((CLifeLineEditPart) editPartToMove.getParent()).getStickerHeight();
+ if (newLocation.y >= stickerHeight) {
+ changeBoundsRequest.setLocation(newLocation);
+ changeBoundsRequest.setEditParts(editPartToMove);
+ changeBoundsRequest.setMoveDelta(moveDelta);
+ changeBoundsRequest.setSizeDelta(new Dimension(0, 0));
+ compoundCommand.add(editPartToMove.getCommand(changeBoundsRequest));
+ } else {
+ compoundCommand.add(UnexecutableCommand.INSTANCE);
+ }
+ }
}
/**
@@ -194,10 +211,18 @@ public abstract class UpdateWeakReferenceEditPolicy extends GraphicalEditPolicy */
@Override
public void propertyChange(PropertyChangeEvent event) {
- if (CustomDiagramGeneralPreferencePage.PREF_MOVE_ABOVE_MESSAGE.equals(event.getProperty())) {
- if (mustMovePreference != (boolean) event.getNewValue()) {
- mustMove = mustMovePreference = (boolean) event.getNewValue();
+ String property = event.getProperty();
+ switch (property) {
+ case CustomDiagramGeneralPreferencePage.PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP:
+ if (mustMoveBelowAtMovingUp != (boolean) event.getNewValue()) {
+ mustMoveBelowAtMovingUp = (boolean) event.getNewValue();
+ }
+ break;
+ case CustomDiagramGeneralPreferencePage.PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN:
+ if (mustMoveBelowAtMovingDown != (boolean) event.getNewValue()) {
+ mustMoveBelowAtMovingDown = (boolean) event.getNewValue();
}
+ break;
}
}
}
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForExecSpecEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForExecSpecEditPolicy.java index 54a2dc94906..1244dee65bc 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForExecSpecEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForExecSpecEditPolicy.java @@ -8,12 +8,13 @@ *
* Contributors:
* CEA LIST - Initial API and implementation
- *
+ * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 526191
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.draw2d.geometry.Point;
@@ -68,7 +69,7 @@ public class UpdateWeakReferenceForExecSpecEditPolicy extends UpdateWeakReferenc } else if (RequestConstants.REQ_RESIZE.equals(request.getType())) {
moveDelta = new Point(0, ((ChangeBoundsRequest) request).getSizeDelta().height + ((ChangeBoundsRequest) request).getMoveDelta().y);
}
- if (moveDelta.y > 0 && mustMove) {
+ if (moveDelta.y != 0 && mustMove) {
if (getHost() instanceof AbstractExecutionSpecificationEditPart) {
getHostFigure().translateToAbsolute(locationAndSize);
locationAndSize = ((ChangeBoundsRequest) request).getTransformedRectangle(locationAndSize);
@@ -77,10 +78,17 @@ public class UpdateWeakReferenceForExecSpecEditPolicy extends UpdateWeakReferenc SequenceReferenceEditPolicy references = (SequenceReferenceEditPolicy) getHost().getEditPolicy(SequenceReferenceEditPolicy.SEQUENCE_REFERENCE);
if (!SenderRequestUtils.isASender(request, getHost())) {
CompoundCommand compoundCommand = new CompoundCommand();
- for (Iterator<EditPart> iterator = references.getWeakReferences().keySet().iterator(); iterator.hasNext();) {
+
+ // Gets weak references
+ HashMap<EditPart, String> weakReferences = new HashMap<EditPart, String>();
+ if ((moveDelta.y > 0 && mustMoveBelowAtMovingDown) || (moveDelta.y < 0 && mustMoveBelowAtMovingUp)) {
+ weakReferences.putAll(references.getWeakReferences());
+ }
+
+ for (Iterator<EditPart> iterator = weakReferences.keySet().iterator(); iterator.hasNext();) {
EditPart editPart = (EditPart) iterator.next();
if (!SenderRequestUtils.isASender(request, editPart)) {
- UMLDiagramEditorPlugin.log.trace(LogOptions.SEQUENCE_DEBUG, "+--> try to Move " + editPart);//$NON-NLS-1$
+ UMLDiagramEditorPlugin.log.trace(LogOptions.SEQUENCE_DEBUG, "+--> try to Move of " + moveDelta.y + " " + editPart);//$NON-NLS-1$
ArrayList<EditPart> senderList = SenderRequestUtils.getSenders(request);
if (editPart instanceof ConnectionEditPart) {
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForMessageSpecEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForMessageSpecEditPolicy.java index ac8d0995059..1243a3d2526 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForMessageSpecEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/edit/policies/UpdateWeakReferenceForMessageSpecEditPolicy.java @@ -8,12 +8,13 @@ *
* Contributors:
* CEA LIST - Initial API and implementation
- *
+ * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 526191
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.edit.policies;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.draw2d.geometry.Point;
@@ -76,12 +77,19 @@ public class UpdateWeakReferenceForMessageSpecEditPolicy extends UpdateWeakRefer Point anchorPositionOnScreen = polyline.getSourceAnchor().getReferencePoint();
moveDelta.y = reconnectRequest.getLocation().y - anchorPositionOnScreen.y;
}
- if (moveDelta.y > 0 && mustMove) {
+ if (moveDelta.y != 0 && mustMove) {
if (hostConnectionEditPart.getEditPolicy(SequenceReferenceEditPolicy.SEQUENCE_REFERENCE) != null) {
SequenceReferenceEditPolicy references = (SequenceReferenceEditPolicy) hostConnectionEditPart.getEditPolicy(SequenceReferenceEditPolicy.SEQUENCE_REFERENCE);
if (!SenderRequestUtils.isASender(request, getHost())) {
CompoundCommand compoundCommand = new CompoundCommand();
- for (Iterator<EditPart> iterator = references.getWeakReferences().keySet().iterator(); iterator.hasNext();) {
+
+ // Gets weak references
+ HashMap<EditPart, String> weakReferences = new HashMap<EditPart, String>();
+ if ((moveDelta.y > 0 && mustMoveBelowAtMovingDown) || (moveDelta.y < 0 && mustMoveBelowAtMovingUp)) {
+ weakReferences.putAll(references.getWeakReferences());
+ }
+
+ for (Iterator<EditPart> iterator = weakReferences.keySet().iterator(); iterator.hasNext();) {
EditPart editPart = (EditPart) iterator.next();
if (!SenderRequestUtils.isASender(request, editPart)) {
UMLDiagramEditorPlugin.log.trace(LogOptions.SEQUENCE_DEBUG, "+--> try to Move " + editPart);//$NON-NLS-1$
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/Messages.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/Messages.java index 7d926fbbb17..3971198bf01 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/Messages.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/Messages.java @@ -82,7 +82,12 @@ public class Messages extends NLS { /** * @since 5.0 */ - public static String CustomDiagramGeneralPreferencePage_MoveMessageAboveDescription; + public static String CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageUpDescription; + + /** + * @since 5.0 + */ + public static String CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageDownDescription; /** * @since 5.0 diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/messages.properties b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/messages.properties index ea44a6758f1..655cf501e4d 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/messages.properties +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/messages/messages.properties @@ -10,5 +10,6 @@ Commands_DropDestructionOccurenceSpecification_Label=Drop Destruction Occurrence Commands_CreateExecutionSpecification_Label=Execution Specification Automatic Creation with Message Commands_DropDestructionOccurenceSpecification_Label=Drop Destruction Occurrence Specification Commands_CreateExecutionSpecification_Label=Execution Specification Automatic Creation with Message -CustomDiagramGeneralPreferencePage_MoveMessageAboveDescription=When moving down a message, everything after that message is also moved down +CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageUpDescription=When moving up a message, everything after that message is also moved up +CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageDownDescription=When moving down a message, everything after that message is also moved down CustomDiagramGeneralPreferencePage_othersGroupLabel=others diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomDiagramGeneralPreferencePage.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomDiagramGeneralPreferencePage.java index 1e4e86b115c..cc81808cfef 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomDiagramGeneralPreferencePage.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/preferences/CustomDiagramGeneralPreferencePage.java @@ -8,7 +8,7 @@ * * Contributors: * CEA LIST - Initial API and implementation - * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 521829 + * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 521829, 526191 */ package org.eclipse.papyrus.uml.diagram.sequence.preferences; @@ -49,11 +49,18 @@ public class CustomDiagramGeneralPreferencePage extends DiagramPreferencePage { public static String PREF_EXECUTION_SPECIFICATION_SYNC_MSG = "PREF_EXECUTION_SPECIFICATION_SYNC_MSG"; //$NON-NLS-1$ /** - * preference key to move messages in the same time. + * preference key to move up messages in the same time that message up. * * @since 5.0 */ - public static final String PREF_MOVE_ABOVE_MESSAGE = "PREF_MOVE_ABOVE_MESSAGE"; //$NON-NLS-1$ + public static final String PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP = "PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP"; //$NON-NLS-1$ + + /** + * preference key to move down messages in the same time that message down. + * + * @since 5.0 + */ + public static final String PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN = "PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN"; //$NON-NLS-1$ /** * possible preference values @@ -98,10 +105,8 @@ public class CustomDiagramGeneralPreferencePage extends DiagramPreferencePage { otherGroupGridData.horizontalSpan = 2; otherGroup.setLayoutData(otherGroupGridData); otherGroup.setText(Messages.CustomDiagramGeneralPreferencePage_othersGroupLabel); - - BooleanFieldEditor booleanFieldEditor = new BooleanFieldEditor(PREF_MOVE_ABOVE_MESSAGE, Messages.CustomDiagramGeneralPreferencePage_MoveMessageAboveDescription, otherGroup); - addField(booleanFieldEditor); - + addField(new BooleanFieldEditor(PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN, Messages.CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageDownDescription, otherGroup)); + addField(new BooleanFieldEditor(PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP, Messages.CustomDiagramGeneralPreferencePage_MoveBelowElementsAtMessageUpDescription, otherGroup)); } /** @@ -139,12 +144,11 @@ public class CustomDiagramGeneralPreferencePage extends DiagramPreferencePage { * preferenceStore */ public static void initSpecificDefaults(IPreferenceStore preferenceStore) { - preferenceStore.setDefault(PREF_EXECUTION_SPECIFICATION_SYNC_MSG, - CHOICE_BEHAVIOR_AND_REPLY); - preferenceStore.setDefault(PREF_EXECUTION_SPECIFICATION_ASYNC_MSG, - CHOICE_NONE); - preferenceStore.setDefault(PREF_MOVE_ABOVE_MESSAGE, - true); + preferenceStore.setDefault(PREF_EXECUTION_SPECIFICATION_SYNC_MSG, CHOICE_BEHAVIOR_AND_REPLY); + preferenceStore.setDefault(PREF_EXECUTION_SPECIFICATION_ASYNC_MSG, CHOICE_NONE); + + preferenceStore.setDefault(PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_DOWN, true); + preferenceStore.setDefault(PREF_MOVE_BELOW_ELEMENTS_AT_MESSAGE_UP, false); } } diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/referencialgrilling/LifeLineGraphicalNodeEditPolicy.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/referencialgrilling/LifeLineGraphicalNodeEditPolicy.java index 864b8672944..ccb68568385 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/referencialgrilling/LifeLineGraphicalNodeEditPolicy.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/referencialgrilling/LifeLineGraphicalNodeEditPolicy.java @@ -8,7 +8,7 @@ * * Contributors: * CEA LIST - Initial API and implementation - * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 519621, 519756 + * Mickaël ADAM (ALL4TEC) mickael.adam@all4tec.net - Bug 519621, 519756, 526191 *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.sequence.referencialgrilling; @@ -39,7 +39,6 @@ import org.eclipse.gef.requests.ReconnectRequest; import org.eclipse.gmf.runtime.common.core.command.ICommand; import org.eclipse.gmf.runtime.diagram.ui.commands.SetBoundsCommand; import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart; -import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.GraphicalNodeEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewAndElementRequest; @@ -651,6 +650,19 @@ public class LifeLineGraphicalNodeEditPolicy extends DefaultGraphicalNodeEditPol return UnexecutableCommand.INSTANCE; } } + + // check that the location is not at the header + NodeEditPart nodeEP = (NodeEditPart) request.getTarget(); + if (nodeEP instanceof CLifeLineEditPart) { + Point location = request.getLocation().getCopy(); + // Translate to relative + getHostFigure().getParent().translateToRelative(location); + int stickerHeight = ((CLifeLineEditPart) nodeEP).getStickerHeight(); + if (location.y <= stickerHeight) { + return UnexecutableCommand.INSTANCE; + } + } + return getBasicGraphicalNodeEditPolicy().getCommand(request); } @@ -673,9 +685,20 @@ public class LifeLineGraphicalNodeEditPolicy extends DefaultGraphicalNodeEditPol return UnexecutableCommand.INSTANCE; } } + NodeEditPart nodeEP = (NodeEditPart) request.getTarget(); + + // check that the location is not at the header + if (nodeEP instanceof CLifeLineEditPart) { + Point location = request.getLocation().getCopy(); + // Translate to relative + getHostFigure().getParent().translateToRelative(location); + int stickerHeight = ((CLifeLineEditPart) nodeEP).getStickerHeight(); + if (location.y <= stickerHeight) { + return UnexecutableCommand.INSTANCE; + } + } Command reconnectTargetCommand = getBasicGraphicalNodeEditPolicy().getCommand(request); - NodeEditPart nodeEP = (NodeEditPart) request.getTarget(); // in case of reconnect target for message create it is need to move up the old target and move down the new target if (nodeEP instanceof CLifeLineEditPart) { |