diff options
Diffstat (limited to 'plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java')
-rw-r--r-- | plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java index b76858aad8f..780a84c2404 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.sequence/custom-src/org/eclipse/papyrus/uml/diagram/sequence/locator/CenterLocator.java @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2010 CEA + * Copyright (c) 2010, 2018 CEA, Christian W. Damus, and others * * * All rights reserved. This program and the accompanying materials @@ -11,6 +11,7 @@ * * Contributors: * Atos Origin - Initial API and implementation + * Christian W. Damus - bug 536486 * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.sequence.locator; @@ -18,6 +19,7 @@ package org.eclipse.papyrus.uml.diagram.sequence.locator; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gmf.runtime.diagram.ui.figures.BorderedNodeFigure; import org.eclipse.gmf.runtime.diagram.ui.internal.figures.BorderItemContainerFigure; import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure; import org.eclipse.papyrus.uml.diagram.common.locator.AdvancedBorderItemLocator; @@ -64,6 +66,10 @@ public class CenterLocator extends AdvancedBorderItemLocator { BorderItemContainerFigure borderItemContainerFigure = getBorderItemContainerFigure(); if (borderItemContainerFigure != null) { for (Object child : borderItemContainerFigure.getChildren()) { + if (child instanceof BorderedNodeFigure) { + // Unwrap it (the destruction occurrence, itself, can have border items) + child = ((BorderedNodeFigure) child).getMainFigure(); + } if (child instanceof DefaultSizeNodeFigure) { for (Object figure : ((DefaultSizeNodeFigure) child).getChildren()) { if (figure instanceof DestructionEventFigure) { @@ -106,7 +112,8 @@ public class CenterLocator extends AdvancedBorderItemLocator { public Rectangle getValidLocation(Rectangle proposedLocation, IFigure borderItem) { // The valid position for destruction event is always the bottom if (getDestructionEventFigure() != null) { - if (borderItem.equals(getDestructionEventFigure().getParent())) { + // The destruction event supports border items, itself, so there are two levels of parent + if (borderItem.equals(getDestructionEventFigure().getParent().getParent())) { Rectangle realLocation = new Rectangle(proposedLocation); Point point = new Point(getParentBorder().getCenter().x - realLocation.getSize().width / 2, getParentBorder().y + getParentBorder().height - realLocation.height / 2); realLocation.setLocation(point); |