Модули могут добавлять меню, пункты меню и элементы панели инструментов к меню рабочей среды и к панели инструментов с помощью точки расширения org.eclipse.ui.actionSets. Для того чтобы не загромождать интерфейс при отображении всех добавленных модулями пунктов меню одновременно, дополнения группируются в наборы действий, которые можно сделать видимыми с помощью параметров пользователя.
Можно просмотреть действия, добавленные в рабочую среду с помощью пункта меню рабочей среды Окно->Настроить проекцию.... Будет показано окно со списком наборов действий, представленных в виде групп команд. Отметка рядом с группой команд означает, что действия меню и панели инструментов видны в рабочей среде. Можно выбрать имя группы команд, чтобы увидеть список доступных действий меню и панели инструментов. На приведенном ниже рисунке показан список групп команд, доступных в рабочей среде. (Ваша рабочая среда может выглядеть иначе в зависимости от установленных модулей и активных проекций).
Утилита readme использует набор действий для дополнения нескольких различных действий "Открыть браузер Readme" в меню рабочей среды. (Мы добавляли подобное действие к всплывающему меню навигатора ресурсов). Вот пример кода:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="org_eclipse_ui_examples_readmetool_actionSet" label="%ActionSet.name" visible="true"> <menu id="org_eclipse_ui_examples_readmetool" label="%ActionSet.menu" path="window/additions"> <separator name="slot1"/> <separator name="slot2"/> <separator name="slot3"/> </menu> <action id="org_eclipse_ui_examples_readmetool_readmeAction" menubarPath="window/org_eclipse_ui_examples_readmetool/slot1" toolbarPath="readme" label="%ReadmeAction.label" tooltip="%ReadmeAction.tooltip" helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" icon="icons/ctool16/openbrwsr.png" class="org.eclipse.ui.examples.readmetool.WindowActionDelegate" enablesFor="1"> <selection class="org.eclipse.core.resources.IFile" name="*.readme"> </selection> </action> ... </actionSet> </extension>
Да, довольно запутанный код! Сначала обратим внимание только на первое действие.
Вначале объявляется набор действий, и ему назначается метка. В приведенном выше диалоге для отображения набора действий используется метка "ReadMe Actions" (заданная для ключа %ActionSet.name в файле параметров модуля). Так как мы присвоили visible значение "истина", рабочая среда пометит набор действий в списке и сделает его видимым.
Остальная часть объявления набора действий касается определения меню, в котором отображаются действия и самих действий.
Мы задаем меню, метка которого отображается в меню рабочей среды. Путь меню указывает рабочей среде поместить новое меню в группу Дополнения меню Окно. (Сведения о путях меню и группах содержатся в разделе Пути меню и панели инструментов). Мы также зададим заготовки в новом меню, чтобы действия можно было вставить в определенные места меню.
С помощью этого кода наше меню отобразится в меню Окно рабочей среды.
Затем мы определяем сами действия
Определение действия (ИД, метка, значок, класс) похоже на другие действия, которые мы встречали в панелях, редакторах и всплывающих меню. Обратим внимание на отличия: куда же попадают действия? Мы используем menubarPath и toolbarPath для указания их расположения. Вначале задается menubarPath, чтобы добавить действие в заготовку только что определенного меню ( "window/org_eclipse_ui_examples_readmetool/slot1").
Затем мы определим новый toolbarPath для вставки наших действий в панель инструментов рабочей среды. После того как задан новый путь к инструментам, "readme", рабочая среда решит, куда поместить другие дополнения панели инструментов модулей.
Что происходит, когда пользователь выбирает действие? Действие реализуется классом, указанным в атрибуте класс. Класс действия должен применить IWorkbenchWindowActionDelegate или IWorkbenchWindowPulldownDelegate, если действие будет отображаться как пункт выпадающего меню в панели инструментов. Так как мы не создаем элемент выпадающего меню, используется WindowActionDelegate. Этот класс схож с ObjectActionDelegate. Он запускается с диалогом разделов readme, когда пользователь выбирает действие. (Мы обсудим окно Sections в разделе Окна диалога приложений).
Действие также предоставляет условия активации пунктов его меню и элементов панели инструментов. Пункты меню и панели инструментов будут активированы только тогда, когда выбран один файл (enablesFor="1") readme (selectionClass ="org.eclipse.core.resources.IFile" name="*.readme"). Этот элемент действия меню или панели инструментов отображается и активируется посредством кода в файле plugin.xml. Код модуля не выполняется до тех пор, пока пользователь не выбирает действие или рабочая среда не запустит класс действия.
Позднее мы рассмотрим два других действия в контексте действий с изменяемыми целями.