Browse Source

Collapse -> Group, Ungroup. Ungroup finished implemented

Teh-Hai Julian Zheng 8 years ago
parent
commit
fe58fc0aab

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

@@ -733,7 +733,11 @@ public class Control {
 	 */
 
 	public void addUpperNode(String nodeName, CpsUpperNode upperNode) {
-		nodeController.addNode(nodeName, upperNode);
+		nodeController.doUpperNode(nodeName, upperNode);
+	}
+	
+	public void delUpperNode(CpsUpperNode node, CpsUpperNode upperNode) {
+		nodeController.undoUpperNode(node, upperNode);
 	}
 	
 	public void addObjUpperNode(AbstractCpsObject object, CpsUpperNode upperNode) {

+ 50 - 14
src/ui/controller/NodeController.java

@@ -29,16 +29,32 @@ public class NodeController {
 	 * 
 	 * @param nodeName
 	 */
-	public void addNode(String nodeName, CpsUpperNode upperNode) {
+	public void doUpperNode(String nodeName, CpsUpperNode upperNode) {
+
 		CpsUpperNode node = new CpsUpperNode(nodeName);
 		node.setPosition(calculatePos());
-		connectAdjacent(node, upperNode);
+		makeAdjacent(node, upperNode);
 		makeNodeOfNodes(node, upperNode);
 		if (upperNode == null)
 			cvs.addNewObject(node);
 		else
 			addObjectInUpperNode(node, upperNode);
+		
+	}
 
+	/**
+	 * Delete a CpsUpperNode from the Canvas
+	 * 
+	 * @param node
+	 */
+	public void undoUpperNode(CpsUpperNode node, CpsUpperNode upperNode) {
+
+		unmakeNodesOfNodes(node, upperNode);
+		unmakeAdjacent(node, upperNode);
+		if (upperNode == null)
+			cvs.deleteObjectOnCanvas(node);
+		else
+			deleteObjectInUpperNode(node, upperNode);
 	}
 
 	/**
@@ -53,15 +69,6 @@ public class NodeController {
 		upperNode.getNodes().add(object);
 	}
 
-	/**
-	 * Delete a CpsUpperNode from the Canvas
-	 * 
-	 * @param node
-	 */
-	public void deleteNode(CpsUpperNode node) {
-
-	}
-
 	/**
 	 * Delete a AbstactCpsObject from CPSUpperNode
 	 * 
@@ -125,6 +132,9 @@ public class NodeController {
 
 			// füge Neue Objecte in Neuen Node hinzu
 			AbstractCpsObject obj = it.next();
+			// POSITION MUSS NEU GEMACHT WERDEN FÜR OBJECTS IN NODE OF NODE
+			// obj.setPosition((obj.getPosition().x + node.getPosition().x) / 2,
+			// (obj.getPosition().y + node.getPosition().y) / 2);
 			addObjectInUpperNode(obj, node);
 		}
 
@@ -133,6 +143,8 @@ public class NodeController {
 				.iterator(); it.hasNext();) {
 
 			CpsEdge edge = it.next();
+
+			// kopiere edge in UpperNode
 			if (nodes.contains(edge.getA()) && nodes.contains(edge.getB())) {
 				addEdgeInUpperNode(edge, node);
 			}
@@ -152,7 +164,7 @@ public class NodeController {
 	 * 
 	 * @return
 	 */
-	private void connectAdjacent(CpsUpperNode node, CpsUpperNode upperNode) {
+	private void makeAdjacent(CpsUpperNode node, CpsUpperNode upperNode) {
 
 		ArrayList<AbstractCpsObject> adj = new ArrayList<>();
 		ArrayList<Float> maxCapacity = new ArrayList<>();
@@ -161,7 +173,8 @@ public class NodeController {
 		ArrayList<CpsEdge> toDelete = new ArrayList<>();
 
 		// für alle Edges auf dem Canvas
-		for (Iterator<CpsEdge> it = model.getEdgesOnCanvas().iterator(); it.hasNext();) {
+		for (Iterator<CpsEdge> it = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges())
+				.iterator(); it.hasNext();) {
 
 			CpsEdge edge = it.next();
 
@@ -198,7 +211,7 @@ public class NodeController {
 			}
 		}
 
-		model.getEdgesOnCanvas().removeAll(toDelete);
+		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).removeAll(toDelete);
 
 		// für alle objekte in adjazenzliste mach
 		for (AbstractCpsObject cps : adj) {
@@ -213,6 +226,29 @@ public class NodeController {
 		}
 	}
 
+	private void unmakeNodesOfNodes(CpsUpperNode node, CpsUpperNode upperNode) {
+		// TODO Auto-generated method stub
+		(upperNode == null ? model.getObjectsOnCanvas() : upperNode.getNodes()).addAll(node.getNodes());
+		(upperNode == null ? model.getCvsObjIdx() : upperNode.getNodesIdx()).putAll(node.getNodesIdx());
+		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).addAll(node.getNodeEdges());
+	}
+
+	private void unmakeAdjacent(CpsUpperNode node, CpsUpperNode upperNode) {
+		// TODO Auto-generated method stub
+		ArrayList<CpsEdge> toDelete = new ArrayList<>();
+
+		for (Iterator<CpsEdge> it = (upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges())
+				.iterator(); it.hasNext();) {
+
+			CpsEdge edge = it.next();
+			if (edge.getA().equals(node) || edge.getB().equals(node))
+				toDelete.add(edge);
+
+		}
+		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).removeAll(toDelete);
+		(upperNode == null ? model.getEdgesOnCanvas() : upperNode.getNodeEdges()).addAll(node.getOldEdges());
+	}
+
 	/**
 	 * Calculate new Position of the Upper Node
 	 * 

+ 24 - 6
src/ui/view/MyCanvas.java

@@ -73,7 +73,8 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 	private JMenuItem itemCut = new JMenuItem("Cut");
 	private JMenuItem itemCopy = new JMenuItem("Copy");
 	public JMenuItem itemPaste = new JMenuItem("Paste");
-	public JMenuItem itemCollapse = new JMenuItem("Colapse Nodes");
+	public JMenuItem itemGroup = new JMenuItem("Group");
+	public JMenuItem itemUngroup = new JMenuItem("Ungroup");
 	public JMenuItem itemTrack = new JMenuItem("Track");
 	public JMenuItem itemUntrack = new JMenuItem("Untrack");
 	private JToolTip objectTT = new JToolTip();
@@ -108,7 +109,8 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		popmenu.add(itemPaste);
 		popmenu.add(itemDelete);
 		popmenu.addSeparator();
-		popmenu.add(itemCollapse);
+		popmenu.add(itemGroup);
+		popmenu.add(itemUngroup);
 		popmenu.add(itemTrack);
 		popmenu.add(itemUntrack);
 
@@ -116,11 +118,12 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 		itemCut.setEnabled(false);
 		itemCopy.setEnabled(false);
 		itemPaste.setEnabled(false);
-		itemCollapse.setEnabled(false);
+		itemGroup.setEnabled(false);
+		itemUngroup.setEnabled(false);
 		itemTrack.setEnabled(false);
 		itemUntrack.setEnabled(false);
 
-		itemCollapse.addActionListener(new ActionListener() {
+		itemGroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				controller.addUpperNode("NodeOfNode", null);
@@ -128,6 +131,14 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 			}
 		});
 
+		itemUngroup.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				controller.delUpperNode((CpsUpperNode) tempCps, null);
+				repaint();
+			}
+		});
+
 		itemTrack.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -517,7 +528,13 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				itemDelete.setEnabled(true);
 				itemCut.setEnabled(true);
 				itemCopy.setEnabled(true);
-				itemCollapse.setEnabled(true);
+				if (tempCps != null)
+					itemGroup.setEnabled(true);
+				if (tempCps instanceof CpsUpperNode)
+					itemUngroup.setEnabled(true);
+				else
+					itemUngroup.setEnabled(false);
+
 				if (!(tempCps instanceof HolonSwitch)) {
 					itemTrack.setEnabled(true);
 					itemUntrack.setEnabled(true);
@@ -532,7 +549,8 @@ public class MyCanvas extends JPanel implements MouseListener, MouseMotionListen
 				itemCut.setEnabled(false);
 				itemCopy.setEnabled(false);
 				itemDelete.setEnabled(false);
-				itemCollapse.setEnabled(false);
+				itemGroup.setEnabled(false);
+				itemUngroup.setEnabled(false);
 				itemTrack.setEnabled(false);
 				itemUntrack.setEnabled(false);
 			}

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

@@ -82,7 +82,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	private JMenuItem itemCut = new JMenuItem("Cut");
 	private JMenuItem itemCopy = new JMenuItem("Copy");
 	public JMenuItem itemPaste = new JMenuItem("Paste");
-	public JMenuItem itemCollapse = new JMenuItem("Colapse Nodes");
+	public JMenuItem itemGroup = new JMenuItem("Group");
+	public JMenuItem itemUngroup = new JMenuItem("Ungroup");
 	public JMenuItem itemTrack = new JMenuItem("Track");
 	public JMenuItem itemUntrack = new JMenuItem("Untrack");
 	private JToolTip objectTT = new JToolTip();
@@ -121,7 +122,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		popmenu.add(itemPaste);
 		popmenu.add(itemDelete);
 		popmenu.addSeparator();
-		popmenu.add(itemCollapse);
+		popmenu.add(itemGroup);
+		popmenu.add(itemUngroup);
 		popmenu.add(itemTrack);
 		popmenu.add(itemUntrack);
 
@@ -129,17 +131,26 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		itemCut.setEnabled(false);
 		itemCopy.setEnabled(false);
 		itemPaste.setEnabled(false);
-		itemCollapse.setEnabled(false);
+		itemGroup.setEnabled(false);
+		itemUngroup.setEnabled(false);
 		itemTrack.setEnabled(false);
 		itemUntrack.setEnabled(false);
 
-		itemCollapse.addActionListener(new ActionListener() {
+		itemGroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				controller.addUpperNode("NodeOfNode", UpperNode);
 				repaint();
 			}
 		});
+		
+		itemGroup.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				controller.delUpperNode((CpsUpperNode) tempCps, UpperNode);
+				repaint();
+			}
+		});
 
 		itemTrack.addActionListener(new ActionListener() {
 			@Override
@@ -530,7 +541,12 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				itemDelete.setEnabled(true);
 				itemCut.setEnabled(true);
 				itemCopy.setEnabled(true);
-				itemCollapse.setEnabled(true);
+				if (tempCps != null)
+					itemGroup.setEnabled(true);
+				if (tempCps instanceof CpsUpperNode)
+					itemUngroup.setEnabled(true);
+				else
+					itemUngroup.setEnabled(false);
 				if (!(tempCps instanceof HolonSwitch)) {
 					itemTrack.setEnabled(true);
 					itemUntrack.setEnabled(true);
@@ -545,7 +561,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				itemCut.setEnabled(false);
 				itemCopy.setEnabled(false);
 				itemDelete.setEnabled(false);
-				itemCollapse.setEnabled(false);
+				itemGroup.setEnabled(false);
+				itemUngroup.setEnabled(false);
 				itemTrack.setEnabled(false);
 				itemUntrack.setEnabled(false);
 			}