1 package net.mograsim.logic.ui.model.wires;
3 import net.haspamelodica.swt.helper.gcs.GeneralGC;
4 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
5 import net.mograsim.logic.core.LogicObservable;
6 import net.mograsim.logic.core.LogicObserver;
7 import net.mograsim.logic.core.types.BitVectorFormatter;
8 import net.mograsim.logic.core.wires.Wire.ReadEnd;
9 import net.mograsim.logic.ui.ColorHelper;
10 import net.mograsim.logic.ui.model.ViewModel;
11 import net.mograsim.logic.ui.model.components.GUIComponent;
13 public class WireCrossPoint extends GUIComponent
15 private final Pin pin;
16 private final int logicWidth;
18 private final LogicObserver logicObs;
21 public WireCrossPoint(ViewModel model, int logicWidth)
24 logicObs = (i) -> requestRedraw();
26 this.logicWidth = logicWidth;
28 addPin(this.pin = new Pin(this, logicWidth, 0, 0));
32 public void render(GeneralGC gc, Rectangle visibleRegion)
34 Rectangle bounds = getBounds();
35 ColorHelper.executeWithDifferentBackground(gc, BitVectorFormatter.formatAsColor(end),
36 () -> gc.fillOval(bounds.x - 1, bounds.y - 1, 2, 2));
39 public void setLogicModelBinding(ReadEnd end)
41 deregisterLogicObs(this.end);
43 registerLogicObs(end);
46 private void registerLogicObs(LogicObservable observable)
48 if (observable != null)
49 observable.registerObserver(logicObs);
52 private void deregisterLogicObs(LogicObservable observable)
54 if (observable != null)
55 observable.deregisterObserver(logicObs);
58 public int getLogicWidth()