Browse Source

If a region is added to a state via drag and drop the state delegates the request to it's RegionFigureCompartment now. Additionally the drop position of the region is recognized now so the region will be inserted in the expected position.

markus.muehlbrandt@itemis.de 14 years ago
parent
commit
f08e39d9cf

+ 21 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/StateEditPart.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.ui.editor.editparts;
 
+import java.util.List;
+
 import org.eclipse.draw2d.GridData;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.StackLayout;
@@ -25,6 +27,7 @@ import org.eclipse.gef.GraphicalEditPart;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gef.requests.GroupRequest;
 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.CreationEditPolicy;
@@ -32,6 +35,7 @@ import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableEditPolicyEx;
 import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableEditPolicyEx;
 import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
 import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
 import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
 import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
@@ -50,6 +54,7 @@ import org.yakindu.sct.ui.editor.preferences.StatechartColorConstants;
  * 
  * @author andreas muelder
  * @author alexander nyssen
+ * @author markus muehlbrandt
  * 
  */
 public class StateEditPart extends ShapeNodeEditPart implements
@@ -70,8 +75,24 @@ public class StateEditPart extends ShapeNodeEditPart implements
 		if (request instanceof CreateViewAndElementRequest) {
 			return figureCompartmentEditPart;
 		}
+		if (request instanceof GroupRequest && request.getType() == RequestConstants.REQ_DROP) {
+			GroupRequest req = (GroupRequest) request;
+			if (areInsertableChildren(req.getEditParts())) {
+				return figureCompartmentEditPart;
+			}
+		}
+		
 		return super.getTargetEditPart(request);
 	}
+	
+	private boolean areInsertableChildren(List<?> editParts) {
+		for (Object object : editParts) {
+			if (!(object instanceof RegionEditPart)) {
+				return false;
+			}
+		}
+		return true;
+	}
 
 	@Override
 	protected NodeFigure createNodeFigure() {