refactoring of accelerators, added CTRL+S

This commit is contained in:
hneemann 2017-05-27 10:27:01 +02:00
parent 0da18aee21
commit 193fcc09bf
3 changed files with 47 additions and 41 deletions

View File

@ -431,7 +431,7 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
else else
saveFile(filename, false); saveFile(filename, false);
} }
}; }.setAcceleratorCTRLplus('S');
JMenu export = new JMenu(Lang.get("menu_export")); JMenu export = new JMenu(Lang.get("menu_export"));
export.add(new ExportAction(Lang.get("menu_exportSVG"), "svg", GraphicSVGIndex::new)); export.add(new ExportAction(Lang.get("menu_exportSVG"), "svg", GraphicSVGIndex::new));
@ -584,15 +584,9 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS
edit.add(createSpecialEditMenu()); edit.add(createSpecialEditMenu());
edit.addSeparator(); edit.addSeparator();
JMenuItem copyItem = new JMenuItem(circuitComponent.getCopyAction()); edit.add(circuitComponent.getCopyAction().createJMenuItem());
copyItem.setAccelerator(KeyStroke.getKeyStroke('C', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); edit.add(circuitComponent.getPasteAction().createJMenuItem());
edit.add(copyItem); edit.add(circuitComponent.getRotateAction().createJMenuItem());
JMenuItem pasteItem = new JMenuItem(circuitComponent.getPasteAction());
pasteItem.setAccelerator(KeyStroke.getKeyStroke('V', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
edit.add(pasteItem);
JMenuItem rotateItem = new JMenuItem(circuitComponent.getRotateAction());
rotateItem.setAccelerator(KeyStroke.getKeyStroke('R'));
edit.add(rotateItem);
edit.add(insertAsNew.createJMenuItem()); edit.add(insertAsNew.createJMenuItem());
edit.addSeparator(); edit.addSeparator();
edit.add(editSettings.createJMenuItem()); edit.add(editSettings.createJMenuItem());

View File

@ -72,9 +72,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
private final MouseController mouseRun; private final MouseController mouseRun;
private final MouseControllerInsertCopied mouseInsertList; private final MouseControllerInsertCopied mouseInsertList;
private final Cursor moveCursor; private final Cursor moveCursor;
private final AbstractAction copyAction; private final ToolTipAction copyAction;
private final AbstractAction pasteAction; private final ToolTipAction pasteAction;
private final AbstractAction rotateAction; private final ToolTipAction rotateAction;
private Circuit circuit; private Circuit circuit;
private MouseController activeMouseController; private MouseController activeMouseController;
@ -101,16 +101,14 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
this.library = library; this.library = library;
highLighted = new HashSet<>(); highLighted = new HashSet<>();
rotateAction = new AbstractAction(Lang.get("menu_rotate")) { rotateAction = new ToolTipAction(Lang.get("menu_rotate")) {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
activeMouseController.rotate(); activeMouseController.rotate();
} }
}; }.setActive(false).setAccelerator(KeyStroke.getKeyStroke("R")).enableAcceleratorIn(this);
rotateAction.setEnabled(false);
copyAction = new ToolTipAction(Lang.get("menu_copy")) {
copyAction = new AbstractAction(Lang.get("menu_copy")) {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
ArrayList<Movable> elements = null; ArrayList<Movable> elements = null;
@ -128,10 +126,10 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
activeMouseController.escapePressed(); activeMouseController.escapePressed();
} }
} }
}; }.setActive(false).setAcceleratorCTRLplus('C').enableAcceleratorIn(this);
copyAction.setEnabled(false);
pasteAction = new AbstractAction(Lang.get("menu_paste")) {
pasteAction = new ToolTipAction(Lang.get("menu_paste")) {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (!isLocked()) { if (!isLocked()) {
@ -152,7 +150,7 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
} }
} }
} }
}; }.setAcceleratorCTRLplus('P').enableAcceleratorIn(this);
deleteAction = new ToolTipAction(Lang.get("menu_delete"), ICON_DELETE) { deleteAction = new ToolTipAction(Lang.get("menu_delete"), ICON_DELETE) {
@Override @Override
@ -161,35 +159,25 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
} }
}.setToolTip(Lang.get("menu_delete_tt")); }.setToolTip(Lang.get("menu_delete_tt"));
Action escapeAction = new AbstractAction() { new ToolTipAction("Escape") {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
activeMouseController.escapePressed(); activeMouseController.escapePressed();
} }
}; }.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)).enableAcceleratorIn(this);
AbstractAction programAction = new AbstractAction(Lang.get("menu_programDiode")) { new ToolTipAction(Lang.get("menu_programDiode")) {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (activeMouseController instanceof MouseControllerNormal) { if (activeMouseController instanceof MouseControllerNormal) {
programElementAt(getPosVector(lastMousePos.x, lastMousePos.y)); programElementAt(getPosVector(lastMousePos.x, lastMousePos.y));
} }
} }
}; }.setAccelerator(KeyStroke.getKeyStroke("P")).enableAcceleratorIn(this);
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ESC_ACTION);
getActionMap().put(ESC_ACTION, escapeAction);
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), DEL_ACTION); getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), DEL_ACTION);
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), DEL_ACTION); getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), DEL_ACTION);
getActionMap().put(DEL_ACTION, deleteAction); getActionMap().put(DEL_ACTION, deleteAction);
getInputMap().put(KeyStroke.getKeyStroke('C', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "myCopy");
getActionMap().put("myCopy", copyAction);
getInputMap().put(KeyStroke.getKeyStroke('V', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "myPaste");
getActionMap().put("myPaste", pasteAction);
getInputMap().put(KeyStroke.getKeyStroke("R"), "myRotate");
getActionMap().put("myRotate", rotateAction);
getInputMap().put(KeyStroke.getKeyStroke("P"), "myProgram");
getActionMap().put("myProgram", programAction);
setFocusable(true); setFocusable(true);
@ -314,21 +302,21 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
/** /**
* @return the copy action * @return the copy action
*/ */
public AbstractAction getCopyAction() { public ToolTipAction getCopyAction() {
return copyAction; return copyAction;
} }
/** /**
* @return the paste action * @return the paste action
*/ */
public AbstractAction getPasteAction() { public ToolTipAction getPasteAction() {
return pasteAction; return pasteAction;
} }
/** /**
* @return the rotate action * @return the rotate action
*/ */
public AbstractAction getRotateAction() { public ToolTipAction getRotateAction() {
return rotateAction; return rotateAction;
} }

View File

@ -61,7 +61,17 @@ public abstract class ToolTipAction extends AbstractAction {
} }
/** /**
* Sets an accelerator to the item * Sets an accelerator to the action
*
* @param key the accelerator key
* @return this for call chaining
*/
public ToolTipAction setAcceleratorCTRLplus(char key) {
return setAccelerator(KeyStroke.getKeyStroke(key, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
}
/**
* Sets an accelerator to the action
* *
* @param accelerator the accelerator * @param accelerator the accelerator
* @return this for call chaining * @return this for call chaining
@ -71,6 +81,20 @@ public abstract class ToolTipAction extends AbstractAction {
return this; return this;
} }
/**
* enables the accelerator in the given component
*
* @param component the component
* @return this for call chaining
*/
public ToolTipAction enableAcceleratorIn(JComponent component) {
if (accelerator == null)
throw new RuntimeException("no accelerator given");
component.getInputMap().put(accelerator, this);
component.getActionMap().put(this, this);
return this;
}
/** /**
* Sets the activated state for this action * Sets the activated state for this action
* *