Для определения подключения и/или видимости действия применяются, соответственно, элементы enablement и visibility. Два этих элемента содержат булево выражение, которое вычисляется, чтобы определить подключение и/или видимость.
Синтаксис элементов enablement и visibility одинаков. Оба содержат только один подэлемент булева выражения. В простейшем случае это будет элемент objectClass, objectState, pluginState или systemProperty. В более сложном случае для создания булева выражения можно использовать сочетания элементов and, or и not. Элементы and и or должны содержать по 2 подэлемента. Элемент not должен содержать только один подэлемент.
<!ELEMENT extension (viewContribution+)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT viewContribution (menu* , action*)>
<!ATTLIST viewContribution
id CDATA #REQUIRED
targetID CDATA #REQUIRED>
Этот элемент используется для определения группы действий и/или меню панели.
<!ELEMENT action (selection* | enablement?)>
<!ATTLIST action
id CDATA #REQUIRED
label CDATA #REQUIRED
menubarPath CDATA #IMPLIED
toolbarPath CDATA #IMPLIED
icon CDATA #IMPLIED
disabledIcon CDATA #IMPLIED
hoverIcon CDATA #IMPLIED
tooltip CDATA #IMPLIED
helpContextId CDATA #IMPLIED
style (push|radio|toggle) "push"
state (true | false)
class CDATA #REQUIRED
enablesFor CDATA #IMPLIED>
Этот элемент определяет действие, которое может вызываться пользователем в интерфейсе.
push | - элемент обычного меню или панели инструментов. | |
radio | - элемент меню или панели инструментов в виде переключателя - радиокнопки. Внутри группы действий, оформленных в таком стиле, возможен выбор только одного действия (аналогично переключению кнопок старого проводного радио). Его начальное значение определяется атрибутом state. | |
toggle | - переключатель в виде флажка (в меню) или переключатель в панели инструментов. Его начальное значение определяется атрибутом state. |
! | - выбрано 0 элементов | |
? | - выбран 1 элемент или не выбрано ни одного | |
+ | - выбран 1 или более элементов | |
multiple, 2+ | - выбрано 2 или более элементов | |
n | - точное число выбранных элементов. Например: enablesFor=" 4" подключает действие, только если выбрано 4 элемента | |
* | - выбрано любое число элементов |
<!ELEMENT menu (separator+ , groupMarker*)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #REQUIRED
path CDATA #IMPLIED>
Этот элемент применяется для определения нового меню.
<!ELEMENT separator EMPTY>
<!ATTLIST separator
name CDATA #REQUIRED>
Этот элемент применяется для создания разделителя меню в новом меню.
<!ELEMENT groupMarker EMPTY>
<!ATTLIST groupMarker
name CDATA #REQUIRED>
Этот элемент позволяет создать в новом меню именованную группу. Для него не существует визуального представления, если только это не элемент separator.
<!ELEMENT selection EMPTY>
<!ATTLIST selection
class CDATA #REQUIRED
name CDATA #IMPLIED>
Этот элемент позволяет определить, должно действие подключаться для текущего выбора. Если указан элемент enablement, то данный элемент игнорируется.
<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Этот элемент позволяет определить подключение для расширения.
<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Этот элемент применяется для определения видимости расширения.
<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Это - булевская операция AND над результатами вычисления двух операндов выражения.
<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Это - булевская операция OR над результатами вычисления двух операндов выражения.
<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Это - булевская операция NOT над результатами вычисления двух операндов выражения.
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED>
Этот элемент позволяет проверить класс или интерфейс каждого выбранного объекта. Выражение истинно, если все выбранные объекты реализуют указанный класс или интерфейс.
<!ELEMENT objectState EMPTY>
<!ATTLIST objectState
name CDATA #REQUIRED
value CDATA #REQUIRED>
Этот элемент используется для проверки состояния атрибута каждого выбранного объекта. Выражение истинно, если для всех выбранных объектов атрибут находится в указанном состоянии. Для вычисления выражения этого типа каждый объект в выборе должен реализовывать интерфейс org.eclipse.ui.IActionFilter или адаптироваться к нему.
<!ELEMENT pluginState EMPTY>
<!ATTLIST pluginState
id CDATA #REQUIRED
value (installed|activated) "installed">
Этот элемент позволяет проверить состояние модуля. Состояние модуля может принимать значения: installed (соответствует "resolved" в OSGi) или activated (соответствует "active" в OSGi).
<!ELEMENT systemProperty EMPTY>
<!ATTLIST systemProperty
name CDATA #REQUIRED
value CDATA #REQUIRED>
Этот элемент позволяет проверить состояние некоторого системного свойства. Значение свойства извлекается из java.lang.System.
<extension point=
"org.eclipse.ui.viewActions"
>
<viewContribution id=
"com.xyz.xyzViewC1"
targetID=
"org.eclipse.ui.views.navigator.ResourceNavigator"
>
<menu id=
"com.xyz.xyzMenu"
label=
"Меню XYZ"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ"
label=
"&Запуск инструмента XYZ"
menubarPath=
"com.xyz.xyzMenu/group1"
toolbarPath=
"Normal/additions"
style=
"toggle"
state=
"true"
icon=
"icons/runXYZ.gif"
tooltip=
"Запуск инструмента XYZ"
helpContextId=
"com.xyz.run_action_context"
class=
"com.xyz.actions.RunXYZ"
>
<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
/>
</action>
</viewContribution>
</extension>
В приведенном выше примере указанное действие будет подключаться только при выборе одного объекта (атрибут enablesFor). Кроме того, выбранный объект должен быть файлом Java.
Вот другой пример расширения действия панели:
<extension point=
"org.eclipse.ui.viewActions"
>
<viewContribution id=
"com.xyz.xyzViewC1"
targetID=
"org.eclipse.ui.views.navigator.ResourceNavigator"
>
<menu id=
"com.xyz.xyzMenu"
label=
"Меню XYZ"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ2"
label=
"&Запуск инструмента XYZ2"
menubarPath=
"com.xyz.xyzMenu/group1"
style=
"push"
icon=
"icons/runXYZ2.gif"
tooltip=
"Запуск инструмента XYZ2"
helpContextId=
"com.xyz.run_action_context2"
class=
"com.xyz.actions.RunXYZ2"
>
<enablement>
<and>
<objectClass name=
"org.eclipse.core.resources.IFile"
/>
<not>
<objectState name=
"extension"
value=
"java"
/>
</not>
</and>
</enablement>
</action>
</viewContribution>
</extension>
В этом примере указанное действие появится в виде пункта меню. Действие будет подключаться, если выбор не будет содержать файлов Java.
Интерфейс org.eclipse.ui.IViewActionDelegate расширяет интерфейс org.eclipse.ui.IActionDelegate и добавляет дополнительный метод, который позволяет инициализировать делегат с экземпляром панели, в которую он добавляется.
Данная точка расширения может использоваться для добавления действий в меню, созданные ранее целевой панелью. При отсутствии атрибута пути к меню новое меню или действие будет добавляться в конец выпадающего меню.
Критерий подключения для расширения действия первоначально определяется элементом enablesFor, а также элементом selection или enablement. Однако как только создан экземпляр делегата действия, он может управлять состоянием подключения действия непосредственно внутри его метода selectionChanged.
Метки действий и меню могут включать специальные символы для представления мнемонической информации. При этом должны выполняться следующие правила:
Элементы selection и enablement являются взаимоисключающими. Элемент enablement может заменять элемент selection с подэлементами objectClass и objectState. Например, вместо
можно написать следующее:<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
>
</selection>
<enablement>
<and>
<objectClass name=
"org.eclipse.core.resources.IFile"
/>
<objectState name=
"extension"
value=
"java"
/>
</and>
</enablement>
Copyright (c) 2002, 2005 IBM Corporation и другие.
Все права защищены. Эта программа и сопутствующие материалы распространяются на условиях Eclipse Public License v1.0, поставляемой вместе с продуктом и доступной на Web-сайте
http://www.eclipse.org/legal/epl-v10.html