Browse Source

copy finished, save fixed, copy predicting while selecting multiple objects

Teh-Hai Julian Zheng 8 years ago
parent
commit
95e9667948

+ 66 - 49
src/ui/controller/ClipboardController.java

@@ -46,16 +46,14 @@ public class ClipboardController {
 
 	public void copy(CpsUpperNode upperNode) {
 
-		ArrayList<AbstractCpsObject> foundObj = (upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes());
-		ArrayList<CpsEdge> foundedge = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges());
-
 		JsonObject file = new JsonObject();
 		ArrayDeque<AbstractCpsObject> queue = new ArrayDeque<>();
-		HashMap<Integer, Integer> idMap = new HashMap<>();
 		AbstractCpsObject u = null;
 
 		store.initNumeration();
 
+		file.add("SAV", new JsonPrimitive((upperNode == null ? "CVS" : "" + upperNode.getID())));
+
 		for (AbstractCpsObject abs : model.getSelectedCpsObjects()) {
 			queue.add(abs);
 		}
@@ -65,8 +63,9 @@ public class ClipboardController {
 			u = queue.pop();
 
 			String key = "CVSOBJECT" + store.getNumerator(NUMTYPE.OBJECT);
-			idMapping(u, idMap);
 			file.add(key, gson.toJsonTree(u, AbstractCpsObject.class));
+			edgeToJson(EDGETYPE.CONNECTION, file, u.getID(), u.getConnections());
+
 			if (u instanceof HolonObject)
 				store.elementsToJson(TYPE.CANVAS, file, u);
 
@@ -78,13 +77,14 @@ public class ClipboardController {
 				for (AbstractCpsObject adjacent : ((CpsUpperNode) u).getNodes()) {
 					queue.add(adjacent);
 				}
+				edgeToJson(EDGETYPE.NODE, file, u.getID(), ((CpsUpperNode) u).getNodeEdges());
+				edgeToJson(EDGETYPE.OLD, file, u.getID(), ((CpsUpperNode) u).getOldEdges());
 			}
 		}
-
-		for (CpsEdge edge : foundedge) {
-			if(model.getSelectedCpsObjects().contains(edge.getA()) && model.getSelectedCpsObjects().contains(edge.getB()))
-				return;
-		}
+		if (upperNode == null)
+			edgeToJson(EDGETYPE.CANVAS, file, 0, model.getEdgesOnCanvas());
+		else
+			edgeToJson(EDGETYPE.NODE, file, upperNode.getID(), model.getEdgesOnCanvas());
 
 		StringSelection selection = new StringSelection(gson.toJson(file));
 		Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
@@ -92,56 +92,73 @@ public class ClipboardController {
 
 	}
 
-	private void idMapping(AbstractCpsObject u, HashMap<Integer, Integer> idMap) {
-		// TODO Auto-generated method stub
-		int id = u.getID();
-		u.setID(IdCounter.nextId());
-		idMap.put(id, u.getID());
-	}
-
 	public void paste() {
 
 	}
 
-	private void edgeToJson(EDGETYPE type, JsonObject file, int id, CpsEdge edge) {
+	public void edgeToJson(EDGETYPE type, JsonObject file, int id, ArrayList<CpsEdge> arr) {
 		// TODO Auto-generated method stub
 		String k = null;
 		boolean b = false;
 		JsonObject temp = new JsonObject();
 
+		for (CpsEdge edge : arr) {
+			if (model.getClipboradObjects().contains(edge.getA())
+					&& model.getClipboradObjects().contains(edge.getB())) {
+				// add properties and only the ids from a and b
+				temp.add("properties", gson.toJsonTree(edge));
+				temp.add("A", new JsonPrimitive(edge.getA().getID()));
+				temp.add("B", new JsonPrimitive(edge.getB().getID()));
+
+				// Key and occasionally the id of Uppernode
+				switch (type) {
+				case CANVAS:
+					k = "CVSEDGE" + store.getNumerator(NUMTYPE.EDGE);
+					break;
+				case CONNECTION:
+					k = "CONNEDGE" + store.getNumerator(NUMTYPE.CONNECTION);
+					break;
+				case NODE:
+					temp.add("ID", new JsonPrimitive(id));
+					k = "NODEEDGE" + store.getNumerator(NUMTYPE.NODEEDGE);
+					break;
+				case OLD:
+					temp.add("ID", new JsonPrimitive(id));
+					k = "OLDEDGE" + store.getNumerator(NUMTYPE.OLDEDGE);
+					break;
+				default:
+					break;
+				}
+				// lookup if the CVS, NODE or OLDEDGE are also connections
+				if (edge.getA().getConnections().contains(edge) && edge.getA().getConnections().contains(edge)
+						&& !type.equals(EDGETYPE.CONNECTION))
+					b = true;
+				temp.add("connection", new JsonPrimitive(b));
+				file.add(k, gson.toJsonTree(temp));
+				temp = new JsonObject();
+			}
+		}
+	}
+
+	public void getObjectsInDepth() {
+		model.setClipboradObjects(new ArrayList<>());
+		for (AbstractCpsObject obj : model.getSelectedCpsObjects()) {
+			clipboadDepth(obj);
+		}
+	}
 
-			// add properties and only the ids from a and b
-			temp.add("properties", gson.toJsonTree(edge));
-			temp.add("A", new JsonPrimitive(edge.getA().getID()));
-			temp.add("B", new JsonPrimitive(edge.getB().getID()));
-
-			// Key and occasionally the id of Uppernode
-			switch (type) {
-			case CANVAS:
-				k = "CVSEDGE" + store.getNumerator(NUMTYPE.EDGE);
-				break;
-			case CONNECTION:
-				k = "CONNEDGE" + store.getNumerator(NUMTYPE.CONNECTION);
-				break;
-			case NODE:
-				temp.add("ID", new JsonPrimitive(id));
-				k = "NODEEDGE" + store.getNumerator(NUMTYPE.NODEEDGE);
-				break;
-			case OLD:
-				temp.add("ID", new JsonPrimitive(id));
-				k = "OLDEDGE" + store.getNumerator(NUMTYPE.OLDEDGE);
-				break;
-			default:
-				break;
+	public void clipboadDepth(AbstractCpsObject obj) {
+		if (!(obj instanceof CpsUpperNode)) {
+			model.getClipboradObjects().add(obj);
+			return;
+		} else {
+			model.getClipboradObjects().add(obj);
+			for (AbstractCpsObject abs : ((CpsUpperNode) obj).getNodes()) {
+				clipboadDepth(abs);
 			}
-			// lookup if the CVS, NODE or OLDEDGE are also connections
-			if (edge.getA().getConnections().contains(edge) && edge.getA().getConnections().contains(edge)
-					&& !type.equals(EDGETYPE.CANVAS))
-				b = true;
-			temp.add("connection", new JsonPrimitive(b));
-			file.add(k, gson.toJsonTree(temp));
-			temp = new JsonObject();
-		
+			return;
+		}
+
 	}
 
 	private void initGson() {

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

@@ -568,14 +568,6 @@ public class Control {
 		return autoPath + (autoSaveController.getAutoSaveNr());
 	}
 
-	/**
-	 * Copy all Selected Objects.
-	 */
-	public void copyObjects() {
-//		canvasController.copyObjects();
-		clipboardController.copy(null);
-	}
-
 	/**
 	 * Paste all Selected Objects.
 	 * 
@@ -878,5 +870,16 @@ public class Control {
 	public void addSelectedHolonBody(int i) {
 		objectController.addSelectedHolonBody(i);
 	}
+	
+	/**
+	 * Copy all Selected Objects.
+	 */
+	public void copy(CpsUpperNode upperNode) {
+		clipboardController.copy(upperNode);
+	}
+	
+	public void getObjectsInDepth() {
+		clipboardController.getObjectsInDepth();
+	}
 
 }

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

@@ -124,6 +124,13 @@ public class NodeController {
 			if (edge.getB().equals(node))
 				edge.getA().getConnections().remove(edge);
 		}
+		
+		for (AbstractCpsObject obj : node.getNodes()) {
+			if(upperNode == null)
+				obj.setSav("CVS");
+			else
+				obj.setSav(""+upperNode.getID());
+		}
 
 		(upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes()).addAll(node.getNodes());
 		// change the indices accordingly the higher layer
@@ -500,6 +507,7 @@ public class NodeController {
 			}
 			upperNode.getNodeEdges().remove(e);
 		}
+		
 		mpC.decIdx(object.getID(), upperNode.getNodesIdx());
 		upperNode.getNodesIdx().remove(object.getID());
 		upperNode.getNodes().remove(object);

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

@@ -315,7 +315,7 @@ public class StoreController {
 			}
 			// lookup if the CVS, NODE or OLDEDGE are also connections
 			if (edge.getA().getConnections().contains(edge) && edge.getA().getConnections().contains(edge)
-					&& !type.equals(EDGETYPE.CANVAS))
+					&& !type.equals(EDGETYPE.CONNECTION))
 				b = true;
 			temp.add("connection", new JsonPrimitive(b));
 			file.add(k, gson.toJsonTree(temp));

+ 9 - 4
src/ui/view/GUI.java

@@ -457,9 +457,9 @@ public class GUI<E> implements CategoryListener {
 				} else if (((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
 						.getComponent(0) instanceof MyCanvas) {
 					boolean save = false;
-					for (int j = 0; j < model.getSelectedCpsObjects().size();j++) {
+					for (int j = 0; j < model.getSelectedCpsObjects().size(); j++) {
 						AbstractCpsObject cps = model.getSelectedCpsObjects().get(j);
-						if(j<model.getSelectedCpsObjects().size()-1)
+						if (j < model.getSelectedCpsObjects().size() - 1)
 							save = true;
 						controller.delCanvasObject(cps, save);
 						// Remove UpperNodeTab if UpperNode deleted
@@ -503,7 +503,12 @@ public class GUI<E> implements CategoryListener {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				if (!model.getSelectedCpsObjects().isEmpty()) {
-					controller.copyObjects();
+					if (((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
+							.getComponent(0) instanceof UpperNodeCanvas)
+						controller.copy(((UpperNodeCanvas)((JScrollPane) tabbedPane.getSelectedComponent()).getViewport()
+								.getComponent(0)).upperNode);
+					else
+						controller.copy(null);
 					if (!model.getClipboradObjects().isEmpty()) {
 						canvas.itemPaste.setEnabled(true);
 					}
@@ -1724,7 +1729,7 @@ public class GUI<E> implements CategoryListener {
 			public void componentResized(ComponentEvent e) {
 				controller.setCanvasX(Math.max(model.getCanvasX(), canvasSP.getViewport().getWidth()));
 				controller.setCanvasY(Math.max(model.getCanvasY(), canvasSP.getViewport().getHeight()));
-				controller.addTextToConsole(model.getCanvasY()+", "+model.getCanvasY());
+				controller.addTextToConsole(model.getCanvasY() + ", " + model.getCanvasY());
 				canvas.repaint();
 			}
 		});

+ 5 - 1
src/ui/view/MyCanvas.java

@@ -375,7 +375,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		itemCopy.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				controller.copyObjects();
+				controller.copy(null);
 				itemPaste.setEnabled(true);
 				repaint();
 			}
@@ -704,7 +704,9 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 					} else {
 						controller.addSelectedObject(tempCps);
 					}
+					
 				}
+
 				// If drawing an Edge (CTRL down)
 				if (tempCps.getClass() == HolonObject.class) {
 					HolonObject tempObj = ((HolonObject) tempCps);
@@ -759,6 +761,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			controller.addSelectedObject(tempCps);
 		}
 
+
 		dragged = false;
 
 		// Rightclick List
@@ -806,6 +809,7 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 					controller.addSelectedObject(cps);
 				}
 			}
+			controller.getObjectsInDepth();
 			tempSelected.clear();
 		}
 

+ 21 - 10
src/ui/view/UpperNodeCanvas.java

@@ -387,7 +387,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		itemCopy.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				controller.copyObjects();
+				controller.copy(upperNode);
 				itemPaste.setEnabled(true);
 				repaint();
 			}
@@ -750,9 +750,17 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		if (toolTip) {
 			g2.setColor(new Color(255, 225, 150));
 			g2.setStroke(new BasicStroke(1));
-			int textWidth = g.getFontMetrics().stringWidth(toolTipText) + 2; // Text width
-			int fixXPos = toolTipPos.x - (textWidth >> 1) + model.getScaleDiv2(); // Position fixed x Position to the screen
-			int fixYPos = toolTipPos.y; //// Position fixed y Position to the screen
+			int textWidth = g.getFontMetrics().stringWidth(toolTipText) + 2; // Text
+																				// width
+			int fixXPos = toolTipPos.x - (textWidth >> 1) + model.getScaleDiv2(); // Position
+																					// fixed
+																					// x
+																					// Position
+																					// to
+																					// the
+																					// screen
+			int fixYPos = toolTipPos.y; //// Position fixed y Position to the
+										//// screen
 			if (fixXPos < 0) {
 				fixXPos = 0;
 			} else if (fixXPos + textWidth + 1 > this.getWidth()) {
@@ -813,12 +821,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 						} else {
 							controller.addSelectedObject(tempCps);
 						}
-					} /*
-						 * else if (e.getButton() != MouseEvent.BUTTON3) {
-						 * controller.setSelectedObjectID(tempCps.getID());
-						 * model.getSelectedCpsObjects().clear();
-						 * controller.addSelectedObject(tempCps); }
-						 */
+					}
+
+					/*
+					 * else if (e.getButton() != MouseEvent.BUTTON3) {
+					 * controller.setSelectedObjectID(tempCps.getID());
+					 * model.getSelectedCpsObjects().clear();
+					 * controller.addSelectedObject(tempCps); }
+					 */
 					// If drawing an Edge (CTRL down)
 					if (tempCps.getClass() == HolonObject.class) {
 						HolonObject tempObj = ((HolonObject) tempCps);
@@ -968,6 +978,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					controller.addSelectedObject(cps);
 				}
 			}
+			controller.getObjectsInDepth();
 			tempSelected.clear();
 		}