如何添加类似于JDT中的“Refactor”上下文菜单的quickMenu的键绑定?

我想添加一个快捷方式到我的eclipse插件来显示一个带有现有绑定的快捷菜单。 它应该像JDT中的“Refactor”快捷菜单一样工作。

JDT中快捷菜单的快捷方式: “重构”快捷菜单的快捷方式

JDT快捷菜单:

JDT quickMenu

我已经添加了一个绑定和一个命令,但似乎有什么缺失。 Delete Something条目也适用于上下文菜单,只是缺less快捷菜单的快捷方式。 有人如何做到这一点?

<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> 

你也可以这样做:

添加快捷菜单的命令并设置默认处理程序。

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

处理程序应该能够创build菜单。 像这样的东西:

 @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; } 

添加一个命令的快捷方式(和你一样):

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

最后在菜单扩展点将所有这些绑定在一起:

  <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> 

重要的一点是菜单元素中的commandId属性。 它用于在菜单中显示键盘快捷键。

您可以看看JDT如何实现相同。 例如,在查看Eclipse 3.8.2源代码时,您会看到有趣的方法:

 org.eclipse.jdt.ui.actions.RefactorActionGroup.installQuickAccessAction() 

这是在Java编辑器打开时调用的。 这是当前编辑器发生的编程处理程序关联 。

总结如何在JDT中完成:

  1. 首先,他们在plugin.xml中有一个命令声明:

    <command name =“%ActionDefinition.refactorQuickMenu.name”description =“%ActionDefinition.refactorQuickMenu.description”categoryId =“org.eclipse.jdt.ui.category.refactoring”id =“org.eclipse.jdt.ui.edit。 text.java.refactor.quickMenu“>

  2. 他们声明了一个关键绑定:

    <key sequence =“M2 + M3 + T”commandId =“org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu”schemeId =“org.eclipse.ui.defaultAcceleratorConfiguration”/>

  3. 一旦编辑器被创build,他们将这个命令与一个处理程序关联起 处理程序本身( org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator )负责用项目填充快捷菜单。

您不必通过编程将命令与处理程序相关联 – 另一个选项是使用org.eclipse.ui.handlers扩展点。