X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fhandles%2FComponentHandle.java;fp=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fhandles%2FComponentHandle.java;h=14868e944ff1b684e5cb6f0da63e27692c3f5dbc;hb=7d05144c25daa53e60fc9ed9fd503546a86567f8;hp=0000000000000000000000000000000000000000;hpb=8bed58cd47f4e53a0a83e066d38864aa6875502f;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java new file mode 100644 index 00000000..14868e94 --- /dev/null +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/ComponentHandle.java @@ -0,0 +1,107 @@ +package net.mograsim.logic.model.editor.handles; + +import java.util.Optional; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Font; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.model.editor.Editor.ComponentInfo; +import net.mograsim.logic.model.model.LogicModelModifiable; +import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.serializing.IdentifyParams; + +public class ComponentHandle extends Handle +{ + private final LogicModelModifiable model; + public final ModelComponent parent; + private final static double POS_OFFSET = 2.0d; + private final static double LENGTH_OFFSET = POS_OFFSET * 2; + boolean selected = false; + + public ComponentHandle(LogicModelModifiable model, ModelComponent parent) + { + super(4); + this.model = model; + this.parent = parent; + Rectangle bounds = parent.getBounds(); + setSize(bounds.width, bounds.height); + parent.addComponentResizedListener((c) -> + { + Rectangle pBounds = c.getBounds(); + setSize(pBounds.width, pBounds.height); + }); + moveTo(parent.getPosX(), parent.getPosY()); + } + + @Override + protected void moveTo(double x, double y) + { + super.moveTo(x, y); + parent.moveTo(x, y); + } + + @Override + protected void render(GeneralGC gc) + { + if (selected) + { + gc.setLineWidth(2); + gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); + Rectangle bounds = getBounds(); + bounds.x -= POS_OFFSET; + bounds.y -= POS_OFFSET; + bounds.width += LENGTH_OFFSET; + bounds.height += LENGTH_OFFSET; + gc.drawRectangle(bounds); + Font oldFont = gc.getFont(); + gc.setFont(new Font(oldFont.getName(), 5, oldFont.getStyle())); + gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLACK)); + gc.drawText(parent.getName(), bounds.x, bounds.y, true); + gc.setFont(oldFont); + } + } + + @Override + public void reqMove(double x, double y) + { + moveTo(x, y); + } + + @Override + public void onSelect() + { + selected = true; + callRedrawListeners(); + } + + @Override + public void onDeselect() + { + selected = false; + callRedrawListeners(); + } + + @Override + public void reqDelete() + { + model.destroyComponent(parent); + } + + @Override + public Optional reqCopy(Point refPoint) + { + IdentifyParams idParams = new IdentifyParams(); + return Optional.of(new ComponentInfo(parent.getPosX() - refPoint.x, parent.getPosY() - refPoint.y, + parent.getIDForSerializing(idParams), parent.getParamsForSerializingJSON(idParams))); + } + + @Override + public HandleType getType() + { + return HandleType.COMPONENT; + } +} \ No newline at end of file