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.
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:
objectClass - ma wartość true, gdy każdy obiekt w wyborze jest podklasą danej klasy lub ją implementuje.
objectState - ma wartość true, gdy nazwany atrybut przyjmuje określoną wartość. W obliczaniu tego wyrażenia bierze udział interfejs IActionFilter. Filtr akcji dynamicznie oblicza kryteria włączenia akcji na podstawie wyboru docelowego i wartości nazwanych atrybutów.
systemProperty - ma wartość true, gdy nazwana właściwość systemowa przyjmuje określoną wartość.
pluginState - określa, czy dany moduł dodatkowy (określony identyfikatorem) powinien zostać zainstalowany czy aktywowany.
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 |
---|---|---|
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. |
|
(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. |
Łą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.