X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fhandles%2FWirePointHandle.java;fp=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fhandles%2FWirePointHandle.java;h=2947535fb70cfec4989553676c07c8a7ffdf7c3e;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/WirePointHandle.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java new file mode 100644 index 00000000..2947535f --- /dev/null +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/handles/WirePointHandle.java @@ -0,0 +1,89 @@ +package net.mograsim.logic.model.editor.handles; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.mograsim.logic.core.wires.CoreWire; +import net.mograsim.logic.model.model.wires.ModelWire; + +public class WirePointHandle extends Handle +{ + private final static int END_OFFSET = 4; + private final HandleManager manager; + private boolean selected = false; + public final ModelWire parent; + + private int pointIndex; + + public WirePointHandle(HandleManager manager, ModelWire parent, int pointIndex) + { + super(3); + this.manager = manager; + this.parent = parent; + this.pointIndex = pointIndex; + setSize(END_OFFSET, END_OFFSET); + Point pathPoint = parent.getPathPoint(pointIndex); + moveTo(pathPoint.x, pathPoint.y); + } + + void updatePos() + { + Point p = parent.getPathPoint(pointIndex); + moveTo(p.x, p.y); + callRedrawListeners(); + } + + @Override + public void render(GeneralGC gc) + { + gc.setLineWidth(1.0); + gc.setForeground(Display.getDefault().getSystemColor(selected ? SWT.COLOR_YELLOW : SWT.COLOR_BLUE)); + gc.drawLine(getPosX(), getPosY(), getPosX() + END_OFFSET, getPosY() + END_OFFSET); + } + + @Override + public void reqMove(double x, double y) + { + parent.setPathPoint(new Point(x, y), pointIndex); + } + + @Override + public void onSelect() + { + selected = true; + callRedrawListeners(); + } + + @Override + public void onDeselect() + { + selected = false; + callRedrawListeners(); + } + + @Override + public void reqDelete() + { + manager.destroyWirePointHandle(parent, this); + } + + @Override + public HandleType getType() + { + return HandleType.WIRE_POINT; + } + + /** + * Sets the index of the {@link Point} within the parent {@link CoreWire}s path that is controlled by this handle + * + * @param index Index of the Point in the Wires path. + * @throws IndexOutOfBoundsException + */ + public void setIndex(int index) + { + this.pointIndex = index; + updatePos(); + } +}