From c4ebd114f44e663624ebbe77ec2560e9ae1b4216 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 19 Mar 2016 14:48:27 +0100 Subject: [PATCH] circuit is centered if opened --- .../java/de/neemann/digital/gui/Main.java | 7 ++++-- .../gui/components/CircuitComponent.java | 23 +++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 9891a9eb0..43bb5f28c 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -52,7 +52,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { circuitComponent = new CircuitComponent(cr, library); String name = prefs.get("name", null); if (name != null) { - loadFile(new File(name)); + SwingUtilities.invokeLater(() -> loadFile(new File(name))); } getContentPane().add(circuitComponent); @@ -199,6 +199,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private void createAndStartModel() { try { + if (modelDescription != null) + modelDescription.highLight(null); circuitComponent.setModeAndReset(CircuitComponent.Mode.running); modelDescription = new ModelDescription(circuitComponent.getCircuit(), library); model = modelDescription.createModel(); @@ -228,7 +230,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private void loadFile(File filename) { XStream xStream = getxStream(); try (FileReader in = new FileReader(filename)) { - circuitComponent.setCircuit((Circuit) xStream.fromXML(in)); + Circuit circuit = (Circuit) xStream.fromXML(in); + circuitComponent.setCircuit(circuit); setFilename(filename); } catch (Exception e) { new ErrorMessage("error writing a file").addCause(e).show(); diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 1839bc948..008912aad 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -33,9 +33,8 @@ public class CircuitComponent extends JComponent implements Observer { private Observer callOnManualChange; public CircuitComponent(Circuit aCircuit, PartLibrary library) { - this.circuit = aCircuit; this.library = library; - setModeAndReset(Mode.part); + setCircuit(aCircuit); KeyStroke delKey = KeyStroke.getKeyStroke("DELETE"); getInputMap().put(delKey, delAction); @@ -151,6 +150,26 @@ public class CircuitComponent extends JComponent implements Observer { public void setCircuit(Circuit circuit) { this.circuit = circuit; + + GraphicMinMax gr = new GraphicMinMax(); + circuit.drawTo(gr); + if (gr.getMin() != null) { + + Vector delta = gr.getMax().sub(gr.getMin()); + double sx = ((double) getWidth()) / delta.x; + double sy = ((double) getHeight()) / delta.y; + double s = Math.min(sx, sy) * 0.8; + + transform.setToScale(s, s); // set Scaling + + Vector center = gr.getMin().add(gr.getMax()).div(2); + transform.translate(-center.x, -center.y); // move drawing center to (0,0) + + Vector dif = new Vector(getWidth(), getHeight()).div(2); + transform.translate(dif.x / s, dif.y / s); // move drawing center to frame center + } else + transform = new AffineTransform(); + setModeAndReset(Mode.part); }