Merge branch 'development' of
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / handles / InterfacePinHandle.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.model.model.wires.MovablePin;
9 import net.mograsim.logic.model.model.wires.Pin;
10 import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent;
11
12 public class InterfacePinHandle extends PinHandle
13 {
14         private final static int CIRCLE_DIAM = 4, CIRCLE_RADIUS = CIRCLE_DIAM / 2, SELECTED_CIRCLE_OFFSET = 1,
15                         SELECTED_CIRCLE_DIAM = SELECTED_CIRCLE_OFFSET * 2 + CIRCLE_DIAM;
16         private final MovablePin parent;
17         private final DeserializedSubmodelComponent owner;
18         private boolean selected = false;
19
20         public InterfacePinHandle(MovablePin parent, DeserializedSubmodelComponent pinOwner)
21         {
22                 super();
23                 this.parent = parent;
24                 this.owner = pinOwner;
25                 setSize(CIRCLE_DIAM, CIRCLE_DIAM);
26                 initPos();
27         }
28
29         private void initPos()
30         {
31                 Point pos = parent.getPos();
32                 moveTo(pos.x - CIRCLE_RADIUS, pos.y - CIRCLE_RADIUS);
33         }
34
35         @Override
36         protected void render(GeneralGC gc)
37         {
38                 double x = getPosX(), y = getPosY();
39
40                 gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
41                 gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
42                 gc.drawText(parent.name, x + CIRCLE_DIAM, y + CIRCLE_DIAM, true);
43                 if (selected)
44                 {
45                         gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
46                         gc.drawOval(x - SELECTED_CIRCLE_OFFSET, y - SELECTED_CIRCLE_OFFSET, SELECTED_CIRCLE_DIAM,
47                                         SELECTED_CIRCLE_DIAM);
48                 }
49                 gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
50                 gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
51         }
52
53         @Override
54         public void reqMove(double x, double y)
55         {
56                 moveTo(x, y);
57         }
58
59         @Override
60         public void onSelect()
61         {
62                 selected = true;
63                 callRedrawListeners();
64         }
65
66         @Override
67         public void onDeselect()
68         {
69                 selected = false;
70                 callRedrawListeners();
71         }
72
73         @Override
74         public void reqDelete()
75         {
76                 owner.removeSubmodelInterface(parent.name);
77         }
78         
79         @Override
80         protected void moveTo(double x, double y)
81         {
82                 super.moveTo(x, y);
83                 parent.setRelPos(getCenterX(), getCenterY());
84         }
85
86         @Override
87         public double getCenterX()
88         {
89                 return getPosX() + CIRCLE_RADIUS;
90         }
91
92         @Override
93         public double getCenterY()
94         {
95                 return getPosY() + CIRCLE_RADIUS;
96         }
97
98         @Override
99         public HandleType getType()
100         {
101                 return HandleType.INTERFACE_PIN;
102         }
103
104         @Override
105         public Pin getPin()
106         {
107                 return parent;
108         }
109 }