瀏覽代碼

Fixes creation of Nodes on existing HolonObjects

It was possible to create nodes by releasing shift, while drawing a line
and releasing mouse on an HolonObject/Cable under HolonObject.
Andreas T. Meyer-Berg 7 年之前
父節點
當前提交
a8e72b6559

+ 33 - 32
src/ui/controller/CanvasController.java

@@ -49,43 +49,44 @@ public class CanvasController {
 		/**
 		 * check if we should drag & drop replace
 		 */
-		
-		/** x of the dragged Object */
-		int x = object.getPosition().x;
-		
-		/** y of the dragged Object */
-		int y = object.getPosition().y;
-		
-		/** distance treshold for replacement */
-		int treshhold = model.getScale()/2;
-		
-		/** number of Objects that might be replaced (should be 1) */
-		int replaceCounter = 0;
-		
-		/** last object that could be replaced */
-		AbstractCpsObject toBeReplaced = null;
-		
-		/** for each cps on Canvas */
-		for (AbstractCpsObject cps : model.getObjectsOnCanvas()){
+		if(!(object instanceof CpsNode)){
+			/** x of the dragged Object */
+			int x = object.getPosition().x;
+			
+			/** y of the dragged Object */
+			int y = object.getPosition().y;
 			
-			/** same object -> ignore */
-			if(cps == object)continue;
+			/** distance treshold for replacement */
+			int treshhold = model.getScale()/2;
 			
-			/** x of object that might get replaced */
-			int c_x = cps.getPosition().x;
+			/** number of Objects that might be replaced (should be 1) */
+			int replaceCounter = 0;
 			
-			/** y of object that might get replaced */
-			int c_y = cps.getPosition().y;
+			/** last object that could be replaced */
+			AbstractCpsObject toBeReplaced = null;
 			
-			/** if near enough */
-			if(Math.abs(x-c_x)<treshhold && Math.abs(y-c_y)<treshhold){
-				replaceCounter++;
-				toBeReplaced = cps;
+			/** for each cps on Canvas */
+			for (AbstractCpsObject cps : model.getObjectsOnCanvas()){
+				
+				/** same object -> ignore */
+				if(cps == object)continue;
+				
+				/** x of object that might get replaced */
+				int c_x = cps.getPosition().x;
+				
+				/** y of object that might get replaced */
+				int c_y = cps.getPosition().y;
+				
+				/** if near enough */
+				if(Math.abs(x-c_x)<treshhold && Math.abs(y-c_y)<treshhold){
+					replaceCounter++;
+					toBeReplaced = cps;
+				}	
+			}
+			/** if replacement of exactly one object possible */
+			if(replaceCounter == 1 && toBeReplaced != null){
+				replaceObjectOnCanvas(toBeReplaced, object);
 			}
-		}
-		/** if replacement of exactly one object possible */
-		if(replaceCounter == 1 && toBeReplaced != null){
-			replaceObjectOnCanvas(toBeReplaced, object);
 		}
 		
 		

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

@@ -2,6 +2,7 @@ package ui.controller;
 
 import classes.AbstractCpsObject;
 import classes.CpsEdge;
+import classes.CpsNode;
 import classes.CpsUpperNode;
 import classes.Position;
 import ui.model.Model;
@@ -452,7 +453,7 @@ class NodeController {
 		/**
 		 * check if we should drag & drop replace
 		 */
-		if(replace){
+		if(replace && !(object instanceof CpsNode) ){
 			/** x of the dragged Object */
 			int x = object.getPosition().x;
 		

+ 8 - 3
src/ui/view/MyCanvas.java

@@ -814,7 +814,7 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 				}
 			}
 			// Edge auf eine Edge gezogen?
-			if (onEdge) {
+			if (onEdge && !checkForReplacement(x, y)) {
 				CpsEdge p = mousePositionOnEdge(x, y);
 				if (p != null) {
 					CpsEdge e1;
@@ -842,18 +842,23 @@ public class MyCanvas extends AbstractCanvas implements MouseListener,
 					controller.addEdgeOnCanvas(e1);
 					controller.addEdgeOnCanvas(e2);
 				}
+			}else{
+				mayBeReplaced = null;
 			}
 
 			// ins leere Gedragged
-			if (node) {
+			if (node && !checkForReplacement(x, y)) {
 				CpsNode n = new CpsNode("Node");
 
 				n.setPosition(x, y);
-				controller.addObjectCanvas(n);
+				
+					controller.addObjectCanvas(n);
 
 				e = new CpsEdge(n, tempCps, model.getMaxCapacity());
 
 				controller.addEdgeOnCanvas(e);
+			}else{
+				mayBeReplaced = null;
 			}
 
 			// Wenn ein Node ohne Connections da ist

+ 6 - 2
src/ui/view/UpperNodeCanvas.java

@@ -1040,7 +1040,7 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
         }
 
         // Edge auf eine Edge gezogen?
-        if (onEdge) {
+        if (onEdge && !checkForReplacement(x, y)) {
             CpsEdge p = mousePositionOnEdge(x, y);
             if (p != null) {
                 CpsEdge e1;
@@ -1073,10 +1073,12 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
                 controller.addEdgeUpperNode(e1, upperNode);
                 controller.addEdgeUpperNode(e2, upperNode);
             }
+        }else{
+        	mayBeReplaced = null;
         }
 
         // ins leere Gedragged
-        if (node && x > upperNode.getLeftBorder()) {
+        if (node && x > upperNode.getLeftBorder() && !checkForReplacement(x, y)) {
             CpsNode n = new CpsNode("Node");
 
             n.setPosition(x, y);
@@ -1089,6 +1091,8 @@ public class UpperNodeCanvas extends AbstractCanvas implements MouseListener, Mo
             } else {
                 controller.addEdgeUpperNode(e, upperNode);
             }
+        }else{
+        	mayBeReplaced = null;
         }
 
         // Wenn ein Node ohne Connections da ist