org.eclipse.ui.popupMenus

Точка расширения org.eclipse.ui.popupMenus позволяет модулю внести дополнения в всплывающие меню других панелей или редакторов.

Можно добавить действие к определенному всплывающему меню, используя ИД (viewerContribution) или связав его с определенным типом объекта (objectContribution). 

Утилита readme задает оба варианта. Сначала рассмотрим дополнение объекта.  

<extension point = "org.eclipse.ui.popupMenus">
       <objectContribution
        id="org.eclipse.ui.examples.readmetool"
        objectClass="org.eclipse.core.resources.IFile"
	    nameFilter="*.readme">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	       menubarPath="additions"
			   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"	
			   enablesFor="1">
	</action>
	 </objectContribution>
 	 ...

Дополнение объекта

Действие "Show Readme Action" добавляется для класса объектов IFile. Это означает, что любая панель, содержащая объекты IFile, отобразит дополнения, если выбраны объекты IFile. Итак, критерий выбора ограничен с помощью фильтра имени (nameFilter="*.readme") и для одиночного выбора (enablesFor="1"). Как мы рассмотрели ранее, регистрация этого меню не запускает какой-либо код из модуля до тех пор, пока элемент меню не будет выбран.

Когда элемент меню выбран, рабочая среда запустит указанный класс.   Так как всплывающее меню задано в виде objectContribution, этот класс должен реализовывать IObjectActionDelegate

Действие реализовано в PopupMenuActionDelegate.  

public void run(IAction action) {
      MessageDialog.openInformation(
         this.part.getSite().getShell(),
         "Readme Example",
         "Popup Menu Action executed");
   }

Дополнение в всплывающем меню показывается при выборе файла readme в навигаторе ресурсов.

Дополнение просмотра

Дополнение просмотра используется при необходимости внести дополнения в определенное всплывающее меню панели или редактора с помощью их ИД. Ниже приведен пример дополнения просмотра утилиты readme:

      ...
      <viewerContribution
        id="org.eclipse.ui.examples.readmetool2"
        targetID="org.eclipse.ui.examples.readmetool.outline">
	    <action id="org.eclipse.ui.examples.readmetool.action1"
	       label="%PopupMenus.action"
	       icon="icons/ctool16/openbrwsr.png"
	       menubarPath="additions"
			   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       class="org.eclipse.ui.examples.readmetool.ViewActionDelegate">	
	</action>
       </viewerContribution>
</extension>
Примечание:  имя viewerContribution не имеет никакого отношения к программам просмотра JFace. Более подходящим именем является popupMenuContribution.

Если используется расширение viewerContribution, то класс должен реализовывать интерфейс IEditorActionDelegate или IViewActionDelegate, в зависимости от того, добавлено ли действие в всплывающее меню редактора или панели.  

targetID указывает панель, всплывающее меню которой будет изменено.   В этом случае действие добавляется к одной из панелей утилиты readme - схеме.   Само по себе действие похоже на другие ранее рассмотренные.   Мы задаем ИД, метку и значок для действия, а также путь внутри всплывающего меню для нашего дополнения.   Действие будет показываться только во всплывающем меню конструктора панели readme.

Для дополнения viewerContribution к точке расширения popupMenus необходимы те же интерфейсы, что и для точек расширения viewActions и editorActions. Если требуется добавить это же действие к всплывающему меню и локальному меню панели или редактора, можно использовать одинаковые классы для обоих расширений.