From 3527de083938ec6ac466a6f83809c49f28096c36 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 26 Nov 2018 11:07:39 +0100 Subject: [PATCH] improved fsm formatting --- .../java/de/neemann/digital/fsm/State.java | 2 +- .../de/neemann/digital/fsm/Transition.java | 4 ++-- .../neemann/digital/fsm/gui/FSMComponent.java | 23 +++++++++++-------- src/main/resources/lang/lang_de.xml | 1 + src/main/resources/lang/lang_en.xml | 1 + 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/de/neemann/digital/fsm/State.java b/src/main/java/de/neemann/digital/fsm/State.java index 5af33c346..ea54abc58 100644 --- a/src/main/java/de/neemann/digital/fsm/State.java +++ b/src/main/java/de/neemann/digital/fsm/State.java @@ -106,7 +106,7 @@ public class State extends Movable { if (getValues() != null && getValues().length() > 0) { pos = pos.add(delta); - gr.drawText(pos, pos.add(new Vector(1, 0)), getValues(), Orientation.CENTERCENTER, Style.NORMAL); + gr.drawText(pos, pos.add(new Vector(1, 0)), getValues(), Orientation.CENTERCENTER, Style.INOUT); } } } diff --git a/src/main/java/de/neemann/digital/fsm/Transition.java b/src/main/java/de/neemann/digital/fsm/Transition.java index cd4b8fa2a..14a32c715 100644 --- a/src/main/java/de/neemann/digital/fsm/Transition.java +++ b/src/main/java/de/neemann/digital/fsm/Transition.java @@ -139,11 +139,11 @@ public class Transition extends Movable { .add(arrowTip) .add(end.add(difTo.sub(lot).mul(0.2f))), arrowStyle); if (condition != null && condition.length() > 0) { - gr.drawText(getPos(), getPos().add(new Vector(1, 0)), condition, Orientation.CENTERCENTER, Style.NORMAL); + gr.drawText(getPos(), getPos().add(new Vector(1, 0)), condition, Orientation.CENTERCENTER, Style.INOUT); } if (getValues() != null && getValues().length() > 0) { VectorFloat pos = getPos().add(new VectorFloat(0, Style.NORMAL.getFontSize())); - gr.drawText(pos, pos.add(new Vector(1, 0)), getValues(), Orientation.CENTERCENTER, Style.NORMAL); + gr.drawText(pos, pos.add(new Vector(1, 0)), Lang.get("fsm_set_N", getValues()), Orientation.CENTERCENTER, Style.INOUT); } } diff --git a/src/main/java/de/neemann/digital/fsm/gui/FSMComponent.java b/src/main/java/de/neemann/digital/fsm/gui/FSMComponent.java index e27b453d2..0967df669 100644 --- a/src/main/java/de/neemann/digital/fsm/gui/FSMComponent.java +++ b/src/main/java/de/neemann/digital/fsm/gui/FSMComponent.java @@ -38,6 +38,7 @@ public class FSMComponent extends JComponent { private static final Key KEY_RADIUS = new Key.KeyInteger("transRad", 70) .setComboBoxValues(50, 70, 90); private static final String DEL_ACTION = "myDelAction"; + private static final int MIN_NEW_TRANS_DIST = 10; private Mouse mouse = Mouse.getMouse(); @@ -47,6 +48,7 @@ public class FSMComponent extends JComponent { private FSM fsm; private Vector lastMousePos; private State newTransitionFromState; + private Vector newTransitionStartPos; /** * Creates a new component @@ -64,7 +66,6 @@ public class FSMComponent extends JComponent { MouseAdapter mouseListener = new MouseAdapter() { private boolean screenDrag; - private Vector newTransitionStartPos; private Vector delta; private Vector pos; @@ -97,7 +98,7 @@ public class FSMComponent extends JComponent { elementMoved = null; if (newTransitionFromState != null) { final Vector posVector = getPosVector(mouseEvent); - if (newTransitionStartPos.sub(posVector).len() > 10) { + if (newTransitionStartPos.sub(posVector).len() > MIN_NEW_TRANS_DIST) { Movable target = fsm.getMovable(posVector); if (target instanceof State) fsm.add(new Transition(newTransitionFromState, (State) target, "")); @@ -316,13 +317,17 @@ public class FSMComponent extends JComponent { fsm.drawTo(gr); if (newTransitionFromState != null) { - VectorFloat d = lastMousePos.sub(newTransitionFromState.getPos()).norm().mul(16f); - VectorFloat a = d.getOrthogonal().norm().mul(8f); - gr.drawPolygon(new Polygon(false) - .add(lastMousePos.sub(d).add(a)) - .add(lastMousePos) - .add(lastMousePos.sub(d).sub(a)), Style.NORMAL); - gr.drawLine(newTransitionFromState.getPos(), lastMousePos.sub(d.mul(0.2f)), Style.NORMAL); + final Vector dif = lastMousePos.sub(newTransitionStartPos); + int max = Math.max(Math.abs(dif.x), Math.abs(dif.y)); + if (max > MIN_NEW_TRANS_DIST) { + VectorFloat d = lastMousePos.sub(newTransitionFromState.getPos()).norm().mul(16f); + VectorFloat a = d.getOrthogonal().norm().mul(8f); + gr.drawPolygon(new Polygon(false) + .add(lastMousePos.sub(d).add(a)) + .add(lastMousePos) + .add(lastMousePos.sub(d).sub(a)), Style.SHAPE_PIN); + gr.drawLine(newTransitionFromState.getPos(), lastMousePos.sub(d.mul(0.2f)), Style.SHAPE_PIN); + } } } diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 246a1b120..7757128b8 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -1759,6 +1759,7 @@ Daher steht auch das Signal 'D_out' zur Verfügung, um in diesem Fall den Wert z keine Bewegung Übergänge Übergänge+Zustände + setze {0} Endlicher Automat Dialog für die Erstellung endlicher Automaten. Erzeugen diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 19dd16df0..acd44f84a 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -1738,6 +1738,7 @@ Therefore, the signal 'D_out' is also available to check the value in this case. no movement Transitions Transitions+States + set {0} Finite State Machine Opens a Dialog to Edit a Finite State Machine. Create