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.ViewModelModifiable;
+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)
+ public WireCrossPoint(ViewModelModifiable model, int logicWidth)
{
super(model);
+ logicObs = (i) -> requestRedraw();
+
this.logicWidth = logicWidth;
setSize(0, 0);
addPin(this.pin = new Pin(this, logicWidth, 0, 0));
public void setLogicModelBinding(ReadEnd end)
{
+ deregisterLogicObs(this.end);
this.end = end;
- end.addObserver((i, o) -> 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()