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