BitDisplay, ManualSwitch now Observable. More Docs added in Timeline.
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / wires / WireCrossPoint.java
1 package net.mograsim.logic.ui.model.wires;\r
2 \r
3 import net.mograsim.logic.ui.ColorHelper;\r
4 import net.mograsim.logic.ui.model.ViewModel;\r
5 import net.mograsim.logic.ui.model.components.GUIComponent;\r
6 import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
8 import net.mograsim.logic.core.types.BitVectorFormatter;\r
9 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
10 \r
11 public class WireCrossPoint extends GUIComponent\r
12 {\r
13         private final Pin pin;\r
14 \r
15         private ReadEnd end;\r
16         private final int logicWidth;\r
17 \r
18         public WireCrossPoint(ViewModel model, int logicWidth)\r
19         {\r
20                 super(model);\r
21                 this.logicWidth = logicWidth;\r
22                 setSize(0, 0);\r
23                 addPin(this.pin = new Pin(this, logicWidth, 0, 0));\r
24         }\r
25 \r
26         @Override\r
27         public void render(GeneralGC gc, Rectangle visibleRegion)\r
28         {\r
29                 Rectangle bounds = getBounds();\r
30                 ColorHelper.executeWithDifferentBackground(gc, BitVectorFormatter.formatAsColor(end),\r
31                                 () -> gc.fillOval(bounds.x - 1, bounds.y - 1, 2, 2));\r
32         }\r
33 \r
34         public void setLogicModelBinding(ReadEnd end)\r
35         {\r
36                 this.end = end;\r
37                 end.registerObserver((i) -> callComponentLookChangedListeners());\r
38         }\r
39 \r
40         public int getLogicWidth()\r
41         {\r
42                 return logicWidth;\r
43         }\r
44 \r
45         public Pin getPin()\r
46         {\r
47                 return pin;\r
48         }\r
49 }