|
@@ -1,8 +1,6 @@
|
|
|
package holeg.ui.view.canvas;
|
|
|
|
|
|
-import holeg.model.AbstractCanvasObject;
|
|
|
-import holeg.model.GroupNode;
|
|
|
-import holeg.model.HolonSwitch;
|
|
|
+import holeg.model.*;
|
|
|
import holeg.ui.controller.Control;
|
|
|
import holeg.ui.model.GuiSettings;
|
|
|
import holeg.utility.math.vector.Geometry;
|
|
@@ -18,11 +16,6 @@ import java.util.Optional;
|
|
|
import java.util.Set;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
-
|
|
|
- * This Class is the Canvas. All Objects will be visualized here
|
|
|
- *
|
|
|
- * @author Gruppe14
|
|
|
- */
|
|
|
public class Canvas extends JPanel {
|
|
|
private static final Logger log = Logger.getLogger(Canvas.class.getName());
|
|
|
private final GroupNode groupNode;
|
|
@@ -59,13 +52,9 @@ public class Canvas extends JPanel {
|
|
|
@Override
|
|
|
public void paintComponent(java.awt.Graphics g) {
|
|
|
super.paintComponent(g);
|
|
|
+ log.info("Draw");
|
|
|
Graphics2D g2d = Rendering.initGraphics2D(g);
|
|
|
Rendering.drawSelection(g2d);
|
|
|
- log.info("Draw");
|
|
|
- groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
|
|
|
- groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
|
|
|
- groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
|
|
|
- groupNode.getNodes().forEach(node -> Rendering.drawNode(g2d, node));
|
|
|
control.getModel().getEdgesOnCanvas().forEach(edge -> {
|
|
|
boolean edgeAinside = edge.getA().getGroupNode().get() == groupNode;
|
|
|
boolean edgeBinside = edge.getB().getGroupNode().get() == groupNode;
|
|
@@ -76,10 +65,16 @@ public class Canvas extends JPanel {
|
|
|
|
|
|
|
|
|
});
|
|
|
-
|
|
|
- if (listener.state == CanvasMouseListener.State.BoxSelection) {
|
|
|
- Rendering.drawSelectionBox(g2d, listener.getRectangleOfSelectionBox());
|
|
|
+ groupNode.getHolonObjects().forEach(hO -> Rendering.drawHolonObject(g2d, hO));
|
|
|
+ groupNode.getSwitches().forEach(hS -> Rendering.drawSwitchObject(g2d, hS));
|
|
|
+ groupNode.getGroupNodes().forEach(groupNode -> Rendering.drawGroupNode(g2d, groupNode));
|
|
|
+ groupNode.getNodes().forEach(node -> Rendering.drawNode(g2d, node));
|
|
|
+ switch (listener.state) {
|
|
|
+ case BoxSelection -> Rendering.drawSelectionBox(g2d, listener.getRectangleOfSelectionBox());
|
|
|
+ case EdgeCreation -> Rendering.drawNewEdgeLine(g2d, listener.selectedOnPressed.getPosition(), listener.lastPosition);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private Optional<AbstractCanvasObject> getObjectAtPosition(Vec2i pos) {
|
|
@@ -101,6 +96,7 @@ public class Canvas extends JPanel {
|
|
|
private Vec2i pressedPosition = new Vec2i();
|
|
|
private Set<AbstractCanvasObject> selectionBeforeBoxSelection = new HashSet<>();
|
|
|
private State state = State.None;
|
|
|
+ private AbstractCanvasObject selectedOnPressed = null;
|
|
|
|
|
|
@Override
|
|
|
public void mousePressed(MouseEvent e) {
|
|
@@ -108,7 +104,7 @@ public class Canvas extends JPanel {
|
|
|
return;
|
|
|
}
|
|
|
log.info(state.toString());
|
|
|
- if(!e.isControlDown()){
|
|
|
+ if (!e.isControlDown()) {
|
|
|
GuiSettings.getSelectedObjects().clear();
|
|
|
}
|
|
|
Vec2i pos = new Vec2i(e.getPoint());
|
|
@@ -117,6 +113,7 @@ public class Canvas extends JPanel {
|
|
|
state = State.Selection;
|
|
|
GuiSettings.getSelectedObjects().add(obj);
|
|
|
}
|
|
|
+ selectedOnPressed = obj;
|
|
|
}, () -> {
|
|
|
state = State.BoxSelection;
|
|
|
selectionBeforeBoxSelection = Set.copyOf(GuiSettings.getSelectedObjects());
|
|
@@ -125,25 +122,6 @@ public class Canvas extends JPanel {
|
|
|
lastPosition = pressedPosition = pos;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void mouseReleased(MouseEvent e) {
|
|
|
- if (!enabled) {
|
|
|
- return;
|
|
|
- }
|
|
|
- log.info(state.toString());
|
|
|
- if (state == State.None) {
|
|
|
- getObjectAtPosition(lastPosition).ifPresent(obj -> {
|
|
|
- if (GuiSettings.getSelectedObjects().contains(obj)) {
|
|
|
- control.removeObjectFromSelection(obj);
|
|
|
- } else {
|
|
|
- control.addSelectedObject(obj);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- state = State.None;
|
|
|
- repaint();
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void mouseDragged(MouseEvent e) {
|
|
|
if (!enabled) {
|
|
@@ -180,17 +158,38 @@ public class Canvas extends JPanel {
|
|
|
GuiSettings.getSelectedObjects().forEach(obj -> obj.getPosition().addAssign(delta));
|
|
|
repaint();
|
|
|
}
|
|
|
- case EdgeCreation -> {
|
|
|
- log.info("Edge Creation");
|
|
|
- repaint();
|
|
|
- }
|
|
|
+ case EdgeCreation -> repaint();
|
|
|
}
|
|
|
lastPosition = actualPos;
|
|
|
|
|
|
}
|
|
|
|
|
|
- Rectangle getRectangleOfSelectionBox() {
|
|
|
- return Geometry.createRectangleFromCorners(lastPosition, pressedPosition);
|
|
|
+ @Override
|
|
|
+ public void mouseReleased(MouseEvent e) {
|
|
|
+ if (!enabled) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ log.info(state.toString());
|
|
|
+ switch (state) {
|
|
|
+ case None -> {
|
|
|
+ if (GuiSettings.getSelectedObjects().contains(selectedOnPressed)) {
|
|
|
+ control.removeObjectFromSelection(selectedOnPressed);
|
|
|
+ } else {
|
|
|
+ control.addSelectedObject(selectedOnPressed);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case EdgeCreation -> {
|
|
|
+ getObjectAtPosition(lastPosition).ifPresentOrElse(obj -> control.addEdgeOnCanvas(new Edge(selectedOnPressed, obj, GuiSettings.maxCapacityForNewCreatedEdges)), () -> {
|
|
|
+ Node node = new Node("Node");
|
|
|
+ groupNode.add(node);
|
|
|
+ node.setPosition(new Vec2i(lastPosition));
|
|
|
+ control.addEdgeOnCanvas(new Edge(selectedOnPressed, node, GuiSettings.maxCapacityForNewCreatedEdges));
|
|
|
+ });
|
|
|
+ control.calculateStateAndVisualForCurrentTimeStep();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ state = State.None;
|
|
|
+ repaint();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -208,6 +207,10 @@ public class Canvas extends JPanel {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ Rectangle getRectangleOfSelectionBox() {
|
|
|
+ return Geometry.createRectangleFromCorners(lastPosition, pressedPosition);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void mouseEntered(MouseEvent e) {
|
|
|
}
|