Merge branch 'development' of
[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
15 public class ComponentHandle extends Handle
16 {
17         public final GUIComponent parent;
18         private final static double POS_OFFSET = 2.0d;
19         private final static double LENGTH_OFFSET = POS_OFFSET * 2;
20         boolean selected = false;
21
22         public ComponentHandle(GUIComponent parent)
23         {
24                 this.parent = parent;
25                 Rectangle bounds = parent.getBounds();
26                 setSize(bounds.width, bounds.height);
27                 parent.addComponentResizedListener((c) ->
28                 {
29                         Rectangle pBounds = c.getBounds();
30                         setSize(pBounds.width, pBounds.height);
31                 });
32                 moveTo(parent.getPosX(), parent.getPosY());
33         }
34         
35         @Override
36         protected void moveTo(double x, double y)
37         {
38                 super.moveTo(x, y);
39                 parent.moveTo(x, y);
40         }
41
42         @Override
43         protected void render(GeneralGC gc)
44         {
45                 if (selected)
46                 {
47                         gc.setLineWidth(2);
48                         gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
49                         Rectangle bounds = getBounds();
50                         bounds.x -= POS_OFFSET;
51                         bounds.y -= POS_OFFSET;
52                         bounds.width += LENGTH_OFFSET;
53                         bounds.height += LENGTH_OFFSET;
54                         gc.drawRectangle(bounds);
55                 }
56         }
57
58         @Override
59         public void reqMove(double x, double y)
60         {
61                 moveTo(x, y);
62         }
63
64         @Override
65         public void onSelect()
66         {
67                 selected = true;
68                 callRedrawListeners();
69         }
70
71         @Override
72         public void onDeselect()
73         {
74                 selected = false;
75                 callRedrawListeners();
76         }
77         
78         @Override
79         public void reqDelete()
80         {
81                 parent.destroy();
82         }
83
84         @Override
85         public Optional<ComponentInfo> reqCopy(Point refPoint)
86         {
87                 return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y,
88                                 Editor.getIdentifier(parent), parent.getParams()));
89         }
90         
91         @Override
92         public HandleType getType()
93         {
94                 return HandleType.COMPONENT;
95         }
96 }