Added handle priorities
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / handles / ComponentHandle.java
1 package net.mograsim.logic.model.editor.handles;
2
3 import java.util.Optional;
4
5 import org.eclipse.swt.SWT;
6 import org.eclipse.swt.widgets.Display;
7
8 import net.haspamelodica.swt.helper.gcs.GeneralGC;
9 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
10 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
11 import net.mograsim.logic.model.editor.Editor;
12 import net.mograsim.logic.model.editor.Editor.ComponentInfo;
13 import net.mograsim.logic.model.model.components.GUIComponent;
14 import net.mograsim.logic.model.serializing.IdentifierGetter;
15
16 public class ComponentHandle extends Handle
17 {
18         public final GUIComponent parent;
19         private final static double POS_OFFSET = 2.0d;
20         private final static double LENGTH_OFFSET = POS_OFFSET * 2;
21         boolean selected = false;
22
23         public ComponentHandle(GUIComponent parent)
24         {
25                 super(4);
26                 this.parent = parent;
27                 Rectangle bounds = parent.getBounds();
28                 setSize(bounds.width, bounds.height);
29                 parent.addComponentResizedListener((c) ->
30                 {
31                         Rectangle pBounds = c.getBounds();
32                         setSize(pBounds.width, pBounds.height);
33                 });
34                 moveTo(parent.getPosX(), parent.getPosY());
35         }
36
37         @Override
38         protected void moveTo(double x, double y)
39         {
40                 super.moveTo(x, y);
41                 parent.moveTo(x, y);
42         }
43
44         @Override
45         protected void render(GeneralGC gc)
46         {
47                 if (selected)
48                 {
49                         gc.setLineWidth(2);
50                         gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
51                         Rectangle bounds = getBounds();
52                         bounds.x -= POS_OFFSET;
53                         bounds.y -= POS_OFFSET;
54                         bounds.width += LENGTH_OFFSET;
55                         bounds.height += LENGTH_OFFSET;
56                         gc.drawRectangle(bounds);
57                 }
58         }
59
60         @Override
61         public void reqMove(double x, double y)
62         {
63                 moveTo(x, y);
64         }
65
66         @Override
67         public void onSelect()
68         {
69                 selected = true;
70                 callRedrawListeners();
71         }
72
73         @Override
74         public void onDeselect()
75         {
76                 selected = false;
77                 callRedrawListeners();
78         }
79
80         @Override
81         public void reqDelete()
82         {
83                 parent.destroy();
84         }
85
86         @Override
87         public Optional<ComponentInfo> reqCopy(Point refPoint)
88         {
89                 return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y, Editor.getIdentifier(parent),
90                                 parent.getParamsForSerializing(new IdentifierGetter())));
91         }
92
93         @Override
94         public HandleType getType()
95         {
96                 return HandleType.COMPONENT;
97         }
98 }