Browse Source

edges complete

Kevin Trometer 8 years ago
parent
commit
b02ad1f75f
1 changed files with 79 additions and 5 deletions
  1. 79 5
      src/ui/view/UpperNodeCanvas.java

+ 79 - 5
src/ui/view/UpperNodeCanvas.java

@@ -645,7 +645,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				controller.addSelectedObject(tempCps);
 			}
 		}
-		
+
 		// Selection of CpsObject
 		model.setSelectedCpsObject(tempCps);
 
@@ -887,7 +887,7 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 
 		if (!on) {
 			objectTT.setTipText("");
-			//objectTT.setLocation(-200, -200);
+			// objectTT.setLocation(-200, -200);
 		}
 
 	}
@@ -900,14 +900,22 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 		boolean newEdge = true;
 		boolean onEdge = true;
 		boolean deleteNode = false;
+		boolean outsideCon = !upperNode.getNodes().contains(tempCps); // Connection
+																		// to
+																		// the
+																		// outside
+		boolean found = false;
 		CpsEdge e = null;
 		AbstractCpsObject tempCPS = null;
 
 		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
 					&& cps != tempCps) {
+				found = true;
 				node = false;
 				onEdge = false;
 				for (CpsEdge p : tempCps.getConnections()) {
@@ -917,7 +925,11 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 					}
 				}
 				if (!newEdge) {
-					controller.delEdgeUpperNode(e, upperNode);
+					if (outsideCon) {
+						controller.disconnectNodes(e, upperNode);
+					} else {
+						controller.delEdgeUpperNode(e, upperNode);
+					}
 					// Node ohne Edge?
 					if (e.getA().getClass() == CpsNode.class && e.getA().getConnections().isEmpty()) {
 						tempCps = e.getA();
@@ -930,10 +942,67 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				}
 				if (newEdge) {
 					e = new CpsEdge(cps, tempCps, model.getMaxCapacity());
-					controller.addEdgeUpperNode(e, upperNode);
+					if (outsideCon) {
+						controller.connectNodes(e, upperNode);
+					} else {
+						controller.addEdgeUpperNode(e, upperNode);
+					}
 				}
 			}
 		}
+		if (!found) {
+			int count = 0;
+			for (CpsEdge ed : upperNode.getConnections()) {
+				AbstractCpsObject cps = null;
+				if (ed.getA().equals(upperNode)) {
+					cps = ed.getB();
+				} else {
+					cps = ed.getA();
+				}
+				
+				cx = borderPos >> 1;
+				cy = (int) (scalediv20 + 5 + (model.getScale() + scalediv20 + 10) * count);
+				
+				if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy
+						&& cps != tempCps) {
+					outsideCon = true;
+					node = false;
+					onEdge = false;
+					for (CpsEdge p : tempCps.getConnections()) {
+						if ((p.getA() == tempCps && p.getB() == cps) || (p.getB() == tempCps && p.getA() == cps)) {
+							newEdge = false;
+							e = p;
+						}
+					}
+					if (!newEdge) {
+						if (outsideCon) {
+							controller.disconnectNodes(e, upperNode);
+						} else {
+							controller.delEdgeUpperNode(e, upperNode);
+						}
+						// Node ohne Edge?
+						if (e.getA().getClass() == CpsNode.class && e.getA().getConnections().isEmpty()) {
+							tempCps = e.getA();
+							deleteNode = true;
+						}
+						if (e.getB().getClass() == CpsNode.class && e.getB().getConnections().isEmpty()) {
+							tempCPS = e.getB();
+							deleteNode = true;
+						}
+					}
+					if (newEdge) {
+						CpsEdge edge = new CpsEdge(cps, tempCps, model.getMaxCapacity());
+						if (outsideCon) {
+							controller.connectNodes(edge, upperNode);
+						} else {
+							controller.addEdgeUpperNode(edge, upperNode);
+						}
+					}
+				}
+				count++;
+			}
+		}
+
 		// Edge auf eine Edge gezogen?
 		if (onEdge) {
 			CpsEdge p = mousePositionOnEdge(x, y);
@@ -959,7 +1028,12 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
 				e2 = new CpsEdge(n, k, model.getMaxCapacity());
 
 				controller.delEdgeUpperNode(p, upperNode);
-				controller.addEdgeUpperNode(e, upperNode);
+				if (outsideCon) {
+					controller.connectNodes(e, upperNode);
+				} else {
+					controller.addEdgeUpperNode(e, upperNode);
+				}
+
 				controller.addEdgeUpperNode(e1, upperNode);
 				controller.addEdgeUpperNode(e2, upperNode);
 			}