Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I add a key binding for a quickMenu similar to the "Refactor" context menu in JDT?

I want to add a shortcut to my eclipse plugin to show a quick menu with existing bindings. It should work like the "Refactor" quick menu in JDT.

Shortcut for quick menu in JDT: Shortcut for "Refactor" quick menu

JDT quick menu:

JDT quickMenu

I already added a binding and a command but it seems there is something missing. The Delete Something entry is also working for the context menu, just the shortcut to the quick menu is missing. Does anybody how to do this?

<extension point="org.eclipse.ui.bindings">   <key         commandId="myplugin.refactoring.actions.DeleteSomething"         schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"         sequence="M1+5">   </key>   <key         commandId="myplugin.refactoring.quickMenu"         schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"         sequence="M1+9">   </key> 

<extension point="org.eclipse.ui.commands">   <command         categoryId="myplugin.category.refactor"         description="Delete Something"         id="myplugin.refactoring.actions.DeleteSomething"         name="Extract Method">   </command>   <command         categoryId="myplugin.category.refactor"         id="myplugin.refactoring.quickMenu"         name="Show Refactor Quick Menu">   </command>   <category         id="myplugin.category.refactor"         name="Refactor">   </category> 

like image 955
Meinhard Avatar asked Oct 06 '11 09:10

Meinhard


1 Answers

You can also do it like this:

Add a command for the quick menu and set a default handler.

      <command         defaultHandler="myplugin.refactoring.QuickmenuHandler"         id="myplugin.refactoring.quickMenu"         name="Show Refactor Quick Menu">       </command> 

The handler should be able to create the menu. Something like this:

@Override public Object execute(ExecutionEvent event) throws ExecutionException {     ...     Menu menu = new Menu(some parent);     new MenuItem(menu, SWT.PUSH).setText("...");     menu.setVisible(true);     return null; } 

Add a shortcut to the command (as you did):

 <key     commandId="myplugin.refactoring.quickMenu"     schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"     sequence="M1+9">  </key> 

Finally bind all of this together in the menu extension point:

   <extension      point="org.eclipse.ui.menus">   <menuContribution         allPopups="false"         locationURI="popup:ch.arenae.dnp.frame.popup?after=additions">      <menu            commandId="myplugin.refactoring.quickMenu"            label="Refactor">         <command               commandId="<first refactoring command>"               style="push">         </command>      </menu>      ...   </menuContribution> 

The important point is the commandId attribute in the menu element. It is used to display the keyboard shortcut in the menu.

like image 147
Peter Avatar answered Sep 17 '22 15:09

Peter