Made LogicUI compatible with ReadEnd and ReadWriteEnd
[Mograsim.git] / LogicUI / src / era / mi / gui / components / GUINotGate.java
1 package era.mi.gui.components;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \r
7 import era.mi.logic.components.gates.NotGate;\r
8 import era.mi.logic.wires.Wire.ReadEnd;\r
9 import era.mi.logic.wires.Wire.ReadWriteEnd;\r
10 import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
11 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;\r
12 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
13 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
14 \r
15 public class GUINotGate extends NotGate implements BasicGUIComponent\r
16 {\r
17         private static final String LABEL = "\u22651";// >=1\r
18 \r
19         private final List<ReadEnd> connectedWireEnds;\r
20         private final List<Point> WireEndConnectionPoints;\r
21 \r
22         public GUINotGate(int processTime, ReadEnd in, ReadWriteEnd out)\r
23         {\r
24                 super(processTime, in, out);\r
25 \r
26                 List<ReadEnd> connectedWireEndsModifiable = new ArrayList<>();\r
27                 List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();\r
28 \r
29                 connectedWireEndsModifiable.add(in);\r
30                 WireEndConnectionPointsModifiable.add(new Point(0, 5));\r
31 \r
32                 connectedWireEndsModifiable.add(out);\r
33                 WireEndConnectionPointsModifiable.add(new Point(20, 5));\r
34 \r
35                 this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);\r
36                 this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);\r
37         }\r
38 \r
39         @Override\r
40         public Rectangle getBounds()\r
41         {\r
42                 return new Rectangle(0, 0, 20, 10);\r
43         }\r
44 \r
45         @Override\r
46         public void render(GeneralGC gc)\r
47         {\r
48                 gc.drawRectangle(0, 0, 17, 10);\r
49                 Font oldFont = gc.getFont();\r
50                 Font labelFont = new Font(oldFont.getName(), 5, oldFont.getStyle());\r
51                 gc.setFont(labelFont);\r
52                 Point textExtent = gc.textExtent(LABEL);\r
53                 gc.drawText(LABEL, 8.5 - textExtent.x / 2, 5 - textExtent.y / 2, true);\r
54                 gc.setFont(oldFont);\r
55                 gc.drawOval(17, 3.5, 3, 3);\r
56         }\r
57 \r
58         @Override\r
59         public int getConnectedWireEndsCount()\r
60         {\r
61                 return connectedWireEnds.size();\r
62         }\r
63 \r
64         @Override\r
65         public ReadEnd getConnectedWireEnd(int connectionIndex)\r
66         {\r
67                 return connectedWireEnds.get(connectionIndex);\r
68         }\r
69 \r
70         @Override\r
71         public Point getWireEndConnectionPoint(int connectionI)\r
72         {\r
73                 return WireEndConnectionPoints.get(connectionI);\r
74         }\r
75 }