如何添加类似于JDT中的“Refactor”上下文菜单的quickMenu的键绑定?
我想添加一个快捷方式到我的eclipse插件来显示一个带有现有绑定的快捷菜单。 它应该像JDT中的“Refactor”快捷菜单一样工作。
JDT中快捷菜单的快捷方式:
JDT快捷菜单:
我已经添加了一个绑定和一个命令,但似乎有什么缺失。 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中完成:
-
首先,他们在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“>
-
他们声明了一个关键绑定:
<key sequence =“M2 + M3 + T”commandId =“org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu”schemeId =“org.eclipse.ui.defaultAcceleratorConfiguration”/>
-
一旦编辑器被创build,他们将这个命令与一个处理程序关联起 处理程序本身(
org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator
)负责用项目填充快捷菜单。
您不必通过编程将命令与处理程序相关联 – 另一个选项是使用org.eclipse.ui.handlers扩展点。