Made formatting uniform - commit for logicui
[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.WireArray;\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<WireArray> connectedWireArrays;\r
18         private final List<Point> wireArrayConnectionPoints;\r
19 \r
20         public GUIMux(int processTime, WireArray out, WireArray select, WireArray... 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<WireArray> connectedWireArraysModifiable = new ArrayList<>();\r
30                 List<Point> wireArrayConnectionPointsModifiable = new ArrayList<>();\r
31 \r
32                 connectedWireArraysModifiable.add(out);\r
33                 wireArrayConnectionPointsModifiable.add(new Point(20, 10 + height / 2));\r
34 \r
35                 connectedWireArraysModifiable.add(select);\r
36                 wireArrayConnectionPointsModifiable.add(new Point(10, 5));\r
37 \r
38                 {\r
39                         connectedWireArraysModifiable.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                                 wireArrayConnectionPointsModifiable.add(new Point(0, inputHeight));\r
44                 }\r
45 \r
46                 this.connectedWireArrays = Collections.unmodifiableList(connectedWireArraysModifiable);\r
47                 this.wireArrayConnectionPoints = Collections.unmodifiableList(wireArrayConnectionPointsModifiable);\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 getConnectedWireArraysCount()\r
64         {\r
65                 return connectedWireArrays.size();\r
66         }\r
67 \r
68         @Override\r
69         public WireArray getConnectedWireArray(int connectionIndex)\r
70         {\r
71                 return connectedWireArrays.get(connectionIndex);\r
72         }\r
73 \r
74         @Override\r
75         public Point getWireArrayConnectionPoint(int connectionI)\r
76         {\r
77                 return wireArrayConnectionPoints.get(connectionI);\r
78         }\r
79 }