Forráskód Böngészése

Reenabled overlapping of Regions.

markus.muehlbrandt@itemis.de 13 éve
szülő
commit
a6a40a2219

+ 30 - 3
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/RegionEditPart.java

@@ -10,13 +10,18 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
+import java.util.List;
+
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.StackLayout;
 import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
 import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
@@ -39,7 +44,6 @@ public class RegionEditPart extends ShapeNodeEditPart {
 		super(view);
 	}
 
-	
 	@Override
 	protected NodeFigure createNodeFigure() {
 		final NodeFigure figure = new NodeFigure();
@@ -48,14 +52,37 @@ public class RegionEditPart extends ShapeNodeEditPart {
 		figure.add(new RegionFigure(getMapMode()));
 		return figure;
 	}
-	
 
 	@Override
 	protected void createDefaultEditPolicies() {
 		super.createDefaultEditPolicies();
 		removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
 		installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
-				new NoOverlapResizableEditPolicy());
+				new NoOverlapResizableEditPolicy() {
+					
+			@SuppressWarnings("unchecked")
+					protected boolean isRequestValid(ChangeBoundsRequest request) {
+						// Overlapping of nodes is not allowed
+						final IGraphicalEditPart parent = (IGraphicalEditPart) getHost()
+								.getParent();
+						final Rectangle newBounds = request
+								.getTransformedRectangle(getHostFigure()
+										.getBounds());
+						final List<IGraphicalEditPart> children = parent
+								.getChildren();
+						for (final IGraphicalEditPart child : children) {
+							if (!(child instanceof RegionEditPart)) {
+								if (child != getHost()
+										&& child.getFigure().getBounds()
+												.intersects(newBounds)) {
+									return false;
+								}
+							}
+						}
+						return true;
+					}
+			
+				});
 	}
 
 	@Override

+ 32 - 3
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StatechartTextEditPart.java

@@ -10,12 +10,17 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
+import java.util.List;
+
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.StackLayout;
 import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.gef.editpolicies.RootComponentEditPolicy;
+import org.eclipse.gef.requests.ChangeBoundsRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
@@ -37,13 +42,13 @@ public class StatechartTextEditPart extends ShapeNodeEditPart implements
 	public StatechartTextEditPart(View view) {
 		super(view);
 	}
-	
+
 	@Override
 	protected NodeFigure createNodeFigure() {
 		final NodeFigure figure = new NodeFigure();
 		figure.setLayoutManager(new StackLayout());
 		figure.add(new StatechartTextFigure(getMapMode()));
-		figure.setMinimumSize(new Dimension(0,0));
+		figure.setMinimumSize(new Dimension(0, 0));
 		return figure;
 	}
 
@@ -66,7 +71,31 @@ public class StatechartTextEditPart extends ShapeNodeEditPart implements
 		installEditPolicy(EditPolicy.COMPONENT_ROLE,
 				new RootComponentEditPolicy());
 		removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
-		installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new NoOverlapResizableEditPolicy());
+		installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
+				new NoOverlapResizableEditPolicy() {
+
+					@SuppressWarnings("unchecked")
+					@Override
+					protected boolean isRequestValid(ChangeBoundsRequest request) {
+						// Overlapping of nodes is not allowed
+						final IGraphicalEditPart parent = (IGraphicalEditPart) getHost()
+								.getParent();
+						final Rectangle newBounds = request
+								.getTransformedRectangle(getHostFigure()
+										.getBounds());
+						final List<IGraphicalEditPart> children = parent
+								.getChildren();
+						for (final IGraphicalEditPart child : children) {
+							if (child != getHost()
+									&& child.getFigure().getBounds()
+											.intersects(newBounds)) {
+								return false;
+							}
+						}
+						return true;
+					}
+
+				});
 	}
 
 	@Override

+ 3 - 22
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/policies/NoOverlapResizableEditPolicy.java

@@ -10,15 +10,13 @@
  */
 package org.yakindu.sct.ui.editor.policies;
 
-import java.util.List;
-
+import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.commands.UnexecutableCommand;
 import org.eclipse.gef.requests.ChangeBoundsRequest;
-import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy;
 
 /**
@@ -28,7 +26,7 @@ import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy;
  * @author m.muehlbrandt
  * 
  */
-public class NoOverlapResizableEditPolicy extends ResizableShapeEditPolicy {
+public abstract class NoOverlapResizableEditPolicy extends ResizableShapeEditPolicy {
 
 	@Override
 	protected Command getMoveCommand(ChangeBoundsRequest request) {
@@ -50,24 +48,7 @@ public class NoOverlapResizableEditPolicy extends ResizableShapeEditPolicy {
 		return super.getResizeCommand(request);
 	}
 
-	@SuppressWarnings("unchecked")
-	protected boolean isRequestValid(ChangeBoundsRequest request) {
-		// Overlapping of nodes is not allowed
-		final IGraphicalEditPart parent = (IGraphicalEditPart) getHost()
-				.getParent();
-		final Rectangle newBounds = request
-				.getTransformedRectangle(getHostFigure().getBounds());
-		final List<IGraphicalEditPart> children = parent.getChildren();
-		for (final IGraphicalEditPart child : children) {
-			if (child == getHost()) {
-				continue;
-			}
-			if (child.getFigure().getBounds().intersects(newBounds)) {
-				return false;
-			}
-		}
-		return true;
-	}
+	protected abstract boolean isRequestValid(ChangeBoundsRequest request);
 
 	/**
 	 * Do not allow resizing smaller than the MinimumSize of the {@link Figure}.