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


69

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

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

JDT快速菜单:

JDT快速菜单

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

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


5
您在使用e4还是其他?
Ankit 2013年

Answers:


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


2
彼得,我实现了一个最小的例子。当上下文菜单出现并且快捷方式也可以显示快捷菜单时,快捷键绑定不会显示在上下文菜单中。因此,用户必须知道快捷方式。是否有一些额外的步骤来使快捷方式显示在上下文菜单中?
约翰内斯·多恩

0

您可以看一下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. 创建编辑器后,它们会将此命令与处理程序相关联。处理程序本身(org.eclipse.jdt.internal.ui.actions.JDTQuickMenuCreator)负责用项目填充快速菜单。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.