Improved rendering:
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / wires / WireCrossPoint.java
index 927e4e5..4626280 100644 (file)
@@ -1,23 +1,28 @@
 package net.mograsim.logic.ui.model.wires;
 
-import net.mograsim.logic.ui.ColorHelper;
-import net.mograsim.logic.ui.model.ViewModel;
-import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+import net.mograsim.logic.core.LogicObservable;
+import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.logic.core.wires.Wire.ReadEnd;
+import net.mograsim.logic.ui.ColorHelper;
+import net.mograsim.logic.ui.model.ViewModel;
+import net.mograsim.logic.ui.model.components.GUIComponent;
 
 public class WireCrossPoint extends GUIComponent
 {
        private final Pin pin;
+       private final int logicWidth;
 
+       private final LogicObserver logicObs;
        private ReadEnd end;
-       private final int logicWidth;
 
        public WireCrossPoint(ViewModel model, int logicWidth)
        {
                super(model);
+               logicObs = (i) -> requestRedraw();
+
                this.logicWidth = logicWidth;
                setSize(0, 0);
                addPin(this.pin = new Pin(this, logicWidth, 0, 0));
@@ -33,8 +38,21 @@ public class WireCrossPoint extends GUIComponent
 
        public void setLogicModelBinding(ReadEnd end)
        {
+               deregisterLogicObs(this.end);
                this.end = end;
-               end.registerObserver((i) -> callComponentLookChangedListeners());
+               registerLogicObs(end);
+       }
+
+       private void registerLogicObs(LogicObservable observable)
+       {
+               if (observable != null)
+                       observable.registerObserver(logicObs);
+       }
+
+       private void deregisterLogicObs(LogicObservable observable)
+       {
+               if (observable != null)
+                       observable.deregisterObserver(logicObs);
        }
 
        public int getLogicWidth()