Часто модули добавляют функции к панелям, уже существующим в рабочей среде. Это осуществляется с помощью точки расширения org.eclipse.ui.viewActions. Эта точка расширения позволяет модулям добавлять пункты меню, подменю и элементы панели инструментов к имеющимся выпадающим меню локальных панелей и локальных панелей инструментов.
Вы могли обратить внимание на элемент локальной панели инструментов навигатора, который становится активным при выборе файла readme. Этот пункт также отображается в выпадающем локальном меню навигатора. Эти действия доступны потому, что модуль утилиты readme добавляет их с помощью расширения viewActions.
Ниже приведено дополнение из plugin.xml.
<extension point = "org.eclipse.ui.viewActions"> <viewContribution id="org.eclipse.ui.examples.readmetool.vc1" targetID="org.eclipse.ui.views.ResourceNavigator"> <action id="org.eclipse.ui.examples.readmetool.va1" label="%PopupMenu.ResourceNav.label" menubarPath="additions" toolbarPath="additions" icon="icons/obj16/editor.png" tooltip="%PopupMenu.ResourceNav.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.view_action_context" class="org.eclipse.ui.examples.readmetool.ViewActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"/> </action> </viewContribution> </extension>
Указано дополнение к панели с уникальным ИД. Панель, к которой добавляется действие, указана в targetID. Мы вносим дополнение к меню навигатора ресурсов. Указаны метка и расположение меню и панели инструментов для нового действия. (Полное описание расположений меню и панели инструментов содержится в разделе Пути меню и панели инструментов).
Мы также задаем условия, при которых действие будет доступно. Это действие будет доступно при одном выбранном enablesFor="1") ресурсе типа IFile (class="org.eclipse.core.resources.IFile"), с именем, содержащим ".readme" в расширении файла (name="*.readme"). Именно это произойдет при щелчке мышью в навигаторе ресурсов.
Сведений в файле plugin.xml вполне достаточно для добавления элементов в меню и панели инструментов, так как код модуля будет выполняться только тогда, когда действие на самом деле выбрано в меню или панели инструментов. Для добавления поведения действия класс реализации, указанный в plugin.xml, должен применять интерфейс IViewActionDelegate.
В данном примере модуль readme предоставляет ViewActionDelegate для реализации действия. При просмотре этого класса можно увидеть, что он включает в себя методы для запоминания своей панели, обработки изменений выбора ресурса и вызова действия. При вызове само действие просто запускает окно диалога, сообщающее о его выполнении.
public void run(org.eclipse.jface.action.IAction action) { MessageDialog.openInformation(view.getSite().getShell(), MessageUtil.getString("Readme_Editor"), MessageUtil.getString("View_Action_executed")); }
Несмотря на простоту этого действия, мы видим, как выбирая ресурсы и используя более функциональные диалоги, можно с помощью этого действия выполнять более интересные задачи.