Browse Source

objects on the left

Kevin Trometer 7 years ago
parent
commit
424cf1e852
1 changed files with 180 additions and 81 deletions
  1. 180 81
      src/ui/view/UpperNodeCanvas.java

+ 180 - 81
src/ui/view/UpperNodeCanvas.java

@@ -34,6 +34,7 @@ import classes.AbstractCpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
+import classes.Position;
 import classes.SubNet;
 import ui.controller.Control;
 import ui.model.Model;
@@ -56,6 +57,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	private int cx, cy;
 	private int sx, sy; // Mark Coords
 	private float scalediv20;
+	private int borderPos = 0; // Border Position
 
 	// Path
 	public String path;
@@ -86,7 +88,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	public JMenuItem itemUngroup = new JMenuItem("Ungroup");
 	public JMenuItem itemTrack = new JMenuItem("Track");
 	public JMenuItem itemUntrack = new JMenuItem("Untrack");
-	private JToolTip objectTT = new JToolTip();
+	// private JToolTip objectTT = new JToolTip();
 
 	private Point mousePosition = new Point(); // Mouse Position when
 												// rightclicked
@@ -103,7 +105,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 	 *            the Controller
 	 */
 	public UpperNodeCanvas(Model mod, Control control, CpsUpperNode UpperNode, String parentPath) {
-		this.add(objectTT);
+		// this.add(objectTT);
 		this.controller = control;
 		this.model = mod;
 		this.upperNode = UpperNode;
@@ -112,6 +114,12 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		// this.add(breadCrumb);
 		scalediv20 = model.getScale() / 20;
 
+		for (AbstractCpsObject cps : upperNode.getNodes()) {
+			if (cps.getPosition().x < model.getScaleDiv2() + borderPos + 5) {
+				cps.setPosition(new Position(borderPos + 5, cps.getPosition().y));
+			}
+		}
+
 		showedInformation[0] = true;
 		showedInformation[1] = true;
 		edgeCapacity = 10000;
@@ -142,7 +150,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				repaint();
 			}
 		});
-		
+
 		itemUngroup.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -260,6 +268,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		g2.setRenderingHints(rh);
 
+		// Left Border
+		borderPos = (int) (model.getScale()+scalediv20+scalediv20+10);
+		g2.setColor(new Color(230, 230, 230));
+		g2.fillRect(0, 0, borderPos, this.getHeight());
+		g2.setColor(Color.BLACK);
+		g2.drawLine(0, 0, this.getWidth(), 0);
+		
+
 		// Test SubNet Coloring
 		int i = 0;
 		for (SubNet s : controller.getSimManager().getSubNets()) {
@@ -372,7 +388,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 			}
 		}
 
-		// Objects
+		// Objects in upper node
 		for (AbstractCpsObject cps : upperNode.getNodes()) {
 			// Border Highlighting
 			g2.setColor(cps.getBorderColor());
@@ -431,6 +447,68 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					null);
 		}
 
+		// Objects connected to upperNode
+		int count = 0;
+		for (CpsEdge e : upperNode.getConnections()) {
+
+			AbstractCpsObject cps;
+			if (e.getA().equals(this.upperNode)) {
+				cps = e.getB();
+			} else {
+				cps = e.getA();
+			}
+
+			// Border Highlighting
+			g2.setColor(cps.getBorderColor());
+			if (g2.getColor() != Color.WHITE) {
+				g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20) - 3,
+						(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20) - 3,
+						(int) (controller.getScale() + ((scalediv20 + 3) * 2)),
+						(int) (controller.getScale() + ((scalediv20 + 3) * 2)));
+			}
+
+			// node image
+			if (cps instanceof CpsNode && (cps == tempCps || model.getSelectedCpsObject() == cps
+					|| model.getSelectedCpsObjects().contains(cps) || tempSelected.contains(cps))) {
+				img = new ImageIcon(this.getClass().getResource("/Images/node_selected.png")).getImage();
+			} else {
+				if (cps instanceof HolonSwitch) {
+					if (((HolonSwitch) cps).getActiveAt()[model.getCurIteration()]) {
+						((HolonSwitch) cps).setAutoState(true);
+					} else {
+						((HolonSwitch) cps).setAutoState(false);
+					}
+				}
+				// Highlighting
+				if ((cps == tempCps && model.getSelectedCpsObjects().size() == 0 && tempSelected.size() == 0)
+						|| model.getSelectedCpsObjects().contains(cps) || tempSelected.contains(cps)) {
+					g2.setColor(Color.BLUE);
+					g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20),
+							(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20),
+							(int) (controller.getScale() + (scalediv20 * 2)),
+							(int) (controller.getScale() + (scalediv20 * 2)));
+				} else if (cps instanceof HolonObject) {
+					g2.setColor(((HolonObject) cps).getColor());
+
+					g2.fillRect((int) ((borderPos >> 1) - model.getScaleDiv2() - scalediv20),
+							(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count - scalediv20),
+							(int) (controller.getScale() + (scalediv20 * 2)),
+							(int) (controller.getScale() + (scalediv20 * 2)));
+				}
+				// draw image
+				File checkPath = new File(cps.getImage());
+				if (checkPath.exists()) {
+					img = new ImageIcon(cps.getImage()).getImage();
+				} else {
+					img = new ImageIcon(this.getClass().getResource(cps.getImage())).getImage();
+				}
+			}
+			g2.drawImage(img, (borderPos >> 1) - model.getScaleDiv2(),
+					(int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count), controller.getScale(),
+					controller.getScale(), null);
+			count++;
+		}
+		
 		// Dragg Highlighting
 		if (doMark) {
 			g2.setColor(Color.BLACK);
@@ -445,6 +523,10 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				g2.drawRect(sx, y, x - sx, sy - y);
 			}
 		}
+		
+		//Border Line
+		g2.setColor(Color.BLACK);
+		g2.drawLine(borderPos, 0, borderPos, this.getHeight());
 	}
 
 	@Override
@@ -467,31 +549,44 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		edgeHighlight = null;
 		controller.setSelecteEdge(null);
 		// Object Selection
-		for (AbstractCpsObject cps : upperNode.getNodes()) {
-			cx = cps.getPosition().x;
-			cy = cps.getPosition().y;
-			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
-				tempCps = cps;
-				controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
-				controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
-				controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
-				controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
-				dragging = true;
-				controller.setSelectedObjectID(tempCps.getID());
-				// If drawing an Edge (CTRL down)
-				if (tempCps.getClass() == HolonObject.class) {
-					HolonObject tempObj = ((HolonObject) tempCps);
-					dataSelected = tempObj.getElements();
+		if (e.getX() > borderPos) {
+			for (AbstractCpsObject cps : upperNode.getNodes()) {
+				cx = cps.getPosition().x;
+				cy = cps.getPosition().y;
+				if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
+					tempCps = cps;
+					controller.addTextToConsole("Selected: ", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getName(), Color.BLUE, 12, true, false, false);
+					controller.addTextToConsole(", ID:", Color.BLACK, 12, false, false, false);
+					controller.addTextToConsole("" + cps.getID(), Color.RED, 12, true, false, true);
+					dragging = true;
+					controller.setSelectedObjectID(tempCps.getID());
+					// If drawing an Edge (CTRL down)
+					if (tempCps.getClass() == HolonObject.class) {
+						HolonObject tempObj = ((HolonObject) tempCps);
+						dataSelected = tempObj.getElements();
+					}
+					if (e.isShiftDown()) {
+						drawEdge = true;
+						dragging = false;
+					}
 				}
-				if (e.isShiftDown()) {
-					drawEdge = true;
-					dragging = false;
+			}
+		} else {
+			for (CpsEdge ed : upperNode.getConnections()) {
+				AbstractCpsObject cps;
+				if (ed.getA().equals(this.upperNode)) {
+					cps = ed.getB();
+				} else {
+					cps = ed.getA();
 				}
+
 			}
 		}
+
 		// Selection of CpsObject
 		model.setSelectedCpsObject(tempCps);
-		
+
 		// Edge Selection
 		if (tempCps == null) {
 			edgeHighlight = mousePositionOnEdge(x, y);
@@ -604,48 +699,55 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		}
 		if (dragging) {
 			try {
-				dragged = true;
-				float xDist, yDist; // Distance
-
-				x = e.getX() - controller.getScaleDiv2();
-				y = e.getY() - controller.getScaleDiv2();
-
-				// Make sure its in bounds
-				if (e.getX() < controller.getScaleDiv2())
-					x = 0;
-				else if (e.getX() > this.getWidth() - controller.getScaleDiv2())
-					x = this.getWidth() - controller.getScale();
-				if (e.getY() < controller.getScaleDiv2())
-					y = 0;
-				else if (e.getY() > this.getHeight() - controller.getScaleDiv2())
-					y = this.getHeight() - controller.getScale();
-
-				// Distance
-				xDist = x - tempCps.getPosition().x;
-				yDist = y - tempCps.getPosition().y;
-
-				tempCps.setPosition(x, y); // Drag Position
-				// TipText Position and name
-				objectTT.setTipText(tempCps.getName() + ", " + tempCps.getID());
-				objectTT.setLocation(x, y + controller.getScale());
-
-				// All Selected Objects
-				for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
-					if (cps != tempCps) {
-						x = (int) (cps.getPosition().x + xDist);
-						y = (int) (cps.getPosition().y + yDist);
-
-						// Make sure its in bounds
-						if (x <= 0)
-							x = 0;
-						else if (x > this.getWidth() - controller.getScale())
-							x = this.getWidth() - controller.getScale();
-						if (y <= 0)
-							y = 0;
-						else if (y > this.getHeight() - controller.getScale())
-							y = this.getHeight() - controller.getScale();
-
-						cps.setPosition(x, y);
+				if (upperNode.getNodes().contains(tempCps)) {
+					dragged = true;
+					float xDist, yDist; // Distance
+
+					x = e.getX() - controller.getScaleDiv2();
+					y = e.getY() - controller.getScaleDiv2();
+
+					// tempCps in the upperNode? if not its a connected Object
+					// from
+					// outside
+
+					// Make sure its in bounds
+					if (e.getX() < controller.getScaleDiv2() + borderPos + 5)
+						x = borderPos + 5;
+					else if (e.getX() > this.getWidth() - controller.getScaleDiv2())
+						x = this.getWidth() - controller.getScale();
+					if (e.getY() < controller.getScaleDiv2())
+						y = 0;
+					else if (e.getY() > this.getHeight() - controller.getScaleDiv2())
+						y = this.getHeight() - controller.getScale();
+
+					// Distance
+					xDist = x - tempCps.getPosition().x;
+					yDist = y - tempCps.getPosition().y;
+
+					tempCps.setPosition(x, y); // Drag Position
+					// TipText Position and name
+					// objectTT.setTipText(tempCps.getName() + ", " +
+					// tempCps.getID());
+					// objectTT.setLocation(x, y + controller.getScale());
+
+					// All Selected Objects
+					for (AbstractCpsObject cps : model.getSelectedCpsObjects()) {
+						if (cps != tempCps) {
+							x = (int) (cps.getPosition().x + xDist);
+							y = (int) (cps.getPosition().y + yDist);
+
+							// Make sure its in bounds
+							if (x <= 0)
+								x = 0;
+							else if (x > this.getWidth() - controller.getScale())
+								x = this.getWidth() - controller.getScale();
+							if (y <= 0)
+								y = 0;
+							else if (y > this.getHeight() - controller.getScale())
+								y = this.getHeight() - controller.getScale();
+
+							cps.setPosition(x, y);
+						}
 					}
 				}
 				repaint();
@@ -686,22 +788,19 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		x = e.getX();
 		y = e.getY();
 		// Everytghing for the tooltip :)
-		boolean on = false;
-		for (AbstractCpsObject cps : upperNode.getNodes()) {
-
-			cx = cps.getPosition().x;
-			cy = cps.getPosition().y;
-			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
-
-				objectTT.setTipText(cps.getName() + ", " + cps.getID());
-				objectTT.setLocation(cx, cy + controller.getScale());
-				on = true;
-			}
-		}
-		if (!on) {
-			objectTT.setLocation(-200, -200);
-			objectTT.setTipText("");
-		}
+		/*
+		 * boolean on = false; for (AbstractCpsObject cps :
+		 * upperNode.getNodes()) {
+		 * 
+		 * cx = cps.getPosition().x; cy = cps.getPosition().y; if (x -
+		 * controller.getScale() <= cx && y - controller.getScale() <= cy && x
+		 * >= cx && y >= cy) {
+		 * 
+		 * objectTT.setTipText(cps.getName() + ", " + cps.getID());
+		 * objectTT.setLocation(cx, cy + controller.getScale()); on = true; } }
+		 * if (!on) { objectTT.setLocation(-200, -200); objectTT.setTipText("");
+		 * }
+		 */
 	}
 
 	/**