Improved GUIManualSwitch
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / components / GUIManualSwitch.java
index 486639e..0d418ce 100644 (file)
@@ -6,6 +6,8 @@ import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;\r
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
+import net.mograsim.logic.core.LogicObservable;\r
+import net.mograsim.logic.core.LogicObserver;\r
 import net.mograsim.logic.core.components.ManualSwitch;\r
 import net.mograsim.logic.core.types.BitVectorFormatter;\r
 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
@@ -18,12 +20,15 @@ public class GUIManualSwitch extends GUIComponent
 \r
        private final Pin outputPin;\r
 \r
+       private final LogicObserver logicObs;\r
        private ManualSwitch logicSwitch;\r
        private ReadEnd end;\r
 \r
        public GUIManualSwitch(ViewModel model)\r
        {\r
                super(model);\r
+               logicObs = (i) -> callComponentLookChangedListeners();\r
+\r
                setSize(width, height);\r
                addPin(this.outputPin = new Pin(this, 1, width, height / 2));\r
        }\r
@@ -34,6 +39,7 @@ public class GUIManualSwitch extends GUIComponent
                double posX = getBounds().x;\r
                double posY = getBounds().y;\r
 \r
+               // TODO maybe draw switch state too?\r
                gc.drawRectangle(posX, posY, width, height);\r
                String label = BitVectorFormatter.formatValueAsString(end);\r
                Font oldFont = gc.getFont();\r
@@ -46,10 +52,24 @@ public class GUIManualSwitch extends GUIComponent
 \r
        public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)\r
        {\r
+               deregisterLogicObs(this.end);\r
+               deregisterLogicObs(this.logicSwitch);\r
                this.logicSwitch = logicSwitch;\r
                this.end = end;\r
-               // TODO when ManualSwitch supports it, add listeners\r
-               end.registerObserver((i) -> callComponentLookChangedListeners());\r
+               registerLogicObs(end);\r
+               registerLogicObs(logicSwitch);\r
+       }\r
+\r
+       private void registerLogicObs(LogicObservable observable)\r
+       {\r
+               if (observable != null)\r
+                       observable.registerObserver(logicObs);\r
+       }\r
+\r
+       private void deregisterLogicObs(LogicObservable observable)\r
+       {\r
+               if (observable != null)\r
+                       observable.deregisterObserver(logicObs);\r
        }\r
 \r
        @Override\r