From 574254aa17feca74f11512e19d1a82143dc97bdb Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 30 Mar 2016 18:28:29 +0200 Subject: [PATCH] AttributeDialog bound to parent frame --- .../digital/draw/elements/Circuit.java | 5 ++-- .../java/de/neemann/digital/gui/Main.java | 11 +++++---- .../gui/components/AttributeDialog.java | 6 ++--- .../gui/components/CircuitComponent.java | 2 +- .../digital/gui/components/EditorFactory.java | 23 +++++++++++++++---- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/neemann/digital/draw/elements/Circuit.java b/src/main/java/de/neemann/digital/draw/elements/Circuit.java index 740c78750..15139ce2f 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Circuit.java +++ b/src/main/java/de/neemann/digital/draw/elements/Circuit.java @@ -19,6 +19,7 @@ import de.neemann.digital.draw.shapes.ShapeFactory; import de.neemann.digital.gui.components.AttributeDialog; import de.neemann.digital.lang.Lang; +import java.awt.*; import java.io.*; import java.util.ArrayList; import java.util.Iterator; @@ -84,8 +85,8 @@ public class Circuit implements Drawable { return attributes; } - public void editAttributes() { - if (new AttributeDialog(null, ATTR_LIST, getAttributes()).showDialog()) { + public void editAttributes(Component parent) { + if (new AttributeDialog(parent, null, ATTR_LIST, getAttributes()).showDialog()) { if (attributes.isEmpty()) attributes = null; modified(); diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 6a1c0f567..463d186a7 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -62,6 +62,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private File filename; private Model model; private ModelDescription modelDescription; + private boolean modelHasRunningClocks; public Main() { this(null, null, null); @@ -196,7 +197,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { ToolTipAction editAttributes = new ToolTipAction(Lang.get("menu_editAttributes")) { @Override public void actionPerformed(ActionEvent e) { - circuitComponent.getCircuit().editAttributes(); + circuitComponent.getCircuit().editAttributes(Main.this); } }.setToolTip(Lang.get("menu_editAttributes_tt")); @@ -247,9 +248,8 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { ToolTipAction runFast = new ToolTipAction(Lang.get("menu_fast"), iconFast) { @Override public void actionPerformed(ActionEvent e) { - if (model == null) { + if (model == null || modelHasRunningClocks) { createAndStartModel(false); - circuitComponent.setManualChangeObserver(null); if (model.getBreaks().size() != 1 || model.getClocks().size() != 1) { clearModelDescription(); circuitComponent.setModeAndReset(CircuitComponent.Mode.part); @@ -341,10 +341,11 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { model = null; } - private void setModelDescription(ModelDescription md) throws NodeException, PinException { + private void setModelDescription(ModelDescription md, boolean runClock) throws NodeException, PinException { if (modelDescription != null) modelDescription.highLightOff(); + modelHasRunningClocks = runClock; modelDescription = md; if (model != null) @@ -358,7 +359,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { try { circuitComponent.setModeAndReset(CircuitComponent.Mode.running); - setModelDescription(new ModelDescription(circuitComponent.getCircuit(), library)); + setModelDescription(new ModelDescription(circuitComponent.getCircuit(), library), runClock); modelDescription.connectToGui(circuitComponent); if (runClock) diff --git a/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java b/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java index 9a1e09cdf..3d5ca7a7d 100644 --- a/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java @@ -18,8 +18,8 @@ public class AttributeDialog extends JDialog { private final ArrayList editors; private boolean changed = false; - public AttributeDialog(Point pos, ArrayList list, ElementAttributes elementAttributes) { - super((Frame) null, Lang.get("attr_dialogTitle"), true); + public AttributeDialog(Component parent, Point pos, ArrayList list, ElementAttributes elementAttributes) { + super(SwingUtilities.getWindowAncestor(parent), Lang.get("attr_dialogTitle"), ModalityType.APPLICATION_MODAL); setDefaultCloseOperation(DISPOSE_ON_CLOSE); JPanel panel = new JPanel(new DialogLayout()); @@ -91,7 +91,7 @@ public class AttributeDialog extends JDialog { list.add(AttributeKey.Color); list.add(AttributeKey.Signed); ElementAttributes values = new ElementAttributes(); - AttributeDialog d = new AttributeDialog(null, list, values); + AttributeDialog d = new AttributeDialog(null, null, list, values); d.showDialog(); System.out.println(values); } 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 c83b01440..180a150f8 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -339,7 +339,7 @@ public class CircuitComponent extends JComponent implements Observer { if (list.size() > 0) { Point p = new Point(e.getX(), e.getY()); SwingUtilities.convertPointToScreen(p, CircuitComponent.this); - if (new AttributeDialog(p, list, vp.getElementAttributes()).showDialog()) { + if (new AttributeDialog(this, p, list, vp.getElementAttributes()).showDialog()) { circuit.modified(); repaint(); } diff --git a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java index d645d4b61..08980ae9d 100644 --- a/src/main/java/de/neemann/digital/gui/components/EditorFactory.java +++ b/src/main/java/de/neemann/digital/gui/components/EditorFactory.java @@ -5,6 +5,7 @@ import de.neemann.digital.core.element.Rotation; import de.neemann.digital.core.memory.DataField; import de.neemann.digital.lang.Lang; import de.neemann.gui.ErrorMessage; +import de.neemann.gui.ToolTipAction; import javax.swing.*; import java.awt.*; @@ -154,7 +155,7 @@ public final class EditorFactory { @Override public Component getComponent(ElementAttributes attr) { JPanel panel = new JPanel(new FlowLayout()); - panel.add(new JButton(new AbstractAction(Lang.get("btn_edit")) { + panel.add(new ToolTipAction(Lang.get("btn_edit")) { @Override public void actionPerformed(ActionEvent e) { DataEditor de = new DataEditor(panel, data, attr); @@ -162,8 +163,8 @@ public final class EditorFactory { data = de.getDataField(); } } - })); - panel.add(new JButton(new AbstractAction(Lang.get("btn_load")) { + }.createJButton()); + panel.add(new ToolTipAction(Lang.get("btn_load")) { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); @@ -177,7 +178,21 @@ public final class EditorFactory { } } } - })); + }.createJButton()); + panel.add(new ToolTipAction(Lang.get("btn_reload")) { + @Override + public void actionPerformed(ActionEvent e) { + try { + data = new DataField(attr.getFile("lastDataFile")); + } catch (IOException e1) { + new ErrorMessage(Lang.get("msg_errorReadingFile")).addCause(e1).show(panel); + } + } + } + .setActive(attr.getFile("lastDataFile") != null) + .setToolTip(Lang.get("btn_reload_tt")) + .createJButton() + ); return panel; }