1 package era.mi.gui.model.wires;
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.graphics.Color;
6 import era.mi.gui.model.ViewModel;
7 import era.mi.logic.types.Bit;
8 import era.mi.logic.wires.Wire;
9 import net.haspamelodica.swt.helper.gcs.GeneralGC;
10 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
14 private final ViewModel model;
17 private double[] path;
21 public GUIWire(ViewModel model, Pin pin1, Pin pin2, Point... path)
24 this.path = new double[path.length * 2 + 4];
25 for (int srcI = 0, dstI = 2; srcI < path.length; srcI++, dstI += 2)
27 this.path[dstI + 0] = path[srcI].x;
28 this.path[dstI + 1] = path[srcI].y;
31 pin1.addPinMovedListener(p -> pin1Moved());
32 pin2.addPinMovedListener(p -> pin2Moved());
36 model.wireCreated(this);
39 private void pin1Moved()
41 Point pos = pin1.getPos();
46 private void pin2Moved()
48 Point pos = pin2.getPos();
49 this.path[this.path.length - 2] = pos.x;
50 this.path[this.path.length - 1] = pos.y;
55 model.wireDestroyed(this);
58 public void render(GeneralGC gc)
60 Color oldFG = gc.getForeground();
61 gc.setForeground(gc.getDevice().getSystemColor(getSWTColorConstantForWire(wire)));
62 gc.drawPolyline(path);
63 gc.setForeground(oldFG);
66 public void setLogicModelWire(Wire wire)
71 public static int getSWTColorConstantForWire(Wire wire)
73 if (wire != null && wire.length == 1)
74 return getSWTColorConstantForBit(wire.getValue());
76 return SWT.COLOR_BLACK;
79 public static int getSWTColorConstantForBit(Bit bit)
84 return SWT.COLOR_GREEN;
86 return SWT.COLOR_BLUE;
88 return SWT.COLOR_BLACK;
93 throw new IllegalArgumentException("Unknown enum constant: " + bit);