Группа действий - это совокупность функций, логически объединенных вокруг определенной задачи. Например, разработка приложений Java является группой действий, обычно выполняемых пользователями платформы, и JDT определяет многие дополнения пользовательского интерфейса (панели, редакторы, проекции, параметры), полезные только при выполнении этой группы действий. Прежде, чем познакомиться с механизмом определения групп действий, давайте взглянем на то, как они используются для "разгрузки" пользовательского интерфейса.
Концепция группы действий полностью прозрачна, хотя, возможно, для начинающего пользователя она и не столь понятна. После того как в платформе включается группа действий, показываются элементы пользовательского интерфейса, связанные с этой группой действий. После отключения группы действий в платформе связанные с ней элементы пользовательского интерфейса скрываются. Можно включать и выключать группы действий с помощью страницы параметров Рабочая среда > Группы функций. Группы действий в пользовательском интерфейсе называются "группы функций", несмотря на то, что в API мы используем термин "группы действий".
Определенные пользовательские действия служат триггерами для включения группы действий. Например, создание нового проекта Java может включить группу действий для разработки Java. Таким образом, пользователи знакомятся с группами действий по мере надобности и узнают о том, какие группы действий доступны и как они влияют на интерфейс пользователя. При первом запуске платформы рекомендуется отключить как можно большее число групп действий, чтобы приложение было как можно более простым. С помощью начальной страницы можно указать, какие группы действий необходимо включить.
Мы рассмотрели в разделе Проекции, как проекции можно использовать для организации различных макетов панелей и групп действий в задачах. Для чего используются группы действий? Несмотря на то, что проекции и группы действий определяют схожие типы задач, основное различие между ними заключается в том, как с ними связаны дополнения модулей в пользовательский интерфейс. Дополнения в пользовательском интерфейсе связываются с проекциями в определении расширения дополнения. Таким образом, модуль отвечает за определение того, к какой проекции относятся его панели и группы действий. Модули также могут задавать и собственные проекции. Даже когда проекция не активна, можно получить доступ к панелям и действиям, связанным с проекцией, с помощью команды Показать панель и других.
Группы действий являются более высоким уровнем структурирования. Отдельные дополнения в пользовательский интерфейс не знают о группах действий и не ссылаются на них в своих определениях расширений. Вместо этого группы действий настраиваются на более высоком уровне, например на уровне интеграции или настройки платформы или при установке продукта. Отдельные модули обычно не задают новые группы действий, если только модуль не является модулем системного уровня, заданным системным интегратором. Обычно системный интегратор определяет, как функции группируются в группы действий, и которые из них доступны по умолчанию. Группы действий связаны с дополнениями пользовательского интерфейса с помощью привязки шаблона групп действий, шаблонов, совпадающих с ИД дополнений пользовательского интерфейса, внесенных модулем. Ниже приведен пример реализации этой концепции.
Группы действий определяются с помощью точки расширения org.eclipse.ui.activities. Давайте взглянем на упрощенную версию того, как модуль Eclipse SDK определяет две группы действий - одну для разработки кода на Java и вторую для разработки модулей:
<extension point="org.eclipse.ui.activities"> <activity name="Группа действий Java" description="Разработка кода на Java" id="org.eclipse.javaDevelopment"> </activity> <activity name="Группа действий модуля" description="Разработка модуля Eclipse" id="org.eclipse.plugInDevelopment"> </activity> ...
Группам действий присваивается имя и описание, которое можно показать при включении или отключении групп действий, либо показать сведения о группе действий в любой другой ситуации. ИД группы действий используется для определения шаблона привязки или других взаимоотношений между группами действий. Например, можно задать, что для одной группы действий необходима другая группа действий.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
Привязка требований означает, что группа действий разработки модуля может быть активирована только при включенной группе действий разработки Java. Связанные группы действий также могут быть привязаны к категориям, которые показываются при работе с группами действий.
<category name="Разработка" description="Разработка ПО" id="org.eclipse.categories.developmentCategory"> </category> <categoryActivityBinding activityId="org.eclipse.javaDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding> <categoryActivityBinding activityId="org.eclipse.plugInDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding>
Категория группирует связанные группы действий разработки. Эта категория видна пользователю, когда он вручную настраивает группы действий.
Группы действий связаны с дополнениями пользовательского интерфейса с помощью шаблона совпадения. Шаблоны в привязках групп действий используются согласно правилам, описанным в пакете java.util.regex для регулярных выражений. Используемые в рабочей среде шаблоны состоят из двух частей. Первая часть использует идентификатор для модуля, дополняющего пользовательский интерфейс. Вторая часть - ИД, используемый самим модулем при определении дополнений (частью идентификатора может являться и ИД модуля). Используется следующий формат:
идентификатор-модуля + "/" + локальный-идентификаторНапример, следующая привязка группы действий подразумевает, что дополнение пользовательского интерфейса от любого идентификатора модуля JDT (org.eclipse.jdt.*) связано с группой действий по разработке Java вне зависимости от локального идентификатора (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Следующая привязка является более специфичной. Она указывает, что дополнение с именем javanature, определенное в ядре JDT (org.eclipse.jdt.core), связано с группой действий по разработке Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Итак, привязку шаблонов групп действий можно использовать для связывания крупных групп дополнений с определенными группами действий или для связывания определенных дополнений с группой действий. Группы действий влияют на следующие дополнения:
Используемый рабочей средой формат (ИД модуля + локальный ИД) позволяет легко создать привязку к модулям, имена которых не совпадают с принятым стандартом, согласно которому перед именем следует располагать идентификаторы дополнений в пользовательский интерфейс и идентификаторы модулей. Модули, напрямую взаимодействующие с API групп действий, могут использовать собственный формат для идентификации дополнений и для совпадений шаблонов с этими именами.
Группы действий связаны с дополнениями справки с помощью таких же схем совпадений шаблонов, что и для дополнений пользовательского интерфейса. Вторая часть идентификатора (локальный идентификатор) указывает имя файла оглавления (TOC). Например, следующая привязка шаблона группы действий связывает все файлы TOC, дополненные модулями JDT (org.eclipse.jdt.*), с группой действий разработки Java:
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Когда группа действий разработки Java выключена, книги справки, добавленные модулями JDT, или любые дополнительные книги (привязанные к TOC или привязанные книгами JDT), даже добавленные различными модулями, не будут отображаться в справке пользовательского интерфейса. Заданные в этих книгах темы не будут отображаться в результатах поиска. Когда JDT TOC не отображаются как основные TOC, но вместо этого были привязаны из других TOC и отображены в качестве деревьев в книге, отключение группы действий JDT спрячет эти деревья. Содержащая их книга будет отражать меньше разделов в пользовательском интерфейсе.
Используя более специфичную привязку, возможно связать группы действий с выбранными оглавлениями модулей, добавляющих несколько оглавлений к системе справки. Например, следующая привязка шаблона группы действий связывает оглавление "Примеры" с группой действий разработки Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>С такой привязкой шаблонов отключение группы действий разработки Java приведет к выключению раздела "Примеры" в книге "Руководство разработчика модуля JDT".
Поддержка группы действий рабочей среды включает в себя API для работы с заданными группами действий и изменения их состояния доступности. Большинству модулей этот API не требуется, но его удобно использовать при реализации функций, позволяющих пользователю работать с группами действий или для реализации триггеров, активирующих определенную группу действий. Предполагается, что любой модуль, управляющий группами действий посредством API, знаком со способами настройки групп действий для определенного продукта. Например, сама рабочая среда использует API для включения доступности групп действий, таких как разработка Java. Рассмотрим, как рабочая среда использует API базовой группы действий для реализации триггеров.
Центром всех групп действий в рабочей среде является IWorkbenchActivitySupport. Поддержка групп действий работает в паре с IActivityManager. Модуль может получить экземпляр поддержки рабочей группы и диспетчера групп действий из рабочей среды.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();Следующий фрагмент кода включает группу действий разработки Java (если она до этого не была доступна). В нем показана упрощенная версия триггера.
... //Пользователь совершил действие, связанное с Java. Сделать группу действий Java доступной. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
IActivityManager также задает протокол для получения ИД всех заданных категорий и групп действий и для получения всех связанных IActivity или ICategory для определенного ИД. Эти объекты можно использовать для просмотра определения группы действий или категории в API, например, для получения привязок шаблона или требований. Получателей запросов можно зарегистрировать в диспетчере групп действий или в самих группах действий или категориях для обнаружения изменений в определениях заданных групп действий или в диспетчере групп действий. Дополнительные сведения содержатся в пакете org.eclipse.ui.activities.