From b391377e2c21088523e2a6363b67c08a9beedd0d Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 6 Apr 2016 20:05:39 +0200 Subject: [PATCH] moved settings from menu to a settings dialog --- .../digital/core/element/AttributeKey.java | 6 ++- .../de/neemann/digital/core/memory/ROM.java | 4 +- .../digital/draw/elements/Circuit.java | 2 +- .../neemann/digital/gui/GuiModelObserver.java | 2 +- .../java/de/neemann/digital/gui/Main.java | 48 +++++++++---------- .../gui/components/AttributeDialog.java | 4 ++ src/main/resources/lang/lang_de.properties | 11 +++-- src/main/resources/lang/lang_en.properties | 9 +++- 8 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/element/AttributeKey.java b/src/main/java/de/neemann/digital/core/element/AttributeKey.java index 610e5d3bf..b6397c867 100644 --- a/src/main/java/de/neemann/digital/core/element/AttributeKey.java +++ b/src/main/java/de/neemann/digital/core/element/AttributeKey.java @@ -28,7 +28,11 @@ public class AttributeKey { public static final AttributeKey TermHeight = new AttributeKey<>("termHeight", Lang.get("key_termHeight"), 25); public static final AttributeKey Cycles = new AttributeKeyInteger("Cycles", Lang.get("key_cycles"), 100000).setComboBoxValues(new Integer[]{1000, 10000, 100000, 1000000}); public static final AttributeKey ValueIsProbe = new AttributeKey<>("valueIsProbe", Lang.get("key_valueIsProbe"), false); - public static final AttributeKey ShowList = new AttributeKey<>("showList", Lang.get("key_showList"), false); + public static final AttributeKey ShowListing = new AttributeKey<>("showList", Lang.get("key_showListing"), false); + + public static final AttributeKey ShowDataTable = new AttributeKey<>("showDataTable", Lang.get("key_showDataTable"), false); + public static final AttributeKey ShowDataGraph = new AttributeKey<>("showDataGraph", Lang.get("key_showDataGraph"), false); + public static final AttributeKey StartTimer = new AttributeKey<>("startTimer", Lang.get("key_startTimer"), false); private final String key; private final VALUE def; diff --git a/src/main/java/de/neemann/digital/core/memory/ROM.java b/src/main/java/de/neemann/digital/core/memory/ROM.java index 0b5eb4d7e..ff8a165e9 100644 --- a/src/main/java/de/neemann/digital/core/memory/ROM.java +++ b/src/main/java/de/neemann/digital/core/memory/ROM.java @@ -21,7 +21,7 @@ public class ROM extends Node implements Element { .addAttribute(AttributeKey.Bits) .addAttribute(AttributeKey.AddrBits) .addAttribute(AttributeKey.Label) - .addAttribute(AttributeKey.ShowList) + .addAttribute(AttributeKey.ShowListing) .addAttribute(AttributeKey.Data); private final DataField data; @@ -40,7 +40,7 @@ public class ROM extends Node implements Element { output = new ObservableValue("D", bits, true); data = attr.get(AttributeKey.Data); addrBits = attr.get(AttributeKey.AddrBits); - showList = attr.get(AttributeKey.ShowList); + showList = attr.get(AttributeKey.ShowListing); if (showList) listFile = attr.getFile("lastDataFile"); else 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 76013e2c4..aa023a244 100644 --- a/src/main/java/de/neemann/digital/draw/elements/Circuit.java +++ b/src/main/java/de/neemann/digital/draw/elements/Circuit.java @@ -132,7 +132,7 @@ public class Circuit { * @param parent the parent component */ public void editAttributes(Component parent) { - if (new AttributeDialog(parent, null, ATTR_LIST, getAttributes()).showDialog()) { + if (new AttributeDialog(parent, ATTR_LIST, getAttributes()).showDialog()) { if (attributes.isEmpty()) attributes = null; modified(); diff --git a/src/main/java/de/neemann/digital/gui/GuiModelObserver.java b/src/main/java/de/neemann/digital/gui/GuiModelObserver.java index 78f876405..921ca8343 100644 --- a/src/main/java/de/neemann/digital/gui/GuiModelObserver.java +++ b/src/main/java/de/neemann/digital/gui/GuiModelObserver.java @@ -6,7 +6,7 @@ import de.neemann.digital.core.Observer; import de.neemann.digital.gui.components.CircuitComponent; /** - * This observer is added to the model if rial time timers are started. + * This observer is added to the model if real time timers are started. * Its paints the CircuitComponent after a step is calculated. * It is registered to all elements which visual representation depends on a model value. * This listener method only sets a flag if there was a change. diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index ee8d5da6c..871a3696d 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -1,6 +1,8 @@ package de.neemann.digital.gui; import de.neemann.digital.core.*; +import de.neemann.digital.core.element.AttributeKey; +import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.memory.ROM; import de.neemann.digital.core.wiring.Clock; import de.neemann.digital.draw.elements.Circuit; @@ -11,10 +13,7 @@ import de.neemann.digital.draw.library.ElementLibrary; import de.neemann.digital.draw.model.ModelDescription; import de.neemann.digital.draw.model.RealTimeClock; import de.neemann.digital.draw.shapes.ShapeFactory; -import de.neemann.digital.gui.components.CircuitComponent; -import de.neemann.digital.gui.components.ElementOrderer; -import de.neemann.digital.gui.components.OrderMerger; -import de.neemann.digital.gui.components.ProbeDialog; +import de.neemann.digital.gui.components.*; import de.neemann.digital.gui.components.data.DataSetDialog; import de.neemann.digital.gui.components.listing.ROMListingDialog; import de.neemann.digital.gui.state.State; @@ -41,6 +40,14 @@ import java.util.prefs.Preferences; */ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private static final Preferences PREFS = Preferences.userRoot().node("dig"); + private static final ArrayList ATTR_LIST = new ArrayList<>(); + + static { + ATTR_LIST.add(AttributeKey.ShowDataTable); + ATTR_LIST.add(AttributeKey.ShowDataGraph); + ATTR_LIST.add(AttributeKey.ShowListing); + ATTR_LIST.add(AttributeKey.StartTimer); + } private static final String MESSAGE = Lang.get("message"); private static final Icon ICON_RUN = IconCreator.create("run.gif"); private static final Icon ICON_MICRO = IconCreator.create("micro.gif"); @@ -58,10 +65,6 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private final ToolTipAction doStep; private final ToolTipAction runToBreak; private final ElementLibrary library; - private final JCheckBoxMenuItem runClock; - private final JCheckBoxMenuItem showProbes; - private final JCheckBoxMenuItem showGraph; - private final JCheckBoxMenuItem showListing; private final LibrarySelector librarySelector; private final ShapeFactory shapeFactory; private final SavedListener savedListener; @@ -77,6 +80,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { private State selectState; private State runModelState; private State runModelMicroState; + private ElementAttributes settings = new ElementAttributes(); private Main() { this(null, null, null); @@ -300,23 +304,18 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { } }.setToolTip(Lang.get("menu_speedTest_tt")); - showListing = new JCheckBoxMenuItem(Lang.get("menu_listing")); - showListing.setToolTipText(Lang.get("menu_listing_tt")); - showProbes = new JCheckBoxMenuItem(Lang.get("menu_probe")); - showProbes.setToolTipText(Lang.get("menu_probe_tt")); - showGraph = new JCheckBoxMenuItem(Lang.get("menu_graph")); - showGraph.setToolTipText(Lang.get("menu_graph_tt")); - runClock = new JCheckBoxMenuItem(Lang.get("menu_runClock")); - runClock.setToolTipText(Lang.get("menu_runClock_tt")); + ToolTipAction editRunAttributes = new ToolTipAction(Lang.get("menu_editRunAttributes")) { + @Override + public void actionPerformed(ActionEvent e) { + new AttributeDialog(Main.this, ATTR_LIST, settings).showDialog(); + } + }.setToolTip(Lang.get("menu_editRunAttributes_tt")); run.add(runModelAction.createJMenuItem()); run.add(runModelMicroAction.createJMenuItem()); run.add(doStep.createJMenuItem()); run.add(runToBreak.createJMenuItem()); - run.add(showProbes); - run.add(showGraph); - run.add(showListing); - run.add(runClock); + run.add(editRunAttributes.createJMenuItem()); doStep.setEnabled(false); JToolBar toolBar = new JToolBar(); @@ -371,7 +370,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { @Override public void enter() { super.enter(); - if (createAndStartModel(runClock.isSelected(), ModelEvent.Event.STEP)) + if (createAndStartModel(settings.get(AttributeKey.StartTimer), ModelEvent.Event.STEP)) circuitComponent.setManualChangeObserver(new FullStepObserver(model)); } }); @@ -436,14 +435,13 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave { runToBreak.setEnabled(!runClock && model.isFastRunModel()); List ordering = circuitComponent.getCircuit().getMeasurementOrdering(); - if (showProbes.isSelected()) { + if (settings.get(AttributeKey.ShowDataTable)) new ProbeDialog(this, model, updateEvent, ordering).setVisible(true); - } - if (showGraph.isSelected()) + if (settings.get(AttributeKey.ShowDataGraph)) new DataSetDialog(this, model, updateEvent, ordering).setVisible(true); - if (showListing.isSelected()) + if (settings.get(AttributeKey.ShowListing)) for (ROM rom : model.getRoms()) try { new ROMListingDialog(this, rom).setVisible(true); 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 6f1bd1a8f..d69c63e12 100644 --- a/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/AttributeDialog.java @@ -18,6 +18,10 @@ public class AttributeDialog extends JDialog { private final ArrayList editors; private boolean changed = false; + public AttributeDialog(Component parent, ArrayList list, ElementAttributes elementAttributes) { + this(parent, null, list, elementAttributes); + } + 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); diff --git a/src/main/resources/lang/lang_de.properties b/src/main/resources/lang/lang_de.properties index 5d8caa3b2..50b4e320f 100644 --- a/src/main/resources/lang/lang_de.properties +++ b/src/main/resources/lang/lang_de.properties @@ -31,8 +31,11 @@ key_width=Breite key_cycles=Timeout Zyklen key_termWidth=Zeichen pro Zeile key_termHeight=Zeilen -key_valueIsProbe=Als Messwert anzeigen -key_showList=Zeige Listing an, wenn verf\u00FCgbar +key_valueIsProbe=Als Messwert verwenden +key_showListing=Zeige Listing an, wenn verf\u00FCgbar +key_showDataTable=Zeige Messwertetabelle +key_showDataGraph=Zeige Measurement Graph +key_startTimer=Starte Timer rot_0=0\u00B0 @@ -123,7 +126,7 @@ menu_orderOutputs=Sortieren der Ausg\u00E4nge menu_orderOutputs_tt=Sortiert die Ausg\u00E4nge f\u00FCr die Verwendung als eingebettetes Model menu_orderMeasurements=Sortiert die Messwerte menu_orderMeasurements_tt=Sortiert die Messwerte für die grafische Anzeige und die Tabellenansicht -menu_run=Starten +menu_run=Start menu_run_tt=Startet das Modell menu_step=Schritt menu_step_tt=F\u00FChrt einen Mikroschritt aus @@ -150,6 +153,8 @@ menu_listing=Zeige Listing menu_listing_tt=Zeigt ein ROM-Listing mit der aktuellen Adresse markiert in eine eigenen Fenster an. menu_graph=Messwerte grafisch darstellen menu_graph_tt=Zeigt eine Grafik mit dem Messwerten \u00FCber der Zeit. +menu_editRunAttributes=Simulationseinstellungen +menu_editRunAttributes_tt=Einstellungen f\u00FCr den Start der Simulation menu_about=\u00DCber Digital diff --git a/src/main/resources/lang/lang_en.properties b/src/main/resources/lang/lang_en.properties index b799682d6..970989df6 100644 --- a/src/main/resources/lang/lang_en.properties +++ b/src/main/resources/lang/lang_en.properties @@ -31,8 +31,11 @@ key_width=Width key_cycles=Timeout cycles key_termWidth=Characters per line key_termHeight=Lines -key_valueIsProbe=Is measurment value -key_showList=Show fist file if there +key_valueIsProbe=Use as measurment value +key_showListing=Show list file if available +key_showDataTable=Show measurement values +key_showDataGraph=Show measurement graph +key_startTimer=Start timer rot_0=0\u00B0 rot_90=90\u00B0 @@ -150,6 +153,8 @@ menu_listing=Show Listing menu_listing_tt=Shows a ROM listing with actual position marked in a separate window menu_graph=Show Graph menu_graph_tt=Shows a graph containing the measurement values +menu_editRunAttributes=Simulation Settings +menu_editRunAttributes_tt=Settings used to start the simulation win_saveChanges=Save Changes? win_confirmExit=Confirm Exit!