Improved rendering:
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / wires / WireCrossPoint.java
index b4aaa98..fb161ac 100644 (file)
@@ -1,23 +1,28 @@
 package net.mograsim.logic.ui.model.wires;\r
 \r
-import net.mograsim.logic.ui.ColorHelper;\r
-import net.mograsim.logic.ui.model.ViewModel;\r
-import net.mograsim.logic.ui.model.components.GUIComponent;\r
 import net.haspamelodica.swt.helper.gcs.GeneralGC;\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.types.BitVectorFormatter;\r
 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
+import net.mograsim.logic.ui.ColorHelper;\r
+import net.mograsim.logic.ui.model.ViewModel;\r
+import net.mograsim.logic.ui.model.components.GUIComponent;\r
 \r
 public class WireCrossPoint extends GUIComponent\r
 {\r
        private final Pin pin;\r
+       private final int logicWidth;\r
 \r
+       private final LogicObserver logicObs;\r
        private ReadEnd end;\r
-       private final int logicWidth;\r
 \r
        public WireCrossPoint(ViewModel model, int logicWidth)\r
        {\r
                super(model);\r
+               logicObs = (i) -> requestRedraw();\r
+\r
                this.logicWidth = logicWidth;\r
                setSize(0, 0);\r
                addPin(this.pin = new Pin(this, logicWidth, 0, 0));\r
@@ -33,8 +38,21 @@ public class WireCrossPoint extends GUIComponent
 \r
        public void setLogicModelBinding(ReadEnd end)\r
        {\r
+               deregisterLogicObs(this.end);\r
                this.end = end;\r
-               end.registerObserver((i) -> callComponentLookChangedListeners());\r
+               registerLogicObs(end);\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
        public int getLogicWidth()\r