Как я могу добавить всплывающее окно (вклад меню) из плагина Eclipse?

#java #eclipse #popup #swt #eclipse-rcp

#java #eclipse #всплывающее окно #swt #eclipse-rcp

Вопрос:

У меня уже есть всплывающее окно, работающее в основном приложении Eclipse RCP (3.X). Теперь я пытаюсь добавить всплывающее окно (вклад меню) в плагин Eclipse RCP (он связан с приложением как зависимость). У этого плагина не было plugin.xml файл, который позволяет добавлять расширения, поэтому я создал новый. Конфигурация всплывающего окна выглядит следующим образом:

 <extension
     point="org.eclipse.ui.menus">
  <menuContribution
        allPopups="false"
        locationURI="popup:table.popupmenu?after=additions">
     <command
           commandId="copy"
           label="Copy"
           style="push">
     </command>
  </menuContribution>
</extension>
<extension
     point="org.eclipse.ui.commands">
  <command
        id="copy"
        name="Copy">
  </command>
</extension>
<extension
      point="org.eclipse.ui.handlers">
   <handler
         class="package.CopyHandler"
         commandId="copy">
   </handler>
</extension>
 

Класс обработчика существует.
Затем я добавил в свой класс «Таблица» следующий код для привязки меню (после создания объекта таблицы):

 IWorkbenchPartSite site = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
                                    .getActivePart().getSite();
MenuManager menuManager = new MenuManager();
Menu menu = menuManager.createContextMenu(this.table);
this.table.setMenu(menu);
site.registerContextMenu("table.popupmenu", menuManager, site.getSelectionProvider());
 

Поскольку я не мог заставить его работать, я следовал этому руководству (7.Руководство: команды и контекстные меню) и работает нормально. Я не вижу конфигурацию, которую мне не хватает.

Если есть другой хороший способ получить всплывающее меню из элемента управления (SWT), я был бы рад попробовать и это.

Комментарии:

1. Я думаю, это потому, что у вас есть ?after=additions locationURI, но в меню нет позиции «дополнения». Попробуйте без этого.

2. К сожалению, у меня это не сработало. Спасибо за помощь.

3. Ваш registerContextMenu вызов устанавливает контекстное меню для поставщика выбора детали — является ли ваша таблица поставщиком выбора для детали?