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
saveFile(filename, false);
}
};
}.setAcceleratorCTRLplus('S');
JMenu export = new JMenu(Lang.get("menu_export"));
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.addSeparator();
JMenuItem copyItem = new JMenuItem(circuitComponent.getCopyAction());
copyItem.setAccelerator(KeyStroke.getKeyStroke('C', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
edit.add(copyItem);
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(circuitComponent.getCopyAction().createJMenuItem());
edit.add(circuitComponent.getPasteAction().createJMenuItem());
edit.add(circuitComponent.getRotateAction().createJMenuItem());
edit.add(insertAsNew.createJMenuItem());
edit.addSeparator();
edit.add(editSettings.createJMenuItem());

View File

@ -72,9 +72,9 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
private final MouseController mouseRun;
private final MouseControllerInsertCopied mouseInsertList;
private final Cursor moveCursor;
private final AbstractAction copyAction;
private final AbstractAction pasteAction;
private final AbstractAction rotateAction;
private final ToolTipAction copyAction;
private final ToolTipAction pasteAction;
private final ToolTipAction rotateAction;
private Circuit circuit;
private MouseController activeMouseController;
@ -101,16 +101,14 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
this.library = library;
highLighted = new HashSet<>();
rotateAction = new AbstractAction(Lang.get("menu_rotate")) {
rotateAction = new ToolTipAction(Lang.get("menu_rotate")) {
@Override
public void actionPerformed(ActionEvent e) {
activeMouseController.rotate();
}
};
rotateAction.setEnabled(false);
}.setActive(false).setAccelerator(KeyStroke.getKeyStroke("R")).enableAcceleratorIn(this);
copyAction = new AbstractAction(Lang.get("menu_copy")) {
copyAction = new ToolTipAction(Lang.get("menu_copy")) {
@Override
public void actionPerformed(ActionEvent e) {
ArrayList<Movable> elements = null;
@ -128,10 +126,10 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
activeMouseController.escapePressed();
}
}
};
copyAction.setEnabled(false);
}.setActive(false).setAcceleratorCTRLplus('C').enableAcceleratorIn(this);
pasteAction = new AbstractAction(Lang.get("menu_paste")) {
pasteAction = new ToolTipAction(Lang.get("menu_paste")) {
@Override
public void actionPerformed(ActionEvent e) {
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) {
@Override
@ -161,35 +159,25 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
}
}.setToolTip(Lang.get("menu_delete_tt"));
Action escapeAction = new AbstractAction() {
new ToolTipAction("Escape") {
@Override
public void actionPerformed(ActionEvent e) {
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
public void actionPerformed(ActionEvent e) {
if (activeMouseController instanceof MouseControllerNormal) {
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_BACK_SPACE, 0), DEL_ACTION);
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);
@ -314,21 +302,21 @@ public class CircuitComponent extends JComponent implements Circuit.ChangedListe
/**
* @return the copy action
*/
public AbstractAction getCopyAction() {
public ToolTipAction getCopyAction() {
return copyAction;
}
/**
* @return the paste action
*/
public AbstractAction getPasteAction() {
public ToolTipAction getPasteAction() {
return pasteAction;
}
/**
* @return the rotate action
*/
public AbstractAction getRotateAction() {
public ToolTipAction getRotateAction() {
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
* @return this for call chaining
@ -71,6 +81,20 @@ public abstract class ToolTipAction extends AbstractAction {
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
*