diff --git a/src/main/java/de/neemann/digital/gui/InsertHistory.java b/src/main/java/de/neemann/digital/gui/InsertHistory.java index f6e15e715..31936d818 100644 --- a/src/main/java/de/neemann/digital/gui/InsertHistory.java +++ b/src/main/java/de/neemann/digital/gui/InsertHistory.java @@ -21,6 +21,7 @@ public class InsertHistory implements LibraryListener { private final ElementLibrary library; private final ArrayList wrappers; private int mainTime; + private InsertAction lastInsertAction; /** * Creates a new instance @@ -42,6 +43,7 @@ public class InsertHistory implements LibraryListener { * @param action the action */ public void add(InsertAction action) { + lastInsertAction = action; if (!contains(action)) { WrapperAction wrapper = new WrapperAction(action, bar.getComponentCount()); wrappers.add(wrapper); @@ -82,6 +84,12 @@ public class InsertHistory implements LibraryListener { return false; } + /** + * @return the last insert action + */ + public InsertAction getLastInsertAction() { + return lastInsertAction; + } @Override public void libraryChanged(LibraryNode node) { diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index cc68fc76e..095552228 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -246,6 +246,15 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS } }.setToolTip(Lang.get("menu_help_elements_tt")).createJMenuItem()); + new ToolTipAction("insertLast") { + @Override + public void actionPerformed(ActionEvent actionEvent) { + InsertAction lastInsertAction = insertHistory.getLastInsertAction(); + if (lastInsertAction != null) + lastInsertAction.actionPerformed(actionEvent); + } + }.setAccelerator("L").enableAcceleratorIn(circuitComponent); + enableClockShortcut(); setPreferredSize(Screen.getInstance().scale(new Dimension(1024, 768))); diff --git a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java index 80cc94b57..8c2d988bd 100644 --- a/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java +++ b/src/main/java/de/neemann/digital/gui/components/CircuitComponent.java @@ -636,6 +636,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe } catch (AWTException e) { e.printStackTrace(); } + } else { + mouseInsertElement.updateMousePos(getPosVector(point.x, point.y)); + repaintNeeded(); } } @@ -1173,11 +1176,15 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe @Override void moved(MouseEvent e) { + updateMousePos(getPosVector(e)); + } + + void updateMousePos(Vector pos) { if (delta == null) { GraphicMinMax minMax = element.getMinMax(false); delta = element.getPos().sub(minMax.getMax()); } - element.setPos(raster(getPosVector(e).add(delta))); + element.setPos(raster(pos.add(delta))); repaint(); } @@ -1210,6 +1217,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe public void escapePressed() { mouseNormal.activate(); } + } private final class MouseControllerMoveElement extends MouseController { diff --git a/src/test/resources/docu/static_de.xml b/src/test/resources/docu/static_de.xml index b90df4cab..344aebf55 100644 --- a/src/test/resources/docu/static_de.xml +++ b/src/test/resources/docu/static_de.xml @@ -242,6 +242,7 @@ Kopieren der selektierten Elemente in die Zwischenablage. Einfügen der Elemente aus der Zwischenablage. Beim Einfügen rotieren der Elemente. + Letztes eingefügtes Element noch einmal einfügen. Speichern der Schaltung. Letzte Änderung zurücknehmen. Zurückgenommene Änderung erneut anwenden. diff --git a/src/test/resources/docu/static_en.xml b/src/test/resources/docu/static_en.xml index b4976fcd6..753ad8546 100644 --- a/src/test/resources/docu/static_en.xml +++ b/src/test/resources/docu/static_en.xml @@ -231,6 +231,7 @@ Copys the selected components to the clipboard. Inserts the comonents from the clipboard. While inserting this rotates the components. + Inserts the last inserted component again. Save the circuit. Undo last modification. Redo the last undone modification.