Булевские выражения и фильтры действий

При добавлении действия в пользовательский интерфейс рабочей среды модуль может добавить условия, при которых этот пункт меню виден и/или доступен. Помимо простых условий доступности, например счетчики выбора или классы выбора, модули могут использовать булевские выражения для обеспечения большей гибкости при отображении и скрытии действий.

Булевские выражения доступности

Булевские выражения могут содержать простые булевские операторы (NOT, AND, OR) и заранее заданные выражения, способные вычислить конкретные условия. Многие из этих условий применяются для проверки различных объектов. Идентификация "текущего объекта" (тестируемого объекта) зависит от контекста конкретного выражения:

Предполагается, что эти выражения применимы только в том случае, если в качестве значения указана строка. Исключения составляют следующие случаи успешного выполнения преобразований:

Полное определение, позволяющее разрешить применение синтаксиса XML, можно найти в документации по любой точке расширения, определяющей элемент enablement, например org.eclipse.ui.popupMenus.

До R3.0 обобщенные булевские выражения были недоступны. Для вычисления конкретных условий без создания общего выражения применялись следующие предопределенные выражения. Обратите внимание, что теперь эти выражения можно указать с помощью более обобщенного синтаксиса. Сохранена поддержка следующих предопределенных выражений:

Например, следующий фрагмент кода задает условие включения, которое можно использовать для какого-либо действия:

<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 и булевских выражений для отображения и скрытия действий.

Имя точки расширения

Атрибуты, влияющие на включение

Булевские выражения

viewActions,

editorActions,

actionSets

enablesFor - задает число выбранных элементов, при котором действие будет включено.

selection class - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать для того, чтобы действие было доступно.

selection name - фильтр символов подстановки, который можно применить к выбранным объектам.

visibility - булевское выражение.   Управляет показом пункта меню.

enablement - булевское выражение.   Управляет включением пункта меню. Атрибут enablesFor, а также selection class и name должны выполняться перед применением выражения, включающего действие.

popupMenus

(Только для добавления объекта.)

objectClass - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать.

(Для добавлений объекта и программы просмотра)

enablesFor - задает число выбранных элементов, при котором действие будет включено.

selection class - класс, к производному классу которого должны относиться выбранные объекты, или который требуется реализовать для того, чтобы действие было включено.

selection name - фильтр символов подстановки, который можно применить к выбранным объектам.

 

(Для добавлений объекта и программы просмотра)

visibility - булевское выражение.   Управляет показом пункта меню.

enablement - булевское выражение.   Управляет включением пункта меню. Атрибут enablesFor, а также selection class и name должны выполняться перед применением выражения, включающего действие.

Использование objectState с разными типами содержимого

Возможность определения типа данных (см. раздел Типы содержимого) можно сочетать с булевскими выражениями для задания очень специфичных условий включения или доступности действий, основываясь на типе данных ресурса. Например, следующий фрагмент кода показывает пункт всплывающего меню только в том случае, если содержимое выбранного файла соответствует особым типам, с которыми работает модуль.

<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. Это позволяет модулю проводить проверку типа содержимого перед тем, как отобразить или сделать доступными действия, связанные с определенными типами файлов. Дополнительные сведения о расширениях типов содержимого содержатся в разделе Типы содержимого.