Re: How to add a shortcut key to my plugin menu item?

by Puybaret » Wed Nov 02, 2016 3:33 pm

You can add shortcut by binding an instance of KeyStroke with an action that will execute your plugin. The good place to program this should be in the method getActions of your plug-in :

Code: Select all

  public PluginAction [] getActions() {
    final PluginAction pluginAction = new [i]PluginActionClass[/i](...);

    // Create shortcut once Sweet Home 3D window is created
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          // KeyStroke for shortcut Ctrl+Alt+Shift+C (cmd+alt+shift+C under Mac OS X)
          KeyStroke cmdOrCtrlAltShiftC = KeyStroke.getKeyStroke(KeyEvent.VK_C, 
              Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() 
              | KeyEvent.ALT_DOWN_MASK 
              | KeyEvent.SHIFT_DOWN_MASK);
          // Bind shortcut with the key "MY_KEY"
          JComponent homePane = (JComponent)getHomeController().getView();
          String actionKey = "MY_KEY";
          homePane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).
              put(cmdOrCtrlAltShiftC, actionKey);
          // Bind the key "MY_KEY" with an action that will execute the plug-in
          homePane.getActionMap().put(actionKey, new AbstractAction() {
              public void actionPerformed(ActionEvent e) {
                pluginAction.execute();
              }
            });
          
        }
      });

    return new PluginAction [] {pluginAction};
  }
If you want that the shortcut appears beside the menu item of the plug-in, you'll have to find the menu item in the menu bar returned by

Code: Select all

((JFrame)SwingUtilities.getWindowAncestor((JComponent)getHomeController().getView())).
  getJMenuBar();
with [font=courier new]getMenu[/font] then [font=courier new]getMenuComponent[/font] methods. Once you found the right menu item, just call its setAccelerator method.