|
@@ -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);
|
|
|
}
|