bf78b76a1ff59475983a19516009fe21b134e187
[Mograsim.git] / LogicUI / src / era / mi / components / gui / GUIMux.java
1 package era.mi.components.gui;\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.WireArray;\r
10 import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
11 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
12 \r
13 public class GUIMux extends Mux implements BasicGUIComponent\r
14 {\r
15         private final double                    height;\r
16         private final List<WireArray>   connectedWireArrays;\r
17         private final List<Point>               wireArrayConnectionPoints;\r
18 \r
19         public GUIMux(int processTime, WireArray out, WireArray select, WireArray... inputs)\r
20         {\r
21                 super(processTime, out, select, inputs);\r
22 \r
23                 double height = inputs.length * 5;\r
24                 if(height < 10)\r
25                         height = 10;\r
26                 this.height = height;\r
27 \r
28                 List<WireArray> connectedWireArraysModifiable = new ArrayList<>();\r
29                 List<Point> wireArrayConnectionPointsModifiable = new ArrayList<>();\r
30 \r
31                 connectedWireArraysModifiable.add(out);\r
32                 wireArrayConnectionPointsModifiable.add(new Point(20, 10 + height / 2));\r
33 \r
34                 connectedWireArraysModifiable.add(select);\r
35                 wireArrayConnectionPointsModifiable.add(new Point(10, 5));\r
36 \r
37                 {\r
38                         connectedWireArraysModifiable.addAll(Arrays.asList(inputs));\r
39                         double inputHeightIncrement = (height + 20) / inputs.length;\r
40                         double inputHeight = inputHeightIncrement / 2;\r
41                         for(int i = 0; i < inputs.length; i ++, inputHeight += inputHeightIncrement)\r
42                                 wireArrayConnectionPointsModifiable.add(new Point(0, inputHeight));\r
43                 }\r
44 \r
45                 this.connectedWireArrays = Collections.unmodifiableList(connectedWireArraysModifiable);\r
46                 this.wireArrayConnectionPoints = Collections.unmodifiableList(wireArrayConnectionPointsModifiable);\r
47         }\r
48         @Override\r
49         public void render(GeneralGC gc)\r
50         {\r
51                 gc.drawPolygon(new double[] {\r
52                                 0, 0,\r
53                                 20, 10,\r
54                                 20, height + 10,\r
55                                 0, height + 20});\r
56         }\r
57         @Override\r
58         public int getConnectedWireArraysCount()\r
59         {\r
60                 return connectedWireArrays.size();\r
61         }\r
62         @Override\r
63         public WireArray getConnectedWireArray(int connectionIndex)\r
64         {\r
65                 return connectedWireArrays.get(connectionIndex);\r
66         }\r
67         @Override\r
68         public Point getWireArrayConnectionPoint(int connectionI)\r
69         {\r
70                 return wireArrayConnectionPoints.get(connectionI);\r
71         }\r
72 }