\r
import java.util.ArrayList;\r
import java.util.List;\r
-import java.util.function.Consumer;\r
\r
-import net.mograsim.logic.ui.ColorHelper;\r
-import net.mograsim.logic.ui.model.ViewModel;\r
import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\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
\r
public class GUIWire\r
{\r
private Pin pin2;\r
private double[] path;\r
\r
- private final List<Consumer<? super GUIWire>> wireLookChangedListeners;\r
+ private final List<Runnable> redrawListeners;\r
\r
+ private final LogicObserver logicObs;\r
private ReadEnd end;\r
\r
public GUIWire(ViewModel model, Pin pin1, Pin pin2, Point... path)\r
{\r
+ logicObs = (i) -> callRedrawListeners();\r
this.model = model;\r
this.logicWidth = pin1.logicWidth;\r
if (pin2.logicWidth != pin1.logicWidth)\r
this.pin1 = pin1;\r
this.pin2 = pin2;\r
\r
- wireLookChangedListeners = new ArrayList<>();\r
+ redrawListeners = new ArrayList<>();\r
\r
pin1.addPinMovedListener(p -> pin1Moved());\r
pin2.addPinMovedListener(p -> pin2Moved());\r
Point pos = pin1.getPos();\r
this.path[0] = pos.x;\r
this.path[1] = pos.y;\r
+ callRedrawListeners();\r
}\r
\r
private void pin2Moved()\r
Point pos = pin2.getPos();\r
this.path[this.path.length - 2] = pos.x;\r
this.path[this.path.length - 1] = pos.y;\r
+ callRedrawListeners();\r
}\r
\r
public void destroy()\r
\r
public void setLogicModelBinding(ReadEnd end)\r
{\r
+ deregisterLogicObs(this.end);\r
this.end = end;\r
- end.registerObserver((i) -> callWireLookChangedListeners());\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 Pin getPin1()\r
}\r
\r
// @formatter:off\r
- public void addWireLookChangedListener (Consumer<? super GUIWire> listener) {wireLookChangedListeners.add (listener);}\r
+ public void addRedrawListener (Runnable listener) {redrawListeners .add (listener);}\r
\r
- public void removeWireLookChangedListener(Consumer<? super GUIWire> listener) {wireLookChangedListeners.remove(listener);}\r
+ public void removeRedrawListener(Runnable listener) {redrawListeners .remove(listener);}\r
\r
- private void callWireLookChangedListeners() {wireLookChangedListeners.forEach(l -> l.accept(this));}\r
+ private void callRedrawListeners() {redrawListeners.forEach(l -> l.run());}\r
// @formatter:on\r
\r
}
\ No newline at end of file