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

时间:2011-10-06 09:37:57

标签: eclipse-rcp eclipse-jdt

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

JDT快捷菜单的快捷方式: Shortcut for "Refactor" quick menu

JDT快捷菜单:

JDT quickMenu

我已经添加了一个绑定和命令,但似乎缺少了一些东西。 Delete Something 条目也适用于上下文菜单,只缺少快捷菜单的快捷方式。 有人怎么做?

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

2 个答案:

答案 0 :(得分:1)

你也可以这样做:

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

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

处理程序应该能够创建菜单。像这样:

@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属性。它用于在菜单中显示键盘快捷键。

答案 1 :(得分:0)

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

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

在打开Java编辑器时调用。这是当前编辑器programmatic handler association

总结如何在JDT中完成:

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

    &LT;命令     NAME = “%ActionDefinition.refactorQuickMenu.name”     描述= “%ActionDefinition.refactorQuickMenu.description”     的categoryId = “org.eclipse.jdt.ui.category.refactoring”     ID = “org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu” &GT;

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

    &LT;键     序列= “M2 + M3 + T”     commandId = “org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu”     schemeId = “org.eclipse.ui.defaultAcceleratorConfiguration”/&GT;

  3. 创建编辑器后,它们会将此命令与处理程序相关联。处理程序本身(org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator)负责使用项目填充快捷菜单。

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