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