Browse Source

Implements drag&drop replacements on UpperNodeCanvas

Andreas T. Meyer-Berg 6 năm trước cách đây
mục cha
commit
1c4b244e15

+ 11 - 2
src/ui/controller/Control.java

@@ -815,6 +815,17 @@ public class Control {
 
     }
 
+    /**
+     * Replaces {@code toBePlaced} by {@code by} in {@code upperNode}
+     * @param toBeReplaced
+     * @param by
+     * @param upperNode
+     */
+	public void replaceObjUpperNode(AbstractCpsObject toBeReplaced,
+			AbstractCpsObject by, CpsUpperNode upperNode) {
+		nodeController.replaceObjectInUpperNode(toBeReplaced, by, upperNode);
+	}
+
     public void addEdgeUpperNode(CpsEdge edge, CpsUpperNode upperNode) {
         nodeController.addEdge(edge, upperNode);
         try {
@@ -1012,6 +1023,4 @@ public class Control {
 	public void setFairnessModel(short fairnessModel) {
 		globalController.setFairnessModel(fairnessModel);
 	}
-
-
 }

+ 27 - 1
src/ui/controller/NodeController.java

@@ -468,6 +468,33 @@ class NodeController {
 		upperNode.getNodes().remove(object);
 	}
 
+    /**
+     * Replaces {@code toBePlaced} by {@code by} in {@code upperNode}
+     * @param toBeReplaced
+     * @param by
+     * @param upperNode
+     */
+	public void replaceObjectInUpperNode(AbstractCpsObject toBeReplaced,
+			AbstractCpsObject by, CpsUpperNode upperNode) {
+		/** let all edges of 'toBeReplaced' connect to 'by' */
+		for(CpsEdge e: toBeReplaced.getConnections()){
+			if(e.getA() == toBeReplaced){
+				e.setA(by);
+			}else if(e.getB() == toBeReplaced){
+				e.setB(by);
+			}
+			
+			/** if edge from an object to itself -> remove it */
+			if(e.getA() == e.getB())
+				deleteEdge(e, upperNode);
+			else/** else add edge to 'by' */
+				by.addConnection(e);
+		}
+		/** delete 'toBeReplaced' new empty connections, to prevent Nullpointer*/
+		toBeReplaced.setConnections(new ArrayList<CpsEdge>(1));
+		deleteObjectInUpperNode(toBeReplaced, upperNode);
+	}
+
 	/**
 	 * Add Edge in UpperNode
 	 */
@@ -527,5 +554,4 @@ class NodeController {
 		temp.setPosition(new Position(x, y));
 
 	}
-
 }

+ 1 - 3
src/ui/view/UpperNodeCanvas.java

@@ -729,8 +729,6 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 				/** distance treshold for replacement */
 				int treshhold = controller.getScale()/4;
 				
-				//System.out.println("Dragged "+tempCps.toString()+" to x: "+tempCps.getPosition().x+" y: "+tempCps.getPosition().y);
-				
 				/** number of Objects that might be replaced (should be 1) */
 				int replaceCounter = 0;
 				
@@ -757,7 +755,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
 				}
 				/** if replacement of exactly one object possible */
 				if(replaceCounter == 1 && toBeReplaced != null){
-					controller.replaceCanvasObject(toBeReplaced, tempCps);
+					controller.replaceObjUpperNode(toBeReplaced, tempCps, upperNode);
 				}
                 controller.autoSave();
             } catch (IOException ex) {