X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fstates%2FCreateWireState.java;fp=plugins%2Fnet.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2Fstates%2FCreateWireState.java;h=1c06c52e378b4634f4366af0549f1db7f7f4cff8;hb=7d05144c25daa53e60fc9ed9fd503546a86567f8;hp=0000000000000000000000000000000000000000;hpb=8bed58cd47f4e53a0a83e066d38864aa6875502f;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java new file mode 100644 index 00000000..1c06c52e --- /dev/null +++ b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java @@ -0,0 +1,85 @@ +package net.mograsim.logic.model.editor.states; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer; +import net.mograsim.logic.model.editor.Editor; +import net.mograsim.logic.model.editor.handles.PinHandle; +import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo; + +public class CreateWireState extends EditorState +{ + private final PinHandle origin; + private double mX, mY; + private ZoomedRenderer drawLine; + + public CreateWireState(Editor session, StateManager manager, PinHandle origin) + { + super(session, manager); + this.origin = origin; + mX = origin.getCenterX(); + mY = origin.getCenterY(); + } + + @Override + public void mouseMoved(double x, double y) + { + this.mX = x; + this.mY = y; + editor.gui.logicCanvas.redraw(); + } + + @Override + public void onEntry() + { + editor.getSelection().clear(); + drawLine = gc -> + { + gc.setLineWidth(1); + gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)); + gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY); + }; + editor.gui.logicCanvas.addZoomedRenderer(drawLine); + editor.gui.logicCanvas.redraw(); + } + + @Override + public void onExit() + { + editor.gui.logicCanvas.removeZoomedRenderer(drawLine); + editor.gui.logicCanvas.redraw(); + } + + @Override + public boolean clickedHandle(HandleClickInfo handleClickInfo) + { + switch (handleClickInfo.clicked.getType()) + { + case INTERFACE_PIN: + case STATIC_PIN: + try + { + editor.addWire(origin, (PinHandle) handleClickInfo.clicked); + } + catch (IllegalArgumentException e) + { + Shell tmp = new Shell(Display.getCurrent()); + editor.dialogManager.openWarningDialog("Warning!", e.getMessage()); + tmp.dispose(); + } + break; + default: + return false; + } + return true; + } + + @Override + public void clicked(Point clicked, int stateMask) + { + manager.setState(new SelectionState(editor, manager)); + } +}