c615539d72b8379eeee098bc9bbe75519f3860ac
[Mograsim.git] / LogicUI / src / era / mi / gui / components / GUIMux.java
1 package era.mi.gui.components;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Arrays;\r
5 import java.util.Collections;\r
6 import java.util.List;\r
7 \r
8 import era.mi.logic.components.Mux;\r
9 import era.mi.logic.wires.Wire.WireEnd;\r
10 import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
11 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
12 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
13 \r
14 public class GUIMux extends Mux implements BasicGUIComponent\r
15 {\r
16         private final double height;\r
17         private final List<WireEnd> connectedWireEnds;\r
18         private final List<Point> WireEndConnectionPoints;\r
19 \r
20         public GUIMux(int processTime, WireEnd out, WireEnd select, WireEnd... inputs)\r
21         {\r
22                 super(processTime, out, select, inputs);\r
23 \r
24                 double height = inputs.length * 5;\r
25                 if (height < 10)\r
26                         height = 10;\r
27                 this.height = height;\r
28 \r
29                 List<WireEnd> connectedWireEndsModifiable = new ArrayList<>();\r
30                 List<Point> WireEndConnectionPointsModifiable = new ArrayList<>();\r
31 \r
32                 connectedWireEndsModifiable.add(out);\r
33                 WireEndConnectionPointsModifiable.add(new Point(20, 10 + height / 2));\r
34 \r
35                 connectedWireEndsModifiable.add(select);\r
36                 WireEndConnectionPointsModifiable.add(new Point(10, 5));\r
37 \r
38                 {\r
39                         connectedWireEndsModifiable.addAll(Arrays.asList(inputs));\r
40                         double inputHeightIncrement = (height + 20) / inputs.length;\r
41                         double inputHeight = inputHeightIncrement / 2;\r
42                         for (int i = 0; i < inputs.length; i++, inputHeight += inputHeightIncrement)\r
43                                 WireEndConnectionPointsModifiable.add(new Point(0, inputHeight));\r
44                 }\r
45 \r
46                 this.connectedWireEnds = Collections.unmodifiableList(connectedWireEndsModifiable);\r
47                 this.WireEndConnectionPoints = Collections.unmodifiableList(WireEndConnectionPointsModifiable);\r
48         }\r
49 \r
50         @Override\r
51         public Rectangle getBounds()\r
52         {\r
53                 return new Rectangle(0, 0, 20, height + 20);\r
54         }\r
55 \r
56         @Override\r
57         public void render(GeneralGC gc)\r
58         {\r
59                 gc.drawPolygon(new double[] { 0, 0, 20, 10, 20, height + 10, 0, height + 20 });\r
60         }\r
61 \r
62         @Override\r
63         public int getConnectedWireEndsCount()\r
64         {\r
65                 return connectedWireEnds.size();\r
66         }\r
67 \r
68         @Override\r
69         public WireEnd getConnectedWireEnd(int connectionIndex)\r
70         {\r
71                 return connectedWireEnds.get(connectionIndex);\r
72         }\r
73 \r
74         @Override\r
75         public Point getWireEndConnectionPoint(int connectionI)\r
76         {\r
77                 return WireEndConnectionPoints.get(connectionI);\r
78         }\r
79 }