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