import net.haspamelodica.swt.helper.swtobjectwrappers.Font;\r
import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
+import net.mograsim.logic.core.LogicObservable;\r
+import net.mograsim.logic.core.LogicObserver;\r
import net.mograsim.logic.core.components.ManualSwitch;\r
import net.mograsim.logic.core.types.BitVectorFormatter;\r
import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
\r
private final Pin outputPin;\r
\r
+ private final LogicObserver logicObs;\r
private ManualSwitch logicSwitch;\r
private ReadEnd end;\r
\r
public GUIManualSwitch(ViewModel model)\r
{\r
super(model);\r
+ logicObs = (i) -> callComponentLookChangedListeners();\r
+\r
setSize(width, height);\r
addPin(this.outputPin = new Pin(this, 1, width, height / 2));\r
}\r
double posX = getBounds().x;\r
double posY = getBounds().y;\r
\r
+ // TODO maybe draw switch state too?\r
gc.drawRectangle(posX, posY, width, height);\r
String label = BitVectorFormatter.formatValueAsString(end);\r
Font oldFont = gc.getFont();\r
\r
public void setLogicModelBinding(ManualSwitch logicSwitch, ReadEnd end)\r
{\r
+ deregisterLogicObs(this.end);\r
+ deregisterLogicObs(this.logicSwitch);\r
this.logicSwitch = logicSwitch;\r
this.end = end;\r
- // TODO when ManualSwitch supports it, add listeners\r
- end.registerObserver((i) -> callComponentLookChangedListeners());\r
+ registerLogicObs(end);\r
+ registerLogicObs(logicSwitch);\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
@Override\r