При добавлении действия в пользовательский интерфейс рабочей среды модуль может добавить условия, при которых этот пункт меню виден и/или доступен. Помимо простых условий доступности, например счетчики выбора или классы выбора, модули могут использовать булевские выражения для обеспечения большей гибкости при отображении и скрытии действий.
Булевские выражения могут содержать простые булевские операторы (NOT, AND, OR) и заранее заданные выражения, способные вычислить конкретные условия. Многие из этих условий применяются для проверки различных объектов. Идентификация "текущего объекта" (тестируемого объекта) зависит от контекста конкретного выражения:
Предполагается, что эти выражения применимы только в том случае, если в качестве значения указана строка. Исключения составляют следующие случаи успешного выполнения преобразований:
Полное определение, позволяющее разрешить применение синтаксиса XML, можно найти в документации по любой точке расширения, определяющей элемент enablement, например org.eclipse.ui.popupMenus.
До R3.0 обобщенные булевские выражения были недоступны. Для вычисления конкретных условий без создания общего выражения применялись следующие предопределенные выражения. Обратите внимание, что теперь эти выражения можно указать с помощью более обобщенного синтаксиса. Сохранена поддержка следующих предопределенных выражений:
objectClass - истина, если каждый объект находится в производном классе выбора или реализует класс.
objectState - истина, если данный атрибут имеет заданное значение. IActionFilter помогает вычислить выражения. Фильтр действий динамически вычисляет критерии включения для действий, основываясь на значении названных атрибутов и выбранных целях.
systemProperty - истина, если данное системное свойство имеет заданное значение.
pluginState - указывает, следует ли установить или активировать выбранный (по ИД) модуль.
Например, следующий фрагмент кода задает условие включения, которое можно использовать для какого-либо действия:
<action id="org.eclipse.examples.actionEnablement.class" label="Red Element" menubarPath="additions" class="org.eclipse.examples.actionEnablement.ObjectTestAction"> <enablement> <and> <objectClass name="org.eclipse.examples.actionEnablement.TestElement"/> <objectState name="name" value="red"/> </and> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.property" label="Property" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PropertyTestAction"> <enablement> <systemProperty name="MyTestProperty" value="puppy"/> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.pluginState" label="Installed" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PluginTestAction"> <enablement> <pluginState id="x.y.z.anotherPlugin" value="installed"/> </enablement> </action>
Полное описание XML и дополнительные примеры этих выражений можно найти в справочнике по точкам расширения.
В следующей таблице приведены точки расширения, которые добавляют действия, и общее описание использования атрибутов кода XML и булевских выражений для отображения и скрытия действий.
Имя точки расширения |
Атрибуты, влияющие на включение |
Булевские выражения |
---|---|---|
enablesFor - задает число выбранных элементов, при котором действие будет включено. selection class - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать для того, чтобы действие было доступно. selection name - фильтр символов подстановки, который можно применить к выбранным объектам. |
visibility - булевское выражение. Управляет показом пункта меню. enablement - булевское выражение. Управляет включением пункта меню. Атрибут enablesFor, а также selection class и name должны выполняться перед применением выражения, включающего действие. |
|
(Только для добавления объекта.) objectClass - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать. (Для добавлений объекта и программы просмотра) enablesFor - задает число выбранных элементов, при котором действие будет включено. selection class - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать для того, чтобы действие было включено. selection name - фильтр символов подстановки, который можно применить к выбранным объектам.
|
(Для добавлений объекта и программы просмотра) visibility - булевское выражение. Управляет показом пункта меню. enablement - булевское выражение. Управляет включением пункта меню. Атрибут enablesFor, а также selection class и name должны выполняться перед применением выражения, включающего действие. |
Возможность определения типа данных (см. раздел Типы содержимого) можно сочетать с булевскими выражениями для задания очень специфичных условий включения или доступности действий, основываясь на типе данных ресурса. Например, следующий фрагмент кода показывает пункт всплывающего меню только в том случае, если содержимое выбранного файла соответствует особым типам, с которыми работает модуль.
<extension point="org.eclipse.ui.popupMenus"> <objectContribution id="com.example.objectContributions" objectClass="org.eclipse.core.resources.IFile" nameFilter="*.xml"> <visibility> <or> <objectState name="contentTypeId" value="com.example.employeeRecordContentType"/> <objectState name="contentTypeId" value="com.example.customerRecordContentType"/> </or> </visibility> <action id="com.example.action1" ...Атрибут contentTypeId можно использовать в выражении objectState для проверки типа содержимого выбранного файла xml. Это позволяет модулю проводить проверку типа содержимого перед тем, как отобразить или сделать доступными действия, связанные с определенными типами файлов. Дополнительные сведения о расширениях типов содержимого содержатся в разделе Типы содержимого.