diff --git a/src/main/java/de/ph87/electro/Window.java b/src/main/java/de/ph87/electro/Window.java index e8b1ae2..8ccbcac 100644 --- a/src/main/java/de/ph87/electro/Window.java +++ b/src/main/java/de/ph87/electro/Window.java @@ -16,8 +16,9 @@ public class Window extends JFrame { setPreferredSize(new Dimension(1200, 900)); setExtendedState(MAXIMIZED_BOTH); - final Sidebar sidebar = new Sidebar(); final CircuitPanel circuitPanel = new CircuitPanel(); + final Sidebar sidebar = new Sidebar(circuitPanel::newCircuit, circuitPanel::save); + final JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sidebar, circuitPanel); sidebar.setRepaintCallback(circuitPanel::repaint); sidebar.setPreferredSize(new Dimension(calcWidth(3), 0)); @@ -26,7 +27,6 @@ public class Window extends JFrame { circuitPanel.setPreferredSize(new Dimension(calcWidth(8), 0)); circuitPanel.setMinimumSize(new Dimension(calcWidth(2), 0)); - final JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sidebar, circuitPanel); splitter.setDividerLocation(calcWidth(3)); add(splitter); diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java index 0bb595b..ef83389 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanel.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanel.java @@ -4,6 +4,7 @@ import de.ph87.electro.circuit.part.Part; import de.ph87.electro.circuit.part.junction.Junction; import de.ph87.electro.circuit.part.parts.Battery; import de.ph87.electro.circuit.part.parts.Light; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.swing.*; @@ -16,12 +17,13 @@ import static de.ph87.electro.circuit.part.Position.RST; @Slf4j public class CircuitPanel extends JPanel { - private final Circuit circuit = new Circuit(); + @Getter + private Circuit circuit = new Circuit(); - private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this, circuit); + private final CircuitPanelMouseAdapter mouseAdapter = new CircuitPanelMouseAdapter(this); public CircuitPanel() { - new CircuitPanelDropTarget(this, circuit); + new CircuitPanelDropTarget(this); final Battery b0 = circuit.addPart(new Battery(circuit, RST(0, 0))); final Light l = circuit.addPart(new Light(circuit, RST(2, 0))); final Battery b1 = circuit.addPart(new Battery(circuit, RST(4, 0))); @@ -100,4 +102,13 @@ public class CircuitPanel extends JPanel { } } + public void newCircuit() { + circuit = new Circuit(); + repaint(); + } + + public void save() { + circuit.save(); + } + } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java index 0182a54..8c476f5 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelDropTarget.java @@ -10,12 +10,9 @@ public class CircuitPanelDropTarget extends AbstractDropTarget { private final CircuitPanel circuitPanel; - private final Circuit circuit; - - public CircuitPanelDropTarget(final CircuitPanel circuitPanel, final Circuit circuit) { + public CircuitPanelDropTarget(final CircuitPanel circuitPanel) { super(circuitPanel); this.circuitPanel = circuitPanel; - this.circuit = circuit; circuitPanel.setDropTarget(this); } @@ -23,23 +20,23 @@ public class CircuitPanelDropTarget extends AbstractDropTarget { protected boolean drop(final Point point, final String data) { final Position position = new Position(point); if (data.equals(Battery.class.getSimpleName())) { - circuit.addPart(new Battery(circuit, position)); + circuitPanel.getCircuit().addPart(new Battery(circuitPanel.getCircuit(), position)); } else if (data.equals(ConnectorCorner.class.getSimpleName())) { - circuit.addPart(new ConnectorCorner(circuit, position)); + circuitPanel.getCircuit().addPart(new ConnectorCorner(circuitPanel.getCircuit(), position)); } else if (data.equals(ConnectorEdge.class.getSimpleName())) { - circuit.addPart(new ConnectorEdge(circuit, position)); + circuitPanel.getCircuit().addPart(new ConnectorEdge(circuitPanel.getCircuit(), position)); } else if (data.equals(ConnectorMiddle.class.getSimpleName())) { - circuit.addPart(new ConnectorMiddle(circuit, position)); + circuitPanel.getCircuit().addPart(new ConnectorMiddle(circuitPanel.getCircuit(), position)); } else if (data.equals(Light.class.getSimpleName())) { - circuit.addPart(new Light(circuit, position)); + circuitPanel.getCircuit().addPart(new Light(circuitPanel.getCircuit(), position)); } else if (data.equals(Switch1x1.class.getSimpleName())) { - circuit.addPart(new Switch1x1(circuit, position)); + circuitPanel.getCircuit().addPart(new Switch1x1(circuitPanel.getCircuit(), position)); } else if (data.equals(Switch1x2.class.getSimpleName())) { - circuit.addPart(new Switch1x2(circuit, position)); + circuitPanel.getCircuit().addPart(new Switch1x2(circuitPanel.getCircuit(), position)); } else if (data.equals(SwitchCross.class.getSimpleName())) { - circuit.addPart(new SwitchCross(circuit, position)); + circuitPanel.getCircuit().addPart(new SwitchCross(circuitPanel.getCircuit(), position)); } else if (data.equals(Poti.class.getSimpleName())) { - circuit.addPart(new Poti(circuit, position)); + circuitPanel.getCircuit().addPart(new Poti(circuitPanel.getCircuit(), position)); } else { throw new RuntimeException(); } diff --git a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java index d518384..36ce541 100644 --- a/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java +++ b/src/main/java/de/ph87/electro/circuit/CircuitPanelMouseAdapter.java @@ -18,8 +18,6 @@ class CircuitPanelMouseAdapter extends MouseAdapter { private final CircuitPanel circuitPanel; - private final Circuit circuit; - private Part partHover = null; private Junction junctionHover = null; @@ -32,9 +30,8 @@ class CircuitPanelMouseAdapter extends MouseAdapter { private Position dragPosition = null; - CircuitPanelMouseAdapter(final CircuitPanel circuitPanel, final Circuit circuit) { + CircuitPanelMouseAdapter(final CircuitPanel circuitPanel) { this.circuitPanel = circuitPanel; - this.circuit = circuit; circuitPanel.addMouseListener(this); circuitPanel.addMouseMotionListener(this); } @@ -44,15 +41,15 @@ class CircuitPanelMouseAdapter extends MouseAdapter { final Position position = new Position(event); if (event.getButton() == BUTTON3) { - final Optional wireOptional = circuit.findWireByPosition(position); + final Optional wireOptional = circuitPanel.getCircuit().findWireByPosition(position); if (wireOptional.isPresent()) { - circuit.disconnect(wireOptional.get()); + circuitPanel.getCircuit().disconnect(wireOptional.get()); circuitPanel.repaint(); return; } } - circuit.findPartByPosition(position).ifPresent(part -> { + circuitPanel.getCircuit().findPartByPosition(position).ifPresent(part -> { switch (event.getButton()) { case BUTTON1: part.action(); @@ -75,7 +72,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter { @Override public void mousePressed(final MouseEvent event) { final Position position = new Position(event); - circuit.findPartByPosition(position).ifPresent(part -> startPartOrJunction(part, position)); + circuitPanel.getCircuit().findPartByPosition(position).ifPresent(part -> startPartOrJunction(part, position)); } private void startPartOrJunction(final Part part, final Position position) { @@ -99,14 +96,14 @@ class CircuitPanelMouseAdapter extends MouseAdapter { } private void findHover(final Position position) { - partHover = circuit.findPartByPosition(position).orElse(null); + partHover = circuitPanel.getCircuit().findPartByPosition(position).orElse(null); junctionHover = partHover != null ? partHover.findJunctionByPosition(position).orElse(null) : null; if (junctionHover != null) { partHover = null; wireHover = null; return; } - wireHover = circuit.findWireByPosition(position).orElse(null); + wireHover = circuitPanel.getCircuit().findWireByPosition(position).orElse(null); if (wireHover != null) { partHover = null; } @@ -116,11 +113,11 @@ class CircuitPanelMouseAdapter extends MouseAdapter { public void mouseReleased(final MouseEvent event) { final Position position = new Position(event); if (partDrag != null) { - circuit.movePart(partDrag, position); + circuitPanel.getCircuit().movePart(partDrag, position); } if (junctionDrag != null) { - circuit.findJunctionByAbsolute(position).filter(destination -> destination != junctionDrag).ifPresent(destination -> circuit.connect(junctionDrag, destination)); + circuitPanel.getCircuit().findJunctionByAbsolute(position).filter(destination -> destination != junctionDrag).ifPresent(destination -> circuitPanel.getCircuit().connect(junctionDrag, destination)); } partDrag = null; diff --git a/src/main/java/de/ph87/electro/sidebar/Sidebar.java b/src/main/java/de/ph87/electro/sidebar/Sidebar.java index 9ad90c6..75b8636 100644 --- a/src/main/java/de/ph87/electro/sidebar/Sidebar.java +++ b/src/main/java/de/ph87/electro/sidebar/Sidebar.java @@ -17,43 +17,59 @@ public class Sidebar extends JPanel { @Setter private Runnable repaintCallback = null; - public Sidebar() { - addToggle("Kabel Details", () -> SHOW_WIRE_DETAILS, v -> SHOW_WIRE_DETAILS = v); - addToggle("Kontakt Namen", () -> SHOW_JUNCTION_NAMES, v -> SHOW_JUNCTION_NAMES = v); - addToggle("Kontakt Spannungen", () -> SHOW_JUNCTION_VOLTAGES, v -> SHOW_JUNCTION_VOLTAGES = v); - - add(new Battery(null, Position.ZERO)); - add(new ConnectorCorner(null, Position.ZERO)); - add(new ConnectorEdge(null, Position.ZERO)); - add(new ConnectorMiddle(null, Position.ZERO)); - add(new Light(null, Position.ZERO)); - add(new Switch1x1(null, Position.ZERO)); - add(new Switch1x2(null, Position.ZERO)); - add(new SwitchCross(null, Position.ZERO)); - add(new Poti(null, Position.ZERO)); + public Sidebar(final Runnable newCircuit, final Runnable doSave) { setPreferredSize(new Dimension(0, 200)); + + addButton("Neu", null, newCircuit, new Color(128, 202, 255)); + addButton("Öffnen", null, doSave, new Color(128, 202, 255)); + addButton("Speichern", null, doSave, new Color(128, 202, 255)); + + addToggle("Details", () -> SHOW_WIRE_DETAILS, v -> SHOW_WIRE_DETAILS = v); + addToggle("Namen", () -> SHOW_JUNCTION_NAMES, v -> SHOW_JUNCTION_NAMES = v); + addToggle("Spannungen", () -> SHOW_JUNCTION_VOLTAGES, v -> SHOW_JUNCTION_VOLTAGES = v); + + addPart(new Battery(null, Position.ZERO)); + addPart(new ConnectorCorner(null, Position.ZERO)); + addPart(new ConnectorEdge(null, Position.ZERO)); + addPart(new ConnectorMiddle(null, Position.ZERO)); + addPart(new Light(null, Position.ZERO)); + addPart(new Switch1x1(null, Position.ZERO)); + addPart(new Switch1x2(null, Position.ZERO)); + addPart(new SwitchCross(null, Position.ZERO)); + addPart(new Poti(null, Position.ZERO)); } - private void addToggle(final String label, final Supplier get, final Consumer set) { - final Button button = new Button(label); - button.setPreferredSize(new Dimension(RASTER, RASTER)); - - final Runnable toggle = () -> { + @SuppressWarnings("UnusedReturnValue") + private Button addToggle(final String label, final Supplier get, final Consumer set) { + final Consumer