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