Точка расширения 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.
