1 package net.mograsim.logic.model.editor.handles;
3 import java.util.Optional;
5 import org.eclipse.swt.SWT;
6 import org.eclipse.swt.widgets.Display;
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;
18 public class ComponentHandle extends Handle
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;
26 public ComponentHandle(LogicModelModifiable model, ModelComponent parent)
31 Rectangle bounds = parent.getBounds();
32 setSize(bounds.width, bounds.height);
33 parent.addComponentResizedListener((c) ->
35 Rectangle pBounds = c.getBounds();
36 setSize(pBounds.width, pBounds.height);
38 moveTo(parent.getPosX(), parent.getPosY());
42 protected void moveTo(double x, double y)
49 protected void render(GeneralGC gc)
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);
70 public void reqMove(double x, double y)
76 public void onSelect()
79 callRedrawListeners();
83 public void onDeselect()
86 callRedrawListeners();
90 public void reqDelete()
92 model.destroyComponent(parent);
96 public Optional<ComponentInfo> reqCopy(Point refPoint)
98 return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y, Editor.getIdentifier(parent),
99 parent.getParamsForSerializingJSON(new IdentifyParams())));
103 public HandleType getType()
105 return HandleType.COMPONENT;