From 34fdf0b3a90cc83c66ce09cd72628b975f8925e5 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 30 Aug 2019 10:41:34 +0200 Subject: [PATCH] switch behaves like an input, see #319 --- .../de/neemann/digital/core/element/Keys.java | 5 +++ .../digital/core/switching/Switch.java | 33 ++++++++++++++++--- src/main/resources/lang/lang_de.xml | 4 +++ src/main/resources/lang/lang_en.xml | 3 ++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index cfb5029f1..e9a257504 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -815,4 +815,9 @@ public final class Keys { new Key<>("wireToolTips", false); + /** + * The switch acts as input + */ + public static final Key SWITCH_ACTS_AS_INPUT = + new Key<>("switchActsAsInput", false).setSecondary(); } diff --git a/src/main/java/de/neemann/digital/core/switching/Switch.java b/src/main/java/de/neemann/digital/core/switching/Switch.java index d9eb631ad..d6f0dd4f9 100644 --- a/src/main/java/de/neemann/digital/core/switching/Switch.java +++ b/src/main/java/de/neemann/digital/core/switching/Switch.java @@ -25,10 +25,14 @@ public class Switch implements Element, NodeInterface, Countable { .addAttribute(Keys.BITS) .addAttribute(Keys.LABEL) .addAttribute(Keys.POLES) - .addAttribute(Keys.CLOSED); + .addAttribute(Keys.CLOSED) + .addAttribute(Keys.SWITCH_ACTS_AS_INPUT); private final PlainSwitch[] poles; + private final String label; + private final boolean switchActsAsInput; private boolean closed; + private ObservableValue value; /** * Create a new instance @@ -52,6 +56,8 @@ public class Switch implements Element, NodeInterface, Countable { poles = new PlainSwitch[poleCount]; for (int i = 0; i < poleCount; i++) poles[i] = new PlainSwitch(bits, closed, "A" + (i + 1), "B" + (i + 1)); + label = attr.getLabel(); + switchActsAsInput = attr.get(Keys.SWITCH_ACTS_AS_INPUT); } @Override @@ -79,6 +85,21 @@ public class Switch implements Element, NodeInterface, Countable { @Override public void registerNodes(Model model) { + if (switchActsAsInput && !label.isEmpty()) { + value = new ObservableValue(label, 1); + value.addObserver(new NodeInterface() { + @Override + public ObservableValues getOutputs() { + return value.asList(); + } + + @Override + public void hasChanged() { + setClosed(value.getBool()); + } + }); + model.addInput(new Signal(label, value)); + } } @Override @@ -93,9 +114,13 @@ public class Switch implements Element, NodeInterface, Countable { * @param closed true if closed */ public void setClosed(boolean closed) { - this.closed = closed; - for (PlainSwitch p : poles) - p.setClosed(closed); + if (this.closed != closed) { + if (value != null) + value.setBool(closed); + this.closed = closed; + for (PlainSwitch p : poles) + p.setClosed(closed); + } } /** diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index d8bdcc48a..d683c98ac 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1361,6 +1361,10 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Tutorial beim Start anzeigen Aktiviert das Tutorial. + Schalter verhält sich wie ein Eingang + Wird das Model analysiert, verhält sich der Schalter wie ein Eingang, wobei + "offen" einer '0' und "geschlossen" einer '1' entspricht. + SVG Exporteinstellungen Text im LaTeX-Format Text wird in LaTeX-Notation eingefügt. Inkscape ist für die Weiterverabeitung erforderlich. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index c23ba2193..6d0e91633 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -1347,6 +1347,9 @@ Show Tutorial at Startup Enables the tutorial. + Switch behaves like an input + If the model is analyzed, the switch behaves like an input, where "open" corresponds to '0' and "closed" to '1'. + SVG Export Settings Text in LaTeX notation Text is inserted in LaTeX notation. Inkscape is required for further processing.