Started restructuring LogicUI
[Mograsim.git] / LogicUI / src / era / mi / gui / model / wires / GUIWire.java
1 package era.mi.gui.model.wires;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.graphics.Color;
5
6 import era.mi.logic.types.Bit;
7 import era.mi.logic.wires.Wire;
8 import net.haspamelodica.swt.helper.gcs.GeneralGC;
9 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
10
11 public class GUIWire
12 {
13         private Pin pin1;
14         private Pin pin2;
15         private double[] path;
16
17         private Wire wire;
18
19         public GUIWire(Runnable redraw, Pin pin1, Pin pin2, Point... path)
20         {
21                 this.path = new double[path.length * 2 + 4];
22                 for (int srcI = 0, dstI = 2; srcI < path.length; srcI++, dstI += 2)
23                 {
24                         this.path[dstI + 0] = path[srcI].x;
25                         this.path[dstI + 1] = path[srcI].y;
26                 }
27                 // TODO support moving pins
28                 Point pos;
29                 pos = pin1.getPos();
30                 this.path[0] = pos.x;
31                 this.path[1] = pos.y;
32                 pos = pin2.getPos();
33                 this.path[this.path.length - 2] = pos.x;
34                 this.path[this.path.length - 1] = pos.y;
35         }
36
37         public void render(GeneralGC gc)
38         {
39                 Color oldFG = gc.getForeground();
40                 gc.setForeground(gc.getDevice().getSystemColor(getSWTColorConstantForWire(wire)));
41                 gc.drawPolyline(path);
42                 gc.setForeground(oldFG);
43         }
44
45         public void setLogicModelWire(Wire wire)
46         {
47                 this.wire = wire;
48         }
49
50         public static int getSWTColorConstantForWire(Wire wire)
51         {
52                 if (wire != null && wire.length == 1)
53                         return getSWTColorConstantForBit(wire.getValue());
54                 else
55                         return SWT.COLOR_BLACK;
56         }
57
58         public static int getSWTColorConstantForBit(Bit bit)
59         {
60                 switch (bit)
61                 {
62                 case ONE:
63                         return SWT.COLOR_GREEN;
64                 case ZERO:
65                         return SWT.COLOR_BLUE;
66                 case Z:
67                         return SWT.COLOR_BLACK;
68                 case U:
69                 case X:
70                         return SWT.COLOR_RED;
71                 default:
72                         throw new IllegalArgumentException("Unknown enum constant: " + bit);
73                 }
74         }
75 }