瀏覽代碼

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 年之前
父節點
當前提交
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() {