circuit is centered if opened

This commit is contained in:
hneemann 2016-03-19 14:48:27 +01:00
parent 486224e2f0
commit c4ebd114f4
2 changed files with 26 additions and 4 deletions

View File

@ -52,7 +52,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
circuitComponent = new CircuitComponent(cr, library); circuitComponent = new CircuitComponent(cr, library);
String name = prefs.get("name", null); String name = prefs.get("name", null);
if (name != null) { if (name != null) {
loadFile(new File(name)); SwingUtilities.invokeLater(() -> loadFile(new File(name)));
} }
getContentPane().add(circuitComponent); getContentPane().add(circuitComponent);
@ -199,6 +199,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
private void createAndStartModel() { private void createAndStartModel() {
try { try {
if (modelDescription != null)
modelDescription.highLight(null);
circuitComponent.setModeAndReset(CircuitComponent.Mode.running); circuitComponent.setModeAndReset(CircuitComponent.Mode.running);
modelDescription = new ModelDescription(circuitComponent.getCircuit(), library); modelDescription = new ModelDescription(circuitComponent.getCircuit(), library);
model = modelDescription.createModel(); model = modelDescription.createModel();
@ -228,7 +230,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
private void loadFile(File filename) { private void loadFile(File filename) {
XStream xStream = getxStream(); XStream xStream = getxStream();
try (FileReader in = new FileReader(filename)) { try (FileReader in = new FileReader(filename)) {
circuitComponent.setCircuit((Circuit) xStream.fromXML(in)); Circuit circuit = (Circuit) xStream.fromXML(in);
circuitComponent.setCircuit(circuit);
setFilename(filename); setFilename(filename);
} catch (Exception e) { } catch (Exception e) {
new ErrorMessage("error writing a file").addCause(e).show(); new ErrorMessage("error writing a file").addCause(e).show();

View File

@ -33,9 +33,8 @@ public class CircuitComponent extends JComponent implements Observer {
private Observer callOnManualChange; private Observer callOnManualChange;
public CircuitComponent(Circuit aCircuit, PartLibrary library) { public CircuitComponent(Circuit aCircuit, PartLibrary library) {
this.circuit = aCircuit;
this.library = library; this.library = library;
setModeAndReset(Mode.part); setCircuit(aCircuit);
KeyStroke delKey = KeyStroke.getKeyStroke("DELETE"); KeyStroke delKey = KeyStroke.getKeyStroke("DELETE");
getInputMap().put(delKey, delAction); getInputMap().put(delKey, delAction);
@ -151,6 +150,26 @@ public class CircuitComponent extends JComponent implements Observer {
public void setCircuit(Circuit circuit) { public void setCircuit(Circuit circuit) {
this.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); setModeAndReset(Mode.part);
} }