Browse Source

UNDO REDO Uppercanvas

Teh-Hai Julian Zheng 7 years ago
parent
commit
3e59e13b3d

+ 4 - 0
src/TypeAdapter/AbstractCpsObjectAdapter.java

@@ -12,6 +12,8 @@ import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
 
 import classes.AbstractCpsObject;
+import classes.CpsUpperNode;
+import ui.view.UpperNodeCanvas;
 
 public class AbstractCpsObjectAdapter
 		implements JsonSerializer<AbstractCpsObject>, JsonDeserializer<AbstractCpsObject> {
@@ -22,6 +24,8 @@ public class AbstractCpsObjectAdapter
 		JsonObject object = new JsonObject();
 		object.add("type", new JsonPrimitive(arg0.getClass().getSimpleName()));
 		object.add("properties", arg2.serialize(arg0, arg0.getClass()));
+		if (arg0 instanceof CpsUpperNode)
+			object.add("hash", new JsonPrimitive(arg0.hashCode()));
 		return object;
 	}
 

+ 1 - 2
src/classes/CpsUpperNode.java

@@ -13,8 +13,7 @@ public class CpsUpperNode extends AbstractCpsObject {
 	private HashMap<Integer, Integer> nodesIdx;
 	
 	@Expose
-	private int leftBorder = 0;
-	// Background Image
+	private int leftBorder;
 	@Expose
 	private String imgPath = "";
 	@Expose

+ 11 - 5
src/ui/controller/LoadController.java

@@ -137,7 +137,8 @@ public class LoadController {
 	private void forwardFiles(File folder, String trim) throws IOException {
 		// TODO Auto-generated method stub
 		for (File file : folder.listFiles()) {
-			File dst = new File(System.getProperty("user.home") + "/.config/HolonGUI/" + file.getPath().replace(trim, ""));
+			File dst = new File(
+					System.getProperty("user.home") + "/.config/HolonGUI/" + file.getPath().replace(trim, ""));
 
 			if (file.getName().contains(".json"))
 				readJson(file.getPath());
@@ -208,7 +209,7 @@ public class LoadController {
 				loadUnitGraph(GRAPHTYPE.ELEMENT, json.get(key), null, eleDispatch);
 			if (key.contains("TRACKED"))
 				loadTracked(json.get(key), objDispatch);
-			if(key.contains("STATSGRAPH"))
+			if (key.contains("STATSGRAPH"))
 				loadStatisticGraph(json.get(key), objDispatch);
 		}
 
@@ -229,6 +230,7 @@ public class LoadController {
 			model.setEdgesOnCanvas(new ArrayList<CpsEdge>());
 			model.setTrackingObj(new ArrayList<>());
 			model.setStatisticData(new ArrayList<>());
+			model.setHashcodeMap(new HashMap<>());
 			model.setCanvasX(json.get("CANVAS_SIZE_X").getAsInt());
 			model.setCanvasX(json.get("CANVAS_SIZE_Y").getAsInt());
 			IdCounter.setCounter(json.get("IDCOUNTER").getAsInt());
@@ -238,6 +240,7 @@ public class LoadController {
 			model.setCvsObjIdx(new HashMap<Integer, Integer>());
 			model.setObjectsOnCanvas(new ArrayList<AbstractCpsObject>());
 			model.setEdgesOnCanvas(new ArrayList<CpsEdge>());
+			model.setHashcodeMap(new HashMap<>());
 			model.setCanvasX(json.get("CANVAS_SIZE_X").getAsInt());
 			model.setCanvasX(json.get("CANVAS_SIZE_Y").getAsInt());
 			IdCounter.setCounter(json.get("IDCOUNTER").getAsInt());
@@ -305,6 +308,10 @@ public class LoadController {
 		AbstractCpsObject temp = model.getGson().fromJson(jsonElement.getAsJsonObject(), AbstractCpsObject.class);
 		initObjects(temp);
 		temp.setImage(checkOS(temp.getImage()));
+		if (temp instanceof CpsUpperNode) {
+			model.getHashcodeMap().put(jsonElement.getAsJsonObject().get("hash").getAsInt(), (CpsUpperNode) temp);
+			((CpsUpperNode) temp).setLeftBorder(jsonElement.getAsJsonObject().get("properties").getAsJsonObject().get("leftBorder").getAsInt());
+		}
 		// if its stored before on the canvas just put it there
 		if (temp.getSav().equals("CVS")) {
 			cvsC.addObject(temp);
@@ -465,8 +472,6 @@ public class LoadController {
 
 	}
 
-
-
 	private File readArchive(String path, File src) throws IOException, ArchiveException {
 		File tmp = Files.createTempDirectory("tmpHolon").toFile();
 		tmp.deleteOnExit();
@@ -503,7 +508,8 @@ public class LoadController {
 
 		if (os.contains("windows")) {
 			ret = ret.replace("/", "\\");
-			ret = System.getProperty("user.home") + "\\.config" + ret.substring(ret.indexOf("\\HolonGUI\\"), ret.length());
+			ret = System.getProperty("user.home") + "\\.config"
+					+ ret.substring(ret.indexOf("\\HolonGUI\\"), ret.length());
 
 		}
 		if (os.contains("mac")) {

+ 15 - 0
src/ui/model/Model.java

@@ -131,6 +131,7 @@ public class Model {
 
 	// Statistic Graph Data
 	private Hashtable<String, StatisticGraphPanel> statisticGraphTable = new Hashtable<String, StatisticGraphPanel>();
+	private HashMap<Integer, CpsUpperNode> hashcodeMap = new HashMap<>();
 	private ArrayList<JsonObject> statisticData = new ArrayList<>();
 
 	private Gson gson;
@@ -997,4 +998,18 @@ public class Model {
 	public StatisticPanel getStatPanel() {
 		return statPanel;
 	}
+
+	/**
+	 * @return the hashcodeMap
+	 */
+	public HashMap<Integer, CpsUpperNode> getHashcodeMap() {
+		return hashcodeMap;
+	}
+
+	/**
+	 * @param hashcodeMap the hashcodeMap to set
+	 */
+	public void setHashcodeMap(HashMap<Integer, CpsUpperNode> hashcodeMap) {
+		this.hashcodeMap = hashcodeMap;
+	}
 }

+ 23 - 0
src/ui/view/GUI.java

@@ -23,6 +23,7 @@ import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -359,6 +360,7 @@ public class GUI<E> implements CategoryListener {
 					controller.loadAutoSave(controller.getUndoSave());
 					canvas.repaint();
 					unitGraph.update(model.getObjectsOnCanvas());
+					updateUpperNodes();
 				} catch (IOException eex) {
 					// TODO Auto-generated catch block
 					eex.printStackTrace();
@@ -378,6 +380,7 @@ public class GUI<E> implements CategoryListener {
 					controller.loadAutoSave(controller.getRedoSave());
 					canvas.repaint();
 					unitGraph.update(model.getObjectsOnCanvas());
+					updateUpperNodes();
 				} catch (IOException ex) {
 					// TODO Auto-generated catch block
 					ex.printStackTrace();
@@ -1638,6 +1641,12 @@ public class GUI<E> implements CategoryListener {
 				// New Tab with NodeOfNode
 				if (doubleClick() && MouseEvent.BUTTON3 != e.getButton() && temp instanceof CpsUpperNode) {
 					openNewUpperNodeTab();
+					try {
+						controller.autoSave();
+					} catch (IOException e1) {
+						// TODO Auto-generated catch block
+						e1.printStackTrace();
+					}
 				}
 				if (model.getSelectedCpsObjects().size() > 1) {
 					model.getTableHolonElement().setModel(model.getMultiTable());
@@ -2316,6 +2325,7 @@ public class GUI<E> implements CategoryListener {
 						unitGraph.fillArrayofBooleans();
 					}
 				}
+				
 			});
 
 			JScrollPane sp = new JScrollPane(unc);
@@ -2377,4 +2387,17 @@ public class GUI<E> implements CategoryListener {
 			model.getStatPanel().getGraphPanel().add(stat);
 		}
 	}
+
+	private void updateUpperNodes() {
+		for (Component comp : tabbedPane.getComponents()) {
+			if (!(comp instanceof JScrollPane))
+				continue;
+			Component pane = ((JScrollPane) comp).getViewport().getComponent(0);
+			if (pane instanceof UpperNodeCanvas) {
+				temp = model.getHashcodeMap().get(((UpperNodeCanvas) pane).code);
+				((UpperNodeCanvas)pane).upperNode = (CpsUpperNode) temp;
+			}
+		}
+
+	}
 }

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

@@ -73,6 +73,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 
 	// The UpperNode
 	public CpsUpperNode upperNode;
+	public int code;
 
 	private boolean[] showedInformation = new boolean[5];
 	private boolean dragging = false; // for dragging
@@ -133,6 +134,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		this.controller = control;
 		this.model = mod;
 		this.upperNode = UpperNode;
+		this.code = UpperNode.hashCode();
 		this.path = parentPath + upperNode.getName();
 		this.breadCrumb = new JLabel(path);
 		// this.add(breadCrumb);