Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java11
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);

Back to the top