Common ConnectionPoint interface to simplify many things
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / wires / GUIWire.java
index 08b1d42..5a0579c 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;
@@ -71,37 +73,7 @@ public class GUIWire
         * 
         * @author Daniel Kirschten
         */
-       public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2)
-       {
-               this(model, pin1, pin2, (Point[]) null);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} with automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2)
-       {
-               this(model, pin1, pin2, (Point[]) null);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} with automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2)
-       {
-               this(model, pin1, pin2, (Point[]) null);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} with automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2)
+       public GUIWire(ViewModelModifiable model, ConnectionPoint pin1, ConnectionPoint pin2)
        {
                this(model, pin1, pin2, (Point[]) null);
        }
@@ -111,7 +83,7 @@ public class GUIWire
         * 
         * @author Daniel Kirschten
         */
-       public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, WireCrossPoint pin2, Point... path)
+       public GUIWire(ViewModelModifiable model, ConnectionPoint pin1, ConnectionPoint pin2, Point... path)
        {
                this(model, pin1.getPin(), pin2.getPin(), path);
        }
@@ -121,27 +93,7 @@ public class GUIWire
         * 
         * @author Daniel Kirschten
         */
-       public GUIWire(ViewModelModifiable model, WireCrossPoint pin1, Pin pin2, Point... path)
-       {
-               this(model, pin1.getPin(), pin2, path);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} without automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, Pin pin1, WireCrossPoint pin2, Point... path)
-       {
-               this(model, pin1, pin2.getPin(), path);
-       }
-
-       /**
-        * Creates a new {@link GUIWire} without automatic interpolation.
-        * 
-        * @author Daniel Kirschten
-        */
-       public GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path)
+       GUIWire(ViewModelModifiable model, Pin pin1, Pin pin2, Point... path)
        {
                logicObs = (i) -> callRedrawListeners();
                this.model = model;
@@ -308,6 +260,38 @@ public class GUIWire
                        end.registerObserver(logicObs);
        }
 
+       /**
+        * Returns whether this {@link GUIWire} has a logic model binding or not.
+        * 
+        * @author Daniel Kirschten
+        */
+       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}.
+        * 
+        * @author Daniel Kirschten
+        */
+       public void forceWireValues(BitVector values)
+       {
+               end.getWire().forceValues(values);
+       }
+
+       /**
+        * If this {@link GUIWire} has a logic model binding, delegates to {@link ReadEnd#getValues()} for the {@link ReadEnd} corresponding to
+        * this {@link GUIWire}.
+        * 
+        * @author Daniel Kirschten
+        */
+       public BitVector getWireValues()
+       {
+               return end.getValues();
+       }
+
        // listeners
 
        // @formatter:off