|
@@ -59,7 +59,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
|
|
|
+ public int borderPos = 0; // Border Position
|
|
|
|
|
|
// Path
|
|
|
public String path;
|
|
@@ -117,6 +117,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
// this.add(breadCrumb);
|
|
|
scalediv20 = model.getScale() / 20;
|
|
|
|
|
|
+ // Cps objecte aus dem border links schieben
|
|
|
+ borderPos = (int) (model.getScale() + scalediv20 + scalediv20 + 10);
|
|
|
for (AbstractCpsObject cps : upperNode.getNodes()) {
|
|
|
if (cps.getPosition().x < model.getScaleDiv2() + borderPos + 5) {
|
|
|
cps.setPosition(new Position(borderPos + 5, cps.getPosition().y));
|
|
@@ -125,7 +127,6 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
|
|
|
showedInformation[0] = true;
|
|
|
showedInformation[1] = true;
|
|
|
- control.setMaxCapacity(10000);
|
|
|
|
|
|
popmenu.add(itemCut);
|
|
|
popmenu.add(itemCopy);
|
|
@@ -315,8 +316,24 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
if (drawEdge) {
|
|
|
g2.setColor(Color.BLACK);
|
|
|
g2.setStroke(new BasicStroke(2));
|
|
|
- g2.drawLine(tempCps.getPosition().x + controller.getScaleDiv2(),
|
|
|
- tempCps.getPosition().y + controller.getScaleDiv2(), x, y);
|
|
|
+
|
|
|
+ // If TempCps is an outside Object
|
|
|
+ if (!upperNode.getNodes().contains(tempCps)) {
|
|
|
+ int count = 0;
|
|
|
+ for (CpsEdge e : upperNode.getConnections()) {
|
|
|
+ if (e.getA().equals(tempCps)) {
|
|
|
+ g2.drawLine(borderPos >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
|
|
|
+ + (model.getScale() + scalediv20 + 10) * count), x, y);
|
|
|
+ } else if (e.getB().equals(tempCps)) {
|
|
|
+ g2.drawLine(borderPos >> 1, (int) (model.getScaleDiv2() + scalediv20 + 5
|
|
|
+ + (model.getScale() + scalediv20 + 10) * count), x, y);
|
|
|
+ }
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ g2.drawLine(tempCps.getPosition().x + controller.getScaleDiv2(),
|
|
|
+ tempCps.getPosition().y + controller.getScaleDiv2(), x, y);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
for (CpsEdge con : upperNode.getNodeEdges()) {
|
|
@@ -656,6 +673,14 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (e.isControlDown() && tempCps != null) {
|
|
|
+ if (model.getSelectedCpsObjects().contains(tempCps)) {
|
|
|
+ controller.deleteSelectedObject(tempCps);
|
|
|
+ } else {
|
|
|
+ controller.addSelectedObject(tempCps);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Selection of CpsObject
|
|
|
// model.setSelectedCpsObject(tempCps);
|
|
|
|
|
@@ -815,8 +840,8 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
y = (int) (cps.getPosition().y + yDist);
|
|
|
|
|
|
// Make sure its in bounds
|
|
|
- if (x <= 0)
|
|
|
- x = 0;
|
|
|
+ if (x < borderPos + 5)
|
|
|
+ x = borderPos + 5;
|
|
|
else if (x > this.getWidth() - controller.getScale())
|
|
|
x = this.getWidth() - controller.getScale();
|
|
|
if (y <= 0)
|
|
@@ -917,14 +942,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()) {
|
|
@@ -934,7 +967,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();
|
|
@@ -947,10 +984,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);
|
|
@@ -976,7 +1070,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);
|
|
|
}
|
|
@@ -991,7 +1090,11 @@ public class UpperNodeCanvas extends JPanel implements MouseListener, MouseMotio
|
|
|
|
|
|
e = new CpsEdge(n, tempCps, model.getMaxCapacity());
|
|
|
|
|
|
- controller.addEdgeUpperNode(e, upperNode);
|
|
|
+ if (outsideCon) {
|
|
|
+ controller.connectNodes(e, upperNode);
|
|
|
+ } else {
|
|
|
+ controller.addEdgeUpperNode(e, upperNode);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Wenn ein Node ohne Connections da ist
|