Implemented things needed for setHighLevelState
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 26 Jun 2019 17:16:31 +0000 (19:16 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 26 Jun 2019 17:19:01 +0000 (19:19 +0200)
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/GUIWire.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java

index b9c8a10..3b909c5 100644 (file)
@@ -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()
index 6e566c4..a852c57 100644 (file)
@@ -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
 
        /**
index be4c327..f960d65 100644 (file)
@@ -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)
index 08b1d42..db6d440 100644 (file)
@@ -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
index c412c56..de5ba4a 100644 (file)
@@ -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