Ver código fonte

new calculation for position when ungrouping

Teh-Hai Julian Zheng 7 anos atrás
pai
commit
116666d9b0

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

@@ -50,7 +50,6 @@ public class ClipboardController {
 	private CanvasController cvsC;
 	private ObjectController objC;
 	private NodeController uppC;
-	private MultiPurposeController mpC;
 	private Gson gson;
 	private JsonParser parser;
 	private Clipboard clipboard;
@@ -58,8 +57,8 @@ public class ClipboardController {
 	private HashMap<Integer, Integer> eleIDMap;
 	private String sav;
 	private Point point;
-	private Point pp;
-
+	
+	
 	public ClipboardController(Model model, SaveController store, LoadController load, CanvasController cvs,
 			ObjectController obj, NodeController uppC, MultiPurposeController mp) {
 		this.model = model;
@@ -68,7 +67,6 @@ public class ClipboardController {
 		this.cvsC = cvs;
 		this.objC = obj;
 		this.uppC = uppC;
-		this.mpC = mp;
 		this.clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
 		initGson();
 

+ 26 - 8
src/ui/controller/NodeController.java

@@ -1,5 +1,6 @@
 package ui.controller;
 
+import java.awt.Point;
 import java.util.ArrayList;
 import java.util.Iterator;
 
@@ -14,6 +15,7 @@ public class NodeController {
 	private Model model;
 	private CanvasController cvs;
 	private MultiPurposeController mpC;
+	private Point point;
 
 	public NodeController(Model model, CanvasController cvs, MultiPurposeController mpC) {
 		// TODO Auto-generated constructor stub
@@ -49,6 +51,11 @@ public class NodeController {
 	 * @param upperNode
 	 */
 	public void undoUpperNode(CpsUpperNode node, CpsUpperNode upperNode) {
+
+		Position old = calculatePos(node.getNodes());
+		Position p = node.getPosition();
+		point = new Point(old.x - p.x, old.y - p.y);
+
 		restoreOldEdges(node, upperNode);
 		unmakeNodesOfNodes(node, upperNode);
 		unmakeAdjacent(node, upperNode);
@@ -122,12 +129,13 @@ public class NodeController {
 			if (edge.getB().equals(node))
 				edge.getA().getConnections().remove(edge);
 		}
-		
+
 		for (AbstractCpsObject obj : node.getNodes()) {
-			if(upperNode == null)
+			updatePosition(obj);
+			if (upperNode == null)
 				obj.setSav("CVS");
 			else
-				obj.setSav(""+upperNode.getId());
+				obj.setSav("" + upperNode.getId());
 		}
 
 		(upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes()).addAll(node.getNodes());
@@ -505,7 +513,7 @@ public class NodeController {
 			}
 			upperNode.getNodeEdges().remove(e);
 		}
-		
+
 		mpC.decIdx(object.getId(), upperNode.getNodesIdx());
 		upperNode.getNodesIdx().remove(object.getId());
 		upperNode.getNodes().remove(object);
@@ -554,11 +562,21 @@ public class NodeController {
 			upperNode.getOldEdges().remove(edge);
 	}
 
-	private void refreshSave(ArrayList<AbstractCpsObject> list, CpsUpperNode upperNode) {
+	private void updatePosition(AbstractCpsObject temp) {
+		// TODO Auto-generated method stub
+		int x = temp.getPosition().x - point.x;
+		int y = temp.getPosition().y - point.y;
+		if (x > model.getCanvasX())
+			x = model.getCanvasX();
+		if (y > model.getCanvasX())
+			y = model.getCanvasY();
+		if (y < 0)
+			y = 0;
+		if (x < 0)
+			x = 0;
+
+		temp.setPosition(new Position(x, y));
 
-		for (AbstractCpsObject abs : list) {
-			abs.setSav("" + upperNode.getId());
-		}
 	}
 
 }