فهرست منبع

Fixes grouping of HolonObjects which would replace each other

Disables replacements of objects by the clipboard saved objects.
Andreas T. Meyer-Berg 6 سال پیش
والد
کامیت
a0ff9b946f

+ 2 - 2
src/ui/controller/ClipboardController.java

@@ -206,13 +206,13 @@ public class ClipboardController {
             if (upperNode == null)
                 cvsC.addObject(temp);
             else
-                uppC.addObjectInUpperNode(temp, upperNode);
+                uppC.addObjectInUpperNode(temp, upperNode, false);
             // mark the Pasted Objects
             model.getSelectedCpsObjects().add(temp);
         } else {
             // else look up the table and put it into the right Uppernode
             CpsUpperNode temp2 = (CpsUpperNode) objDispatch.get(objIDMap.get(Integer.parseInt(temp.getSav())));
-            uppC.addObjectInUpperNode(temp, temp2);
+            uppC.addObjectInUpperNode(temp, temp2, false);
         }
 
         objDispatch.put(temp.getId(), temp);

+ 1 - 1
src/ui/controller/Control.java

@@ -806,7 +806,7 @@ public class Control {
     }
 
     public void addObjUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {
-        nodeController.addObjectInUpperNode(object, upperNode);
+        nodeController.addObjectInUpperNode(object, upperNode, true);
         try {
             autoSave();
         } catch (IOException e) {

+ 1 - 1
src/ui/controller/LoadController.java

@@ -273,7 +273,7 @@ public class LoadController {
         } else {
             // else look up the table and put it into the right Uppernode
             CpsUpperNode temp2 = (CpsUpperNode) objDispatch.get(Integer.parseInt(temp.getSav()));
-            uppC.addObjectInUpperNode(temp, temp2);
+            uppC.addObjectInUpperNode(temp, temp2, false);
         }
 
         objDispatch.put(temp.getId(), temp);

+ 40 - 35
src/ui/controller/NodeController.java

@@ -37,7 +37,7 @@ class NodeController {
 		if (upperNode == null)
 			cvs.addNewObject(node);
 		else
-			addObjectInUpperNode(node, upperNode);
+			addObjectInUpperNode(node, upperNode, false);
 
 	}
 
@@ -70,7 +70,7 @@ class NodeController {
 		// Put all selected Nodes into the Upper Node
         for (AbstractCpsObject obj : toGroup) {
             // füge Neue Objecte in Neuen Node hinzu
-			addObjectInUpperNode(obj, node);
+			addObjectInUpperNode(obj, node, false);
 		}
 
 		// Füge die Edges die Alle Objekte vorher verbunden hat in neuen Node
@@ -437,10 +437,14 @@ class NodeController {
 		}
 	}
 
+
 	/**
-	 * Add a Object into a CpsUpperNode
+	 * Adds object to the upperNode, might replace objects if replace==true
+	 * @param object
+	 * @param upperNode
+	 * @param replace
 	 */
-    void addObjectInUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {
+    void addObjectInUpperNode(AbstractCpsObject object, CpsUpperNode upperNode, boolean replace) {
         object.setSav("" + upperNode.getId());
 		upperNode.getNodesIdx().put(object.getId(), upperNode.getNodes().size());
 		upperNode.getNodes().add(object);
@@ -448,43 +452,44 @@ class NodeController {
 		/**
 		 * check if we should drag & drop replace
 		 */
+		if(replace){
+			/** x of the dragged Object */
+			int x = object.getPosition().x;
 		
-		/** x of the dragged Object */
-		int x = object.getPosition().x;
-		
-		/** y of the dragged Object */
-		int y = object.getPosition().y;
-		
-		/** distance threshold for replacement */
-		int treshhold = model.getScale()/2;
-		
-		/** number of Objects that might be replaced (should be 1) */
-		int replaceCounter = 0;
+			/** y of the dragged Object */
+			int y = object.getPosition().y;
+			
+			/** distance threshold for replacement */
+			int treshhold = model.getScale()/2;
 		
-		/** last object that could be replaced */
-		AbstractCpsObject toBeReplaced = null;
+			/** number of Objects that might be replaced (should be 1) */
+			int replaceCounter = 0;
 		
-		/** for each cps on Canvas */
-		for (AbstractCpsObject cps : upperNode.getNodes()){
+			/** last object that could be replaced */
+			AbstractCpsObject toBeReplaced = null;
 			
-			/** same object -> ignore */
-			if(cps == object)continue;
+			/** for each cps on Canvas */
+			for (AbstractCpsObject cps : upperNode.getNodes()){
+				
+				/** 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;
+				/** 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){
+				replaceObjectInUpperNode(toBeReplaced, object, upperNode);
 			}
-		}
-		/** if replacement of exactly one object possible */
-		if(replaceCounter == 1 && toBeReplaced != null){
-			replaceObjectInUpperNode(toBeReplaced, object, upperNode);
 		}
 	}