Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[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(2);
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, pos.y);
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, SELECTED_CIRCLE_DIAM);
47                 }
48                 gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
49                 gc.fillOval(getPosX(), getPosY(), CIRCLE_DIAM, CIRCLE_DIAM);
50         }
51
52         @Override
53         public void reqMove(double x, double y)
54         {
55                 moveTo(x, y);
56         }
57
58         @Override
59         public void onSelect()
60         {
61                 selected = true;
62                 callRedrawListeners();
63         }
64
65         @Override
66         public void onDeselect()
67         {
68                 selected = false;
69                 callRedrawListeners();
70         }
71
72         @Override
73         public void reqDelete()
74         {
75                 owner.removeSubmodelInterface(parent.name);
76         }
77
78         @Override
79         protected void moveTo(double x, double y)
80         {
81                 super.moveTo(x - CIRCLE_RADIUS, y - CIRCLE_RADIUS);
82                 parent.setRelPos(getCenterX(), getCenterY());
83         }
84
85         @Override
86         public double getCenterX()
87         {
88                 return getPosX() + CIRCLE_RADIUS;
89         }
90
91         @Override
92         public double getCenterY()
93         {
94                 return getPosY() + CIRCLE_RADIUS;
95         }
96
97         @Override
98         public HandleType getType()
99         {
100                 return HandleType.INTERFACE_PIN;
101         }
102
103         @Override
104         public Pin getPin()
105         {
106                 return parent;
107         }
108 }