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));
|
setPreferredSize(new Dimension(1200, 900));
|
||||||
setExtendedState(MAXIMIZED_BOTH);
|
setExtendedState(MAXIMIZED_BOTH);
|
||||||
|
|
||||||
final Sidebar sidebar = new Sidebar();
|
|
||||||
final CircuitPanel circuitPanel = new CircuitPanel();
|
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.setRepaintCallback(circuitPanel::repaint);
|
||||||
sidebar.setPreferredSize(new Dimension(calcWidth(3), 0));
|
sidebar.setPreferredSize(new Dimension(calcWidth(3), 0));
|
||||||
@ -26,7 +27,6 @@ public class Window extends JFrame {
|
|||||||
circuitPanel.setPreferredSize(new Dimension(calcWidth(8), 0));
|
circuitPanel.setPreferredSize(new Dimension(calcWidth(8), 0));
|
||||||
circuitPanel.setMinimumSize(new Dimension(calcWidth(2), 0));
|
circuitPanel.setMinimumSize(new Dimension(calcWidth(2), 0));
|
||||||
|
|
||||||
final JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sidebar, circuitPanel);
|
|
||||||
splitter.setDividerLocation(calcWidth(3));
|
splitter.setDividerLocation(calcWidth(3));
|
||||||
add(splitter);
|
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.junction.Junction;
|
||||||
import de.ph87.electro.circuit.part.parts.Battery;
|
import de.ph87.electro.circuit.part.parts.Battery;
|
||||||
import de.ph87.electro.circuit.part.parts.Light;
|
import de.ph87.electro.circuit.part.parts.Light;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@ -16,12 +17,13 @@ import static de.ph87.electro.circuit.part.Position.RST;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class CircuitPanel extends JPanel {
|
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() {
|
public CircuitPanel() {
|
||||||
new CircuitPanelDropTarget(this, circuit);
|
new CircuitPanelDropTarget(this);
|
||||||
final Battery b0 = circuit.addPart(new Battery(circuit, RST(0, 0)));
|
final Battery b0 = circuit.addPart(new Battery(circuit, RST(0, 0)));
|
||||||
final Light l = circuit.addPart(new Light(circuit, RST(2, 0)));
|
final Light l = circuit.addPart(new Light(circuit, RST(2, 0)));
|
||||||
final Battery b1 = circuit.addPart(new Battery(circuit, RST(4, 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 CircuitPanel circuitPanel;
|
||||||
|
|
||||||
private final Circuit circuit;
|
public CircuitPanelDropTarget(final CircuitPanel circuitPanel) {
|
||||||
|
|
||||||
public CircuitPanelDropTarget(final CircuitPanel circuitPanel, final Circuit circuit) {
|
|
||||||
super(circuitPanel);
|
super(circuitPanel);
|
||||||
this.circuitPanel = circuitPanel;
|
this.circuitPanel = circuitPanel;
|
||||||
this.circuit = circuit;
|
|
||||||
circuitPanel.setDropTarget(this);
|
circuitPanel.setDropTarget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,23 +20,23 @@ public class CircuitPanelDropTarget extends AbstractDropTarget {
|
|||||||
protected boolean drop(final Point point, final String data) {
|
protected boolean drop(final Point point, final String data) {
|
||||||
final Position position = new Position(point);
|
final Position position = new Position(point);
|
||||||
if (data.equals(Battery.class.getSimpleName())) {
|
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())) {
|
} 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())) {
|
} 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())) {
|
} 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())) {
|
} 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())) {
|
} 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())) {
|
} 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())) {
|
} 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())) {
|
} else if (data.equals(Poti.class.getSimpleName())) {
|
||||||
circuit.addPart(new Poti(circuit, position));
|
circuitPanel.getCircuit().addPart(new Poti(circuitPanel.getCircuit(), position));
|
||||||
} else {
|
} else {
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,8 +18,6 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
|
|
||||||
private final CircuitPanel circuitPanel;
|
private final CircuitPanel circuitPanel;
|
||||||
|
|
||||||
private final Circuit circuit;
|
|
||||||
|
|
||||||
private Part partHover = null;
|
private Part partHover = null;
|
||||||
|
|
||||||
private Junction junctionHover = null;
|
private Junction junctionHover = null;
|
||||||
@ -32,9 +30,8 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
|
|
||||||
private Position dragPosition = null;
|
private Position dragPosition = null;
|
||||||
|
|
||||||
CircuitPanelMouseAdapter(final CircuitPanel circuitPanel, final Circuit circuit) {
|
CircuitPanelMouseAdapter(final CircuitPanel circuitPanel) {
|
||||||
this.circuitPanel = circuitPanel;
|
this.circuitPanel = circuitPanel;
|
||||||
this.circuit = circuit;
|
|
||||||
circuitPanel.addMouseListener(this);
|
circuitPanel.addMouseListener(this);
|
||||||
circuitPanel.addMouseMotionListener(this);
|
circuitPanel.addMouseMotionListener(this);
|
||||||
}
|
}
|
||||||
@ -44,15 +41,15 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
final Position position = new Position(event);
|
final Position position = new Position(event);
|
||||||
|
|
||||||
if (event.getButton() == BUTTON3) {
|
if (event.getButton() == BUTTON3) {
|
||||||
final Optional<Wire> wireOptional = circuit.findWireByPosition(position);
|
final Optional<Wire> wireOptional = circuitPanel.getCircuit().findWireByPosition(position);
|
||||||
if (wireOptional.isPresent()) {
|
if (wireOptional.isPresent()) {
|
||||||
circuit.disconnect(wireOptional.get());
|
circuitPanel.getCircuit().disconnect(wireOptional.get());
|
||||||
circuitPanel.repaint();
|
circuitPanel.repaint();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
circuit.findPartByPosition(position).ifPresent(part -> {
|
circuitPanel.getCircuit().findPartByPosition(position).ifPresent(part -> {
|
||||||
switch (event.getButton()) {
|
switch (event.getButton()) {
|
||||||
case BUTTON1:
|
case BUTTON1:
|
||||||
part.action();
|
part.action();
|
||||||
@ -75,7 +72,7 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
@Override
|
@Override
|
||||||
public void mousePressed(final MouseEvent event) {
|
public void mousePressed(final MouseEvent event) {
|
||||||
final Position position = new Position(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) {
|
private void startPartOrJunction(final Part part, final Position position) {
|
||||||
@ -99,14 +96,14 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void findHover(final Position position) {
|
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;
|
junctionHover = partHover != null ? partHover.findJunctionByPosition(position).orElse(null) : null;
|
||||||
if (junctionHover != null) {
|
if (junctionHover != null) {
|
||||||
partHover = null;
|
partHover = null;
|
||||||
wireHover = null;
|
wireHover = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wireHover = circuit.findWireByPosition(position).orElse(null);
|
wireHover = circuitPanel.getCircuit().findWireByPosition(position).orElse(null);
|
||||||
if (wireHover != null) {
|
if (wireHover != null) {
|
||||||
partHover = null;
|
partHover = null;
|
||||||
}
|
}
|
||||||
@ -116,11 +113,11 @@ class CircuitPanelMouseAdapter extends MouseAdapter {
|
|||||||
public void mouseReleased(final MouseEvent event) {
|
public void mouseReleased(final MouseEvent event) {
|
||||||
final Position position = new Position(event);
|
final Position position = new Position(event);
|
||||||
if (partDrag != null) {
|
if (partDrag != null) {
|
||||||
circuit.movePart(partDrag, position);
|
circuitPanel.getCircuit().movePart(partDrag, position);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (junctionDrag != null) {
|
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;
|
partDrag = null;
|
||||||
|
|||||||
@ -17,43 +17,59 @@ public class Sidebar extends JPanel {
|
|||||||
@Setter
|
@Setter
|
||||||
private Runnable repaintCallback = null;
|
private Runnable repaintCallback = null;
|
||||||
|
|
||||||
public Sidebar() {
|
public Sidebar(final Runnable newCircuit, final Runnable doSave) {
|
||||||
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));
|
|
||||||
setPreferredSize(new Dimension(0, 200));
|
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) {
|
@SuppressWarnings("UnusedReturnValue")
|
||||||
final Button button = new Button(label);
|
private Button addToggle(final String label, final Supplier<Boolean> get, final Consumer<Boolean> set) {
|
||||||
button.setPreferredSize(new Dimension(RASTER, RASTER));
|
final Consumer<Button> refresh = button -> {
|
||||||
|
|
||||||
final Runnable toggle = () -> {
|
|
||||||
if (get.get()) {
|
if (get.get()) {
|
||||||
button.setBackground(new Color(128, 255, 128));
|
button.setBackground(new Color(128, 255, 128));
|
||||||
} else {
|
} else {
|
||||||
button.setBackground(new Color(255, 128, 128));
|
button.setBackground(new Color(255, 128, 128));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
toggle.run();
|
final Runnable click = () -> {
|
||||||
|
|
||||||
button.addActionListener(e -> {
|
|
||||||
set.accept(!get.get());
|
set.accept(!get.get());
|
||||||
toggle.run();
|
|
||||||
triggerRepaint();
|
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);
|
add(button);
|
||||||
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void triggerRepaint() {
|
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);
|
final SidebarPart entry = new SidebarPart(part);
|
||||||
add(entry);
|
add(entry);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user