more sidebar buttons
This commit is contained in:
parent
6d34e37572
commit
ad7562e3d2
@ -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);
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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<Wire> wireOptional = circuit.findWireByPosition(position);
|
||||
final Optional<Wire> 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;
|
||||
|
||||
@ -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<Boolean> get, final Consumer<Boolean> 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<Boolean> get, final Consumer<Boolean> set) {
|
||||
final Consumer<Button> refresh = button -> {
|
||||
if (get.get()) {
|
||||
button.setBackground(new Color(128, 255, 128));
|
||||
} else {
|
||||
button.setBackground(new Color(255, 128, 128));
|
||||
}
|
||||
};
|
||||
toggle.run();
|
||||
|
||||
button.addActionListener(e -> {
|
||||
final Runnable click = () -> {
|
||||
set.accept(!get.get());
|
||||
toggle.run();
|
||||
triggerRepaint();
|
||||
});
|
||||
};
|
||||
return addButton(label, refresh, click, null);
|
||||
}
|
||||
|
||||
private Button addButton(final String label, final Consumer<Button> refresh, final Runnable click, final Color background) {
|
||||
final Button button = new Button(label);
|
||||
button.setBackground(background);
|
||||
button.setPreferredSize(new Dimension(RASTER / 2, RASTER / 2));
|
||||
if (refresh != null) {
|
||||
refresh.accept(button);
|
||||
}
|
||||
button.addActionListener(e -> {
|
||||
click.run();
|
||||
if (refresh != null) {
|
||||
refresh.accept(button);
|
||||
}
|
||||
});
|
||||
add(button);
|
||||
return button;
|
||||
}
|
||||
|
||||
private void triggerRepaint() {
|
||||
@ -62,7 +78,7 @@ public class Sidebar extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
private void add(final Part part) {
|
||||
private void addPart(final Part part) {
|
||||
final SidebarPart entry = new SidebarPart(part);
|
||||
add(entry);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user