Wyrażenia boolowskie i filtry akcji

Dla akcji wnoszonej przez moduł dodatkowy do interfejsu użytkownika środowiska roboczego przy użyciu jednego z punktów rozszerzeń menu można określić warunki, po spełnieniu których element menu będzie widoczny lub włączony w menu. Oprócz określania prostych warunków włączających, takich jak liczba wyborów lub klasy wyborów, moduły dodatkowe mogą także używać wyrażeń boolowskich, co ułatwia określanie widoczności i dostępności akcji.

Włączające wyrażenia boolowskie

Wyrażenia boolowskie mogą zawierać operatory boolowskie (NOT, AND, OR) połączone z predefiniowaną składnią służącą do oceniania określonych warunków. Wiele z tych warunków pozwala sprawdzać stan konkretnych obiektów. Tożsamość aktywnego obiektu (obiektu, którego dotyczy sprawdzanie) zależy od konkretnego kontekstu, w którym jest użyte wyrażenie włączające:

Wartość podawana jako argument w powyższych wyrażeniach jest traktowana jako łańcuch, chyba że powiodą się poniższe konwersje:

Pełną definicję składni XML na potrzeby włączania można znaleźć w dokumentacji każdego punktu rozszerzenia, który definiuje element enablement, na przykład punktu rozszerzenia org.eclipse.ui.popupMenus.

Przedstawione ogólne wyrażenia boolowskie nie były dostępne przed wersją 3.0. Do oceniania określonych warunków bez budowania wyrażenia ogólnego używane były podane poniżej wyrażenia predefiniowane. Warto zauważyć, że każde z nich można obecnie zastąpić wyrażeniem bardziej ogólnym. Predefiniowanych wyrażeń można nadal używać w następujący sposób:

Przedstawione poniżej przykładowe fragmenty kodu reprezentują wyrażenia włączające, których można użyć dla hipotetycznej akcji w zbiorze akcji:

<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>

Dokumentacja podanych punktów rozszerzenia zawiera bardziej rozbudowane przykłady takich wyrażeń oraz pełny opis odpowiednich znaczników XML.

Poniższa tabela zawiera wykaz punktów rozszerzeń, za pośrednictwem których można dodawać akcje, oraz opis sposobu użycia atrybutów znaczników XML i wyrażeń boolowskich do włączania tych akcji.

Nazwa punktu rozszerzenia

Atrybuty służące do włączania

Wyrażenia boolowskie

viewActions,

editorActions,

actionSets

enablesFor - określa liczbę obiektów, które trzeba wybrać, aby akcja została włączona.

selection class - klasa, której wybrane obiekty muszą być podklasą lub którą muszą implementować, aby akcja została włączona.

selection name - filtr umożliwiający zastosowanie znaków zastępczych do obiektów w wyborze.

visibility - wyrażenie boolowskie.  Decyduje o tym, czy dany element menu jest widoczny w menu.

enablement - wyrażenie boolowskie.  Decyduje o tym, czy dany element menu jest włączony w menu.  Atrybut enablesFor musi być określony, a warunki określone filtrami selection class i name muszą być spełnione przed zastosowaniem wyrażenia włączającego.

popupMenus

(Dotyczy tylko obiektów wnoszonych)

objectClass - określa klasę, której wybrane obiekty muszą być podklasą, lub którą muszą implementować.

(Dotyczy obiektów wnoszonych i przeglądarek)

enablesFor - określa liczbę obiektów, które trzeba wybrać, aby akcja została włączona.

selection class - klasa, której wybrane obiekty muszą być podklasą lub którą muszą implementować, aby akcja została włączona.

selection name - filtr umożliwiający zastosowanie znaków zastępczych do obiektów w wyborze.

 

(Dotyczy obiektów wnoszonych i przeglądarek)

visibility - wyrażenie boolowskie.  Decyduje o tym, czy dany element menu jest widoczny w menu.

enablement - wyrażenie boolowskie.  Decyduje o tym, czy dany element menu jest włączony w menu.  Atrybut enablesFor musi być określony, a warunki określone filtrami selection class i name muszą być spełnione przed zastosowaniem wyrażenia włączającego.

Użycie wyrażenia objectState w odniesieniu do typów treści

Łącząc możliwość zdefiniowania typów treści (patrz sekcja Typy treści) z wyrażeniami boolowskimi, można definiować bardzo precyzyjne warunki włączania lub widoczności na podstawie typu treści zasobu. Na przykład poniższy fragment kodu powoduje, że element menu podręcznego jest widoczny tylko wtedy, gdy treść wybranego pliku odpowiada typom treści obsługiwanym przez moduł dodatkowy.

<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"
         ...
Atrybut contentTypeId może być użyty w wyrażeniu objectState w celu sprawdzenia treści wybranego pliku XML. Pozwala to przeprowadzić bardzo szczegółowe sprawdzenie treści przez moduł dodatkowy przed włączeniem lub wyświetleniem akcji menu odnoszących się do konkretnych typów plików. Bardziej szczegółowe informacje na temat rozszerzeń typów treści zawiera sekcja Typy treści.