diff --git a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java index fa8d44d99..7b326bcbe 100644 --- a/src/main/java/de/neemann/digital/draw/elements/VisualElement.java +++ b/src/main/java/de/neemann/digital/draw/elements/VisualElement.java @@ -333,7 +333,7 @@ public class VisualElement implements Drawable, Movable, AttributeListener { interactor = null; resetShape(); } else - interactor = getShape().applyStateMonitor(ioState, null); + interactor = getShape().applyStateMonitor(ioState); } /** @@ -344,13 +344,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener { * @param pos the position * @param posInComponent position in CircuitComponent * @param modelSync used to access the running model - * @return true if model is changed */ - public boolean elementClicked(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { + public void elementClicked(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { if (interactor != null) - return interactor.clicked(cc, pos, ioState, element, modelSync); - else - return false; + interactor.clicked(cc, pos, ioState, element, modelSync); } /** @@ -361,13 +358,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener { * @param pos the position * @param posInComponent position in CircuitComponent * @param modelSync used to access the running model - * @return true if model is changed */ - public boolean elementPressed(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { + public void elementPressed(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { if (interactor != null) - return interactor.pressed(cc, pos, ioState, element, modelSync); - else - return false; + interactor.pressed(cc, pos, ioState, element, modelSync); } /** @@ -378,13 +372,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener { * @param pos the position * @param posInComponent position in CircuitComponent * @param modelSync used to access the running model - * @return true if model is changed */ - public boolean elementReleased(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { + public void elementReleased(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { if (interactor != null) - return interactor.released(cc, pos, ioState, element, modelSync); - else - return false; + interactor.released(cc, pos, ioState, element, modelSync); } /** @@ -395,13 +386,10 @@ public class VisualElement implements Drawable, Movable, AttributeListener { * @param pos the position * @param posInComponent position in CircuitComponent * @param modelSync used to access the running model - * @return true if model is changed */ - public boolean elementDragged(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { + public void elementDragged(CircuitComponent cc, Point pos, Vector posInComponent, SyncAccess modelSync) { if (interactor != null) - return interactor.dragged(cc, pos, posInComponent, getTransform(), ioState, element, modelSync); - else - return false; + interactor.dragged(cc, pos, posInComponent, getTransform(), ioState, element, modelSync); } diff --git a/src/main/java/de/neemann/digital/draw/shapes/AsyncClockShape.java b/src/main/java/de/neemann/digital/draw/shapes/AsyncClockShape.java index 7abc19954..579dc4129 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/AsyncClockShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/AsyncClockShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -43,7 +42,7 @@ public class AsyncClockShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/BitSelShape.java b/src/main/java/de/neemann/digital/draw/shapes/BitSelShape.java index 4b2ce4a4b..6bffe3fc0 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/BitSelShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/BitSelShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -50,7 +49,7 @@ public class BitSelShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java index a02553c9c..cbb9e4d63 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/BreakShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -51,7 +50,7 @@ public class BreakShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/BusSplitterShape.java b/src/main/java/de/neemann/digital/draw/shapes/BusSplitterShape.java index 88d8e851a..83ce61c7f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/BusSplitterShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/BusSplitterShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.BitsException; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -56,7 +55,7 @@ public class BusSplitterShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ButtonLEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/ButtonLEDShape.java index 91aa6cc47..2dd6d0d04 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ButtonLEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ButtonLEDShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -56,10 +55,10 @@ public class ButtonLEDShape extends ButtonShape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { inputValue = ioState.getInput(0); button = (ButtonLED) ioState.getElement(); - return super.applyStateMonitor(ioState, guiObserver); + return super.applyStateMonitor(ioState); } @Override diff --git a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java index 7ec0b88e3..373605702 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ButtonShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -51,30 +50,25 @@ public class ButtonShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { this.button = (Button) ioState.getElement(); - ioState.getOutput(0).addObserverToValue(guiObserver); return new InteractorInterface() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { } @Override - public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { modelSync.modify(() -> button.setPressed(true)); - return true; } @Override - public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { modelSync.modify(() -> button.setPressed(false)); - return true; } @Override - public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) { } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java index 0334f42d9..835ce91a6 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -56,17 +55,13 @@ public class ClockShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { - ioState.getOutput(0).addObserverToValue(guiObserver); // necessary to replot wires also if component itself does not depend on state + public Interactor applyStateMonitor(IOState ioState) { return new Interactor() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { ObservableValue value = ioState.getOutput(0); - if (value.getBits() == 1) { + if (value.getBits() == 1) modelSync.modify(() -> value.setValue(1 - value.getValue())); - return true; - } - return false; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java index 5c0c540f7..65255cba1 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ConstShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -47,7 +46,7 @@ public class ConstShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java index 89fdc7fbe..8a077bb9c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DILShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DILShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescription; @@ -66,7 +65,7 @@ public class DILShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java index a0d183cfe..e051b5dac 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DataShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DataShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Model; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Signal; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -54,7 +53,7 @@ public class DataShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java b/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java index 0097c1979..0e2dfe4b3 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DelayShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; import de.neemann.digital.draw.elements.Pins; @@ -39,7 +38,7 @@ public class DelayShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java index 0e7dd86db..8317dfeab 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -63,7 +62,7 @@ public class DemuxerShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java index 4c91bf718..3a4ba52de 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeBackwardShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -50,7 +49,7 @@ public class DiodeBackwardShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java index 64820dba7..3c6f78938 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeForewardShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -50,7 +49,7 @@ public class DiodeForewardShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java b/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java index ba900a9c9..6358bde75 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DiodeShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -48,7 +47,7 @@ public class DiodeShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DipSwitchShape.java b/src/main/java/de/neemann/digital/draw/shapes/DipSwitchShape.java index 8c16c0039..eff56cd92 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DipSwitchShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DipSwitchShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.Element; @@ -75,15 +74,13 @@ public class DipSwitchShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getOutput(0).addObserverToValue(guiObserver); return new Interactor() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { ObservableValue value = ioState.getOutput(0); modelSync.modify(() -> value.setValue(1 - value.getValue())); - return true; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java index 22e9de8ed..fff2018ef 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/DriverShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -68,7 +67,7 @@ public class DriverShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/FETShape.java b/src/main/java/de/neemann/digital/draw/shapes/FETShape.java index 77b2fe765..f74a26058 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FETShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FETShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.core.switching.NFET; @@ -49,9 +48,8 @@ public abstract class FETShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { fet = (NFET) ioState.getElement(); - ioState.getInput(0).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java b/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java index 3da53c87f..3eb5d1518 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/FuseShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -63,7 +62,7 @@ public class FuseShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java b/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java index b69e82e69..6f529ed6b 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/GenericShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pin; @@ -195,7 +194,7 @@ public class GenericShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java b/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java index 4df746785..3ec1a3d31 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/GroundShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -41,7 +40,7 @@ public class GroundShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java index aea2c98b7..08ef0f4dc 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java @@ -82,9 +82,8 @@ public class InputShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getOutput(0).addObserverToValue(guiObserver); return new InputInteractor(); } @@ -148,7 +147,7 @@ public class InputShape implements Shape { private long lastValueSet; @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { ObservableValue value = ioState.getOutput(0); if (bits == 1) { modelSync.modify(() -> { @@ -163,7 +162,6 @@ public class InputShape implements Shape { } else value.setValue(1 - value.getValue()); }); - return true; } else { if (dialog == null || !dialog.isVisible()) { Model model = ((In) element).getModel(); @@ -172,18 +170,16 @@ public class InputShape implements Shape { } else dialog.requestFocus(); - return false; } } @Override - public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { isDrag = false; - return false; } @Override - public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) { + public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) { ObservableValue value = ioState.getOutput(0); if (bits > 1 && !value.isHighZ()) { if (!isDrag) { @@ -198,11 +194,9 @@ public class InputShape implements Shape { if (val != lastValueSet) { modelSync.modify(() -> value.setValue(val)); lastValueSet = val; - return true; } } } - return false; } } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/Interactor.java b/src/main/java/de/neemann/digital/draw/shapes/Interactor.java index 942b758aa..ece8bb521 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/Interactor.java +++ b/src/main/java/de/neemann/digital/draw/shapes/Interactor.java @@ -23,17 +23,14 @@ import java.awt.*; public abstract class Interactor implements InteractorInterface { @Override - public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { } @Override - public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { } @Override - public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync) { } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/InteractorInterface.java b/src/main/java/de/neemann/digital/draw/shapes/InteractorInterface.java index df2641498..8cf245641 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/InteractorInterface.java +++ b/src/main/java/de/neemann/digital/draw/shapes/InteractorInterface.java @@ -30,9 +30,8 @@ public interface InteractorInterface { * @param ioState the state of the element * @param element the element which is clicked * @param modelSync used to sync model access - * @return true if model is changed */ - boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); + void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); /** * Called if mouse is pressed on running model @@ -42,9 +41,8 @@ public interface InteractorInterface { * @param ioState the state of the element * @param element the element on which the mouse is pressed * @param modelSync used to sync model access - * @return true if model is changed */ - boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); + void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); /** * Called if mouse is released on running model @@ -54,9 +52,8 @@ public interface InteractorInterface { * @param ioState the state of the element * @param element the element on which the mouse is released * @param modelSync used to sync model access - * @return true if model is changed */ - boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); + void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync); /** * Called if mouse is dragged on running model @@ -68,8 +65,7 @@ public interface InteractorInterface { * @param ioState the state of the element * @param element the element on which the mouse is dragged * @param modelSync used to sync model access - * @return true if model is changed */ - boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync); + void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform transform, IOState ioState, Element element, SyncAccess modelSync); } diff --git a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java index cd7b0c672..9f5252a23 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LEDShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -53,9 +52,8 @@ public class LEDShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getInput(0).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/LayoutShape.java b/src/main/java/de/neemann/digital/draw/shapes/LayoutShape.java index d1e7dd9e6..b29164c70 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LayoutShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LayoutShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.NodeException; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescription; @@ -131,7 +130,7 @@ public class LayoutShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java b/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java index 7e1307694..dc517f72b 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/LightBulbShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -54,9 +53,9 @@ public class LightBulbShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { - aValue = ioState.getInput(0).addObserverToValue(guiObserver); - bValue = ioState.getInput(1).addObserverToValue(guiObserver); + public InteractorInterface applyStateMonitor(IOState ioState) { + aValue = ioState.getInput(0); + bValue = ioState.getInput(1); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java b/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java index 5e5d298d0..75adf4550 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/MissingShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.graphics.Graphic; @@ -40,7 +39,7 @@ public class MissingShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java index c77fc1c90..862263f3f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -58,7 +57,7 @@ public class MuxerShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java index d2ffd9df1..6a4730ba2 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/OutputShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -70,9 +69,8 @@ public class OutputShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getInput(0).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/PinControlShape.java b/src/main/java/de/neemann/digital/draw/shapes/PinControlShape.java index 35c4851ec..afa86dd3f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PinControlShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PinControlShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -48,7 +47,7 @@ public class PinControlShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java index d91b5eca9..1e6637dc5 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -60,9 +59,9 @@ public class PolarityAwareLEDShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { - aValue = ioState.getInput(0).addObserverToValue(guiObserver); - cValue = ioState.getInput(1).addObserverToValue(guiObserver); + public InteractorInterface applyStateMonitor(IOState ioState) { + aValue = ioState.getInput(0); + cValue = ioState.getInput(1); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java index f8b6dc379..d286f830e 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ProbeShape.java @@ -7,7 +7,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.IntFormat; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -52,9 +51,8 @@ public class ProbeShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { inValue = ioState.getInput(0); - inValue.addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java b/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java index 48ca58e3c..864215769 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PullDownShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -52,7 +51,7 @@ public class PullDownShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java b/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java index 7f1538668..b6c7d5279 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PullUpShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -46,7 +45,7 @@ public class PullUpShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java b/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java index 1bfa5db62..31a20bde9 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RAMShape.java @@ -7,7 +7,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Model; import de.neemann.digital.core.NodeException; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.*; import de.neemann.digital.core.memory.DataField; @@ -66,17 +65,16 @@ public class RAMShape extends GenericShape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return new Interactor() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { if (element instanceof RAMInterface) { RAMInterface ram = (RAMInterface) element; DataField dataField = ram.getMemory(); DataEditor dataEditor = new DataEditor(cc, dataField, dataBits, addrBits, true, modelSync, ram.getIntFormat()); dataEditor.showDialog(dialogTitle, model); } - return false; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RGBLEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/RGBLEDShape.java index cc067d0aa..78a30ccb9 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RGBLEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RGBLEDShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Bits; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -60,11 +59,8 @@ public class RGBLEDShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getInput(0).addObserverToValue(guiObserver); - ioState.getInput(1).addObserverToValue(guiObserver); - ioState.getInput(2).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RectShape.java b/src/main/java/de/neemann/digital/draw/shapes/RectShape.java index 200a51e73..d35c7210a 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RectShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RectShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -58,7 +57,7 @@ public class RectShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RelayDTShape.java b/src/main/java/de/neemann/digital/draw/shapes/RelayDTShape.java index 6a1b201ab..36c786962 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RelayDTShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RelayDTShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -63,10 +62,8 @@ public class RelayDTShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { relay = (RelayDT) ioState.getElement(); - ioState.getInput(0).addObserverToValue(guiObserver); - ioState.getInput(1).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java b/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java index 5032738d6..681ada9c1 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RelayShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -65,10 +64,8 @@ public class RelayShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { relay = (Relay) ioState.getElement(); - ioState.getInput(0).addObserverToValue(guiObserver); - ioState.getInput(1).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java index 98dd68b88..85d4396eb 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ResetShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -45,7 +44,7 @@ public class ResetShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { //ioState.getOutput(0).addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java b/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java index 4d07b3005..141308135 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/RotEncoderShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -54,31 +53,27 @@ public class RotEncoderShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { - ioState.getOutput(0).addObserverToValue(guiObserver); + public InteractorInterface applyStateMonitor(IOState ioState) { return new InteractorInterface() { private int initialState; private boolean initial; @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { } @Override - public boolean pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void pressed(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { initial = true; - return false; } @Override - public boolean released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { - return false; + public void released(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { } @Override - public boolean dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) { + public void dragged(CircuitComponent cc, Point posOnScreen, Vector pos, Transform trans, IOState ioState, Element element, SyncAccess modelSync) { if (ioState != null) { Vector p = pos.sub(trans.transform(CENTER)); final int dist = p.x * p.x + p.y * p.y; @@ -97,13 +92,11 @@ public class RotEncoderShape implements Shape { ioState.getOutput(0).setBool(a); ioState.getOutput(1).setBool(b); }); - return true; } } } else initial = true; } - return false; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java index 23fdbe7b6..4fe101736 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenSegHexShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; @@ -72,10 +71,8 @@ public class SevenSegHexShape extends SevenShape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { this.ioState = ioState; - ioState.getInput(0).addObserverToValue(guiObserver); - ioState.getInput(1).addObserverToValue(guiObserver); return null; } } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java index b4a436c2e..8d91fba47 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SevenSegShape.java @@ -5,9 +5,7 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.ObservableValue; import de.neemann.digital.core.ObservableValues; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -72,10 +70,8 @@ public class SevenSegShape extends SevenShape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { inputValues = ioState.getInputs(); - for (ObservableValue o : inputValues) - o.addObserverToValue(guiObserver); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/Shape.java b/src/main/java/de/neemann/digital/draw/shapes/Shape.java index 5561139f0..d19f36108 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/Shape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/Shape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.Model; -import de.neemann.digital.core.Observer; import de.neemann.digital.draw.elements.IOState; import de.neemann.digital.draw.elements.Pins; import de.neemann.digital.draw.model.ModelCreator; @@ -29,20 +28,15 @@ public interface Shape extends Drawable, ObservableValueReader { /** * This method call connects the created model element to the shape which represents the model node. - * If the look of the shape depends on an inputs state, the shape has to register the guiObserver - * to all of the inputs ObservableValues it depends on. * To access the actual state while drawing, the Shape needs to store the IOState or the needed inputs * in a member variable. * If the shape returns an interactor, this interactors clicked method is called if the * shape is clicked in running mode. If the shape is not interactive simply return null. * - * @param ioState the state of the element, never null - * @param guiObserver can be used to update the GUI by calling hasChanged, Is maybe null. - * If the shape depends on a signal value, you can add this observer to - * the signal. In this case a repaint is initiated, if the signal changes. + * @param ioState the state of the element, never null * @return The interactor which is used to interact with the shape while the simulation runs. */ - InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver); + InteractorInterface applyStateMonitor(IOState ioState); /** * Allows the shape to make its drawing dependent of the model by registering a Observer to the model. diff --git a/src/main/java/de/neemann/digital/draw/shapes/SixteenShape.java b/src/main/java/de/neemann/digital/draw/shapes/SixteenShape.java index ff4103935..4c4181b59 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SixteenShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SixteenShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.ObservableValue; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.Value; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; @@ -80,9 +79,9 @@ public class SixteenShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { - input = ioState.getInput(0).addObserverToValue(guiObserver); - dp = ioState.getInput(1).addObserverToValue(guiObserver); + public InteractorInterface applyStateMonitor(IOState ioState) { + input = ioState.getInput(0); + dp = ioState.getInput(1); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java index c293eabfd..345149e79 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SplitterShape.java @@ -6,7 +6,6 @@ package de.neemann.digital.draw.shapes; import de.neemann.digital.core.BitsException; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -56,7 +55,7 @@ public class SplitterShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/StepperMotorShape.java b/src/main/java/de/neemann/digital/draw/shapes/StepperMotorShape.java index ec5ba1996..8610d6a52 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/StepperMotorShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/StepperMotorShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.core.io.StepperMotorUnipolar; @@ -57,9 +56,7 @@ public class StepperMotorShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { - for (int i = 0; i < 4; i++) - ioState.getInput(i).addObserver(guiObserver); + public InteractorInterface applyStateMonitor(IOState ioState) { motor = (StepperMotorUnipolar) ioState.getElement(); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SwitchDTShape.java b/src/main/java/de/neemann/digital/draw/shapes/SwitchDTShape.java index c988a832e..32f1de793 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SwitchDTShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SwitchDTShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -64,15 +63,13 @@ public class SwitchDTShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return new Interactor() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { closed = !closed; - if (ioState != null) { + if (ioState != null) modelSync.modify(() -> ((SwitchDT) element).setClosed(closed)); - } - return true; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java b/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java index 2c13b2398..59141c15c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/SwitchShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.SyncAccess; import de.neemann.digital.core.element.Element; import de.neemann.digital.core.element.ElementAttributes; @@ -63,15 +62,13 @@ public class SwitchShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return new Interactor() { @Override - public boolean clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { + public void clicked(CircuitComponent cc, Point pos, IOState ioState, Element element, SyncAccess modelSync) { closed = !closed; - if (ioState != null) { + if (ioState != null) modelSync.modify(() -> ((Switch) element).setClosed(closed)); - } - return true; } }; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java b/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java index 4d91bacdd..d5366d69f 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TestCaseShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -43,7 +42,7 @@ public class TestCaseShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java index 680496f06..217f2c224 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TextShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TextShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -57,7 +56,7 @@ public class TextShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java b/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java index 69bfc325c..1c2a9a819 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TransGateShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.core.switching.TransGate; @@ -65,7 +64,7 @@ public class TransGateShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { transGate = (TransGate) ioState.getElement(); return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java b/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java index 48a3d3f01..8c24f0bd1 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/TunnelShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescription; @@ -46,7 +45,7 @@ public class TunnelShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java b/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java index 61fca8303..230ac2409 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/VDDShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -43,7 +42,7 @@ public class VDDShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/custom/CustomShape.java b/src/main/java/de/neemann/digital/draw/shapes/custom/CustomShape.java index c7176b054..04aa85996 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/custom/CustomShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/custom/CustomShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes.custom; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.PinDescription; import de.neemann.digital.core.element.PinDescriptions; import de.neemann.digital.draw.elements.IOState; @@ -61,7 +60,7 @@ public class CustomShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java index 6377acc19..0c64d0e96 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEEGenericShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes.ieee; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -57,7 +56,7 @@ public abstract class IEEEGenericShape implements Shape { } @Override - public InteractorInterface applyStateMonitor(IOState ioState, Observer guiObserver) { + public InteractorInterface applyStateMonitor(IOState ioState) { return null; } diff --git a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java index c4cfa7171..9fda1fdab 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ieee/IEEENotShape.java @@ -5,7 +5,6 @@ */ package de.neemann.digital.draw.shapes.ieee; -import de.neemann.digital.core.Observer; import de.neemann.digital.core.element.ElementAttributes; import de.neemann.digital.core.element.Keys; import de.neemann.digital.core.element.PinDescriptions; @@ -58,7 +57,7 @@ public class IEEENotShape implements Shape { } @Override - public Interactor applyStateMonitor(IOState ioState, Observer guiObserver) { + public Interactor applyStateMonitor(IOState ioState) { return null; } diff --git a/src/test/java/de/neemann/digital/draw/shapes/SevenSegShapeTest.java b/src/test/java/de/neemann/digital/draw/shapes/SevenSegShapeTest.java index b79a47dad..71d61b6ca 100644 --- a/src/test/java/de/neemann/digital/draw/shapes/SevenSegShapeTest.java +++ b/src/test/java/de/neemann/digital/draw/shapes/SevenSegShapeTest.java @@ -34,7 +34,7 @@ public class SevenSegShapeTest extends TestCase { PinDescriptions inputs = new PinDescriptions(observableValues); SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions()); IOState state = new IOState(observableValues, null, null); - ss.applyStateMonitor(state, null); + ss.applyStateMonitor(state); checkValue(false, ss, 0, a, 0, 1, cc, 0, 1); checkValue(false, ss, 0, a, 0, 1, cc, 1, 1); @@ -95,7 +95,7 @@ public class SevenSegShapeTest extends TestCase { PinDescriptions inputs = new PinDescriptions(observableValues); SevenSegShape ss = new SevenSegShape(attr, inputs, new PinDescriptions()); IOState state = new IOState(observableValues, null, null); - ss.applyStateMonitor(state, null); + ss.applyStateMonitor(state); checkValue(false, ss, 0, a, 0, 1, cc, 0, 1); checkValue(false, ss, 0, a, 0, 1, cc, 1, 1);