Improved rendering:
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / wires / Pin.java
index f3a7802..8c0333a 100644 (file)
@@ -8,6 +8,7 @@ import net.mograsim.logic.ui.model.components.GUIComponent;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 
+//TODO add an ID and/or a name
 public class Pin
 {
        public final GUIComponent component;
@@ -17,6 +18,7 @@ public class Pin
        protected double relY;
 
        private final List<Consumer<? super Pin>> pinMovedListeners;
+       private final List<Runnable> redrawListeners;
 
        public Pin(GUIComponent component, int logicWidth, double relX, double relY)
        {
@@ -26,6 +28,7 @@ public class Pin
                this.relY = relY;
 
                this.pinMovedListeners = new ArrayList<>();
+               this.redrawListeners = new ArrayList<>();
 
                component.addComponentMovedListener(c -> callPinMovedListeners());
        }
@@ -51,18 +54,23 @@ public class Pin
                return new Point(relX + componentBounds.x, relY + componentBounds.y);
        }
 
+       protected void setRelPos(double relX, double relY)
+       {
+               this.relX = relX;
+               this.relY = relY;
+               callPinMovedListeners();
+               callRedrawListeners();
+       }
+
        // @formatter:off
        public void addPinMovedListener   (Consumer<? super Pin> listener){pinMovedListeners.add   (listener);}
+       public void addRedrawListener     (Runnable              listener){redrawListeners  .add   (listener);}
 
        public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
+       public void removeRedrawListener  (Runnable              listener){redrawListeners  .remove(listener);}
 
        private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
+       private void callRedrawListeners  () {redrawListeners  .forEach(l -> l.run   (    ));}
        // @formatter:on
 
-       protected void setRelPos(double relX, double relY)
-       {
-               this.relX = relX;
-               this.relY = relY;
-               callPinMovedListeners();
-       }
 }
\ No newline at end of file