Serializing now serializes everything; among many other things:
[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                 this.parent = parent;
26                 Rectangle bounds = parent.getBounds();
27                 setSize(bounds.width, bounds.height);
28                 parent.addComponentResizedListener((c) ->
29                 {
30                         Rectangle pBounds = c.getBounds();
31                         setSize(pBounds.width, pBounds.height);
32                 });
33                 moveTo(parent.getPosX(), parent.getPosY());
34         }
35
36         @Override
37         protected void moveTo(double x, double y)
38         {
39                 super.moveTo(x, y);
40                 parent.moveTo(x, y);
41         }
42
43         @Override
44         protected void render(GeneralGC gc)
45         {
46                 if (selected)
47                 {
48                         gc.setLineWidth(2);
49                         gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
50                         Rectangle bounds = getBounds();
51                         bounds.x -= POS_OFFSET;
52                         bounds.y -= POS_OFFSET;
53                         bounds.width += LENGTH_OFFSET;
54                         bounds.height += LENGTH_OFFSET;
55                         gc.drawRectangle(bounds);
56                 }
57         }
58
59         @Override
60         public void reqMove(double x, double y)
61         {
62                 moveTo(x, y);
63         }
64
65         @Override
66         public void onSelect()
67         {
68                 selected = true;
69                 callRedrawListeners();
70         }
71
72         @Override
73         public void onDeselect()
74         {
75                 selected = false;
76                 callRedrawListeners();
77         }
78
79         @Override
80         public void reqDelete()
81         {
82                 parent.destroy();
83         }
84
85         @Override
86         public Optional<ComponentInfo> reqCopy(Point refPoint)
87         {
88                 return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y, Editor.getIdentifier(parent),
89                                 parent.getParamsForSerializing(new IdentifierGetter())));
90         }
91
92         @Override
93         public HandleType getType()
94         {
95                 return HandleType.COMPONENT;
96         }
97 }