From: Daniel Kirschten Date: Wed, 26 Jun 2019 17:16:31 +0000 (+0200) Subject: Implemented things needed for setHighLevelState X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=67c7e16eac6ef555f7ebe0cbe6048598d7f1187e;p=Mograsim.git Implemented things needed for setHighLevelState --- diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java index b9c8a103..3b909c51 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java @@ -6,7 +6,6 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Font; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; -import net.mograsim.logic.core.LogicObservable; import net.mograsim.logic.core.LogicObserver; import net.mograsim.logic.core.components.BitDisplay; import net.mograsim.logic.core.types.BitVectorFormatter; @@ -58,21 +57,16 @@ public class GUIBitDisplay extends GUIComponent public void setLogicModelBinding(BitDisplay bitDisplay) { - deregisterLogicObs(this.bitDisplay); + if (this.bitDisplay != null) + this.bitDisplay.deregisterObserver(logicObs); this.bitDisplay = bitDisplay; - registerLogicObs(bitDisplay); + if (bitDisplay != null) + bitDisplay.registerObserver(logicObs); } - private void registerLogicObs(LogicObservable observable) + public boolean hasLogicModelBinding() { - if (observable != null) - observable.registerObserver(logicObs); - } - - private void deregisterLogicObs(LogicObservable observable) - { - if (observable != null) - observable.deregisterObserver(logicObs); + return bitDisplay != null; } public BitDisplay getBitDisplay() diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java index 6e566c48..a852c57a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java @@ -138,6 +138,14 @@ public abstract class GUIComponent return pin; } + // high-level access + + @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden + public void setHighLevelState(String stateID, Object newState) + { + throw new IllegalArgumentException("No high level state with ID " + stateID); + } + // "graphical" operations /** diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java index be4c3272..f960d652 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java @@ -68,6 +68,11 @@ public class GUIManualSwitch extends GUIComponent registerLogicObs(logicSwitch); } + public boolean hasLogicModelBinding() + { + return logicSwitch != null; + } + private void registerLogicObs(LogicObservable observable) { if (observable != null) diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java index 08b1d42e..db6d4407 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java @@ -10,7 +10,9 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.LogicObserver; +import net.mograsim.logic.core.types.BitVector; import net.mograsim.logic.core.types.BitVectorFormatter; +import net.mograsim.logic.core.wires.Wire; import net.mograsim.logic.core.wires.Wire.ReadEnd; import net.mograsim.logic.ui.ColorHelper; import net.mograsim.logic.ui.model.ViewModelModifiable; @@ -308,6 +310,23 @@ public class GUIWire end.registerObserver(logicObs); } + /** + * Returns whether this {@link GUIWire} has a logic model binding or not. + */ + public boolean hasLogicModelBinding() + { + return end != null; + } + + /** + * If this {@link GUIWire} has a logic model binding, delegates to {@link Wire#forceValues(BitVector)} for the {@link Wire} + * corresponding to this {@link GUIWire}. + */ + public void forceWireValues(BitVector values) + { + end.getWire().forceValues(values); + } + // listeners // @formatter:off diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java index c412c56e..de5ba4ac 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java @@ -95,6 +95,14 @@ public class WireCrossPoint extends GUIComponent end.registerObserver(logicObs); } + /** + * Returns whether this {@link WireCrossPoint} has a logic model binding or not. + */ + public boolean hasLogicModelBinding() + { + return end != null; + } + // serializing @Override