2947535fb70cfec4989553676c07c8a7ffdf7c3e
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / handles / WirePointHandle.java
1 package net.mograsim.logic.model.editor.handles;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Display;
5
6 import net.haspamelodica.swt.helper.gcs.GeneralGC;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
8 import net.mograsim.logic.core.wires.CoreWire;
9 import net.mograsim.logic.model.model.wires.ModelWire;
10
11 public class WirePointHandle extends Handle
12 {
13         private final static int END_OFFSET = 4;
14         private final HandleManager manager;
15         private boolean selected = false;
16         public final ModelWire parent;
17
18         private int pointIndex;
19
20         public WirePointHandle(HandleManager manager, ModelWire parent, int pointIndex)
21         {
22                 super(3);
23                 this.manager = manager;
24                 this.parent = parent;
25                 this.pointIndex = pointIndex;
26                 setSize(END_OFFSET, END_OFFSET);
27                 Point pathPoint = parent.getPathPoint(pointIndex);
28                 moveTo(pathPoint.x, pathPoint.y);
29         }
30
31         void updatePos()
32         {
33                 Point p = parent.getPathPoint(pointIndex);
34                 moveTo(p.x, p.y);
35                 callRedrawListeners();
36         }
37
38         @Override
39         public void render(GeneralGC gc)
40         {
41                 gc.setLineWidth(1.0);
42                 gc.setForeground(Display.getDefault().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_BLUE));
43                 gc.drawLine(getPosX(), getPosY(), getPosX() + END_OFFSET, getPosY() + END_OFFSET);
44         }
45
46         @Override
47         public void reqMove(double x, double y)
48         {
49                 parent.setPathPoint(new Point(x, y), pointIndex);
50         }
51
52         @Override
53         public void onSelect()
54         {
55                 selected = true;
56                 callRedrawListeners();
57         }
58
59         @Override
60         public void onDeselect()
61         {
62                 selected = false;
63                 callRedrawListeners();
64         }
65
66         @Override
67         public void reqDelete()
68         {
69                 manager.destroyWirePointHandle(parent, this);
70         }
71
72         @Override
73         public HandleType getType()
74         {
75                 return HandleType.WIRE_POINT;
76         }
77
78         /**
79          * Sets the index of the {@link Point} within the parent {@link CoreWire}s path that is controlled by this handle
80          * 
81          * @param index Index of the Point in the Wires path.
82          * @throws IndexOutOfBoundsException
83          */
84         public void setIndex(int index)
85         {
86                 this.pointIndex = index;
87                 updatePos();
88         }
89 }