Как я могу добавить связывание клавиш для quickMenu, похожее на контекстное меню «Refactor» в JDT? - PullRequest
69 голосов
/ 06 октября 2011

Я хочу добавить ярлык в мой плагин Eclipse, чтобы показать быстрое меню с существующими привязками.Он должен работать как быстрое меню «Refactor» в JDT.

Ярлык быстрого меню в JDT: Shortcut for

Быстрое меню 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 ]

1 голос
/ 17 декабря 2014

Вы также можете сделать это так:

Добавьте команду для быстрого меню и установите обработчик по умолчанию.

      <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 в элементе меню. Используется для отображения сочетания клавиш в меню.

0 голосов
/ 02 декабря 2014

Вы можете посмотреть, как JDT реализует то же самое. Например, глядя на исходный код Eclipse 3.8.2, вы увидите интересный метод:

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

, который вызывается при открытии редактора Java. Это программный обработчик ассоциации с текущим редактором.

Подводя итог, как это делается в JDT:

  1. Во-первых, у них есть объявление команды в plugin.xml:

    <команда Name = "% ActionDefinition.refactorQuickMenu.name" Описание = "% ActionDefinition.refactorQuickMenu.description" CategoryId = "org.eclipse.jdt.ui.category.refactoring" ID = "org.eclipse.jdt.ui.edit.text.java.refactor.quickMenu">

  2. Они объявляют привязку ключа:

    <ключ Последовательность = «М2 + М3 + Т» 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 точку расширения.

...