auto save

This commit is contained in:
Patrick Haßel 2024-05-23 11:27:37 +02:00
parent 0eb53de222
commit b7954b7459
6 changed files with 21 additions and 27 deletions

View File

@ -1,6 +1,5 @@
package de.ph87.electro; package de.ph87.electro;
import de.ph87.electro.circuit.CircuitIOService;
import de.ph87.electro.circuit.CircuitPanel; import de.ph87.electro.circuit.CircuitPanel;
import de.ph87.electro.sidebar.Sidebar; import de.ph87.electro.sidebar.Sidebar;
@ -18,7 +17,7 @@ public class Window extends JFrame {
setExtendedState(MAXIMIZED_BOTH); setExtendedState(MAXIMIZED_BOTH);
final CircuitPanel circuitPanel = new CircuitPanel(); final CircuitPanel circuitPanel = new CircuitPanel();
final Sidebar sidebar = new Sidebar(circuitPanel::newCircuit, () -> CircuitIOService.save(circuitPanel.getCircuit())); final Sidebar sidebar = new Sidebar(circuitPanel::newCircuit, circuitPanel.getCircuit()::save);
final JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sidebar, circuitPanel); final JSplitPane splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sidebar, circuitPanel);
sidebar.setRepaintCallback(circuitPanel::repaint); sidebar.setRepaintCallback(circuitPanel::repaint);

View File

@ -29,10 +29,6 @@ public class Circuit {
private final List<Wire> wires = new ArrayList<>(); private final List<Wire> wires = new ArrayList<>();
@Setter
@Getter
private boolean dirty = false;
@Setter @Setter
@Getter @Getter
private File file = null; private File file = null;
@ -88,13 +84,17 @@ public class Circuit {
} }
verifyFree(position); verifyFree(position);
part.setPosition(position); part.setPosition(position);
dirty = true; evaluate();
} }
public void evaluate() { public void evaluate() {
dirty = true;
Calculation.calculate(this); Calculation.calculate(this);
parts.forEach(Part::render); parts.forEach(Part::render);
save();
}
public void save() {
CircuitIOService.save(this);
} }
private void verifyFree(final Position position) { private void verifyFree(final Position position) {

View File

@ -15,9 +15,6 @@ public class CircuitIOService {
private static final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules(); private static final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules();
public static void save(final Circuit circuit) { public static void save(final Circuit circuit) {
if (!circuit.isDirty()) {
return;
}
if (circuit.getFile() == null) { if (circuit.getFile() == null) {
circuit.setFile(new File("./data/%s.json".formatted(circuit.getCreated()))); circuit.setFile(new File("./data/%s.json".formatted(circuit.getCreated())));
} }
@ -26,7 +23,6 @@ public class CircuitIOService {
log.info("Directory created: {}", circuit.getFile().getParent()); log.info("Directory created: {}", circuit.getFile().getParent());
} }
CircuitIOService.serialize(circuit, new FileOutputStream(circuit.getFile())); CircuitIOService.serialize(circuit, new FileOutputStream(circuit.getFile()));
circuit.setDirty(false);
} catch (IOException e) { } catch (IOException e) {
log.error(e.toString()); log.error(e.toString());
} }

View File

@ -1,7 +1,5 @@
package de.ph87.electro.circuit; package de.ph87.electro.circuit;
import de.ph87.electro.circuit.part.parts.Battery;
import de.ph87.electro.circuit.part.parts.Light;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -9,7 +7,6 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
import static de.ph87.electro.circuit.CircuitPainter.paintCircuit; import static de.ph87.electro.circuit.CircuitPainter.paintCircuit;
import static de.ph87.electro.circuit.part.Position.RST;
@Slf4j @Slf4j
public class CircuitPanel extends JPanel { public class CircuitPanel extends JPanel {
@ -21,11 +18,6 @@ public class CircuitPanel extends JPanel {
public CircuitPanel() { public CircuitPanel() {
new CircuitPanelDropTarget(this); 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)));
circuit.connect(b0.getPlus(), l.getA());
circuit.connect(l.getB(), b1.getMinus());
} }
@Override @Override

View File

@ -77,7 +77,7 @@ public abstract class Part {
public void rotate() { public void rotate() {
orientation = orientation.clockwise(); orientation = orientation.clockwise();
junctions.forEach(Junction::updatePosition); junctions.forEach(Junction::updatePosition);
render(); evaluate();
} }
public void render() { public void render() {

View File

@ -17,16 +17,23 @@ public class Sidebar extends JPanel {
@Setter @Setter
private Runnable repaintCallback = null; private Runnable repaintCallback = null;
public Sidebar(final Runnable newCircuit, final Runnable doSave) { public Sidebar(final Runnable newCircuit, final Runnable save) {
setPreferredSize(new Dimension(0, 200)); setPreferredSize(new Dimension(0, 200));
addButton("Neu", null, newCircuit, new Color(128, 202, 255)); 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("Details", () -> SHOW_WIRE_DETAILS, v -> {
addToggle("Namen", () -> SHOW_JUNCTION_NAMES, v -> SHOW_JUNCTION_NAMES = v); SHOW_WIRE_DETAILS = v;
addToggle("Spannungen", () -> SHOW_JUNCTION_VOLTAGES, v -> SHOW_JUNCTION_VOLTAGES = v); save.run();
});
addToggle("Namen", () -> SHOW_JUNCTION_NAMES, v -> {
SHOW_JUNCTION_NAMES = v;
save.run();
});
addToggle("Spannungen", () -> SHOW_JUNCTION_VOLTAGES, v -> {
SHOW_JUNCTION_VOLTAGES = v;
save.run();
});
addPart(new Battery(null, Position.ZERO)); addPart(new Battery(null, Position.ZERO));
addPart(new ConnectorCorner(null, Position.ZERO)); addPart(new ConnectorCorner(null, Position.ZERO));