Dostępność i widoczność akcji można odpowiednio zdefiniować przy użyciu elementów enablement oraz visibility. Te dwa elementy zawierają wyrażenie boolowskie, od którego wartości zależy dostępność i/lub widoczność.
Składnia dla elementów enablement oraz visibility jest taka sama. Oba zawierają tylko jeden podelement w formie wyrażenia boolowskiego. W najprostszym przypadku będzie to element objectClass, objectState, pluginState lub systemProperty. W bardziej złożonych przypadkach można łączyć elementy and, or oraz not w celu utworzenia wyrażenia boolowskiego. Element and i element or muszą zawierać dwa podelementy. Element not musi zawierać tylko jeden podelement.
<!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>
Ten element służy do definiowania grupy akcji i/lub menu widoku.
<!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>
Ten element definiuje akcję, którą można wywołać w interfejsie użytkownika.
push | - zwykła opcja menu lub przybornika. | |
radio | - element menu lub paska narzędzi w postaci przełącznika. Akcje w formie przełącznika w obrębie tego samego menu lub paska narzędzi łączą się w zestaw przełączników. Wartość początkowa określana jest przez atrybut state. | |
toggle | - zaznaczany element menu lub przełączany element paska narzędzi. Wartość początkowa określana jest przez atrybut state. |
! | - 0 wybranych elementów. | |
? | - 0 lub 1 wybrany element. | |
+ | - 1 lub więcej wybranych elementów. | |
multiple, 2+ | - 2 lub więcej wybranych elementów. | |
n | - dokładna liczba wybranych elementów. Przykład: enablesFor=" 4" powoduje włączenie akcji tylko po wybraniu 4 elementów. | |
* | - dowolna liczba wybranych elementów. |
<!ELEMENT menu (separator+ , groupMarker*)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #REQUIRED
path CDATA #IMPLIED>
Ten element służy do definiowania nowego menu.
<!ELEMENT separator EMPTY>
<!ATTLIST separator
name CDATA #REQUIRED>
Ten element służy do tworzenia separatora w nowym menu.
<!ELEMENT groupMarker EMPTY>
<!ATTLIST groupMarker
name CDATA #REQUIRED>
Ten element służy do tworzenia nazwanej grupy w nowym menu. W przeciwieństwie do elementu separator nie ma wizualnej reprezentacji w nowym menu.
<!ELEMENT selection EMPTY>
<!ATTLIST selection
class CDATA #REQUIRED
name CDATA #IMPLIED>
Ten element służy do określania stanu akcji (włączona/wyłączona) na postawie bieżącego wyboru. Element ten jest ignorowany w razie podania elementu enablement.
<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Ten element służy do definiowania włączenia rozszerzenia.
<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Ten element służy do definiowania widoczności rozszerzenia.
<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Ten element reprezentuje boolowską operację AND wykonywaną na wyniku wartościowania wyrażeń stanowiących jego dwa podelementy.
<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Ten element reprezentuje boolowską operację OR wykonywaną na wyniku wartościowania wyrażeń stanowiących jego dwa podelementy.
<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Ten element reprezentuje boolowską operację NOT wykonywaną na wyniku wartościowania wyrażeń stanowiących jego podelementy.
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED>
Ten element służy do wartościowania klasy lub interfejsu każdego obiektu w bieżącym wyborze. Jeśli każdy obiekt w wyborze implementuje określoną klasę lub interfejs, wyrażenie otrzyma wartość true.
<!ELEMENT objectState EMPTY>
<!ATTLIST objectState
name CDATA #REQUIRED
value CDATA #REQUIRED>
Ten element służy do wartościowania stanu atrybutu każdego obiektu w bieżącym wyborze. Jeśli każdy obiekt w wyborze ma określony stan atrybutu, wyrażenie otrzyma wartość true. Aby można było przeprowadzić wartościowanie tego typu wyrażenia, każdy obiekt w wyborze musi implementować interfejs org.eclipse.ui.IActionFilter lub dostosować się do niego.
<!ELEMENT pluginState EMPTY>
<!ATTLIST pluginState
id CDATA #REQUIRED
value (installed|activated) "installed">
Ten element służy do wartościowania stanu modułu dodatkowego. Stan modułu dodatkowego może mieć jedną z następujących wartości: installed (odpowiednik "resolved" w środowisku OSGi) lub activated (odpowiednik "active" w środowisku OSGi).
<!ELEMENT systemProperty EMPTY>
<!ATTLIST systemProperty
name CDATA #REQUIRED
value CDATA #REQUIRED>
Ten element służy do wartościowania stanu wybranej właściwości systemowej. Wartość właściwości jest pobierana z obiektu typu 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=
"Menu XYZ"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ"
label=
"&Uruchom narzędzie XYZ"
menubarPath=
"com.xyz.xyzMenu/group1"
toolbarPath=
"Normal/additions"
style=
"toggle"
state=
"true"
icon=
"icons/runXYZ.gif"
tooltip=
"Uruchom narzędzie XYZ"
helpContextId=
"com.xyz.run_action_context"
class=
"com.xyz.actions.RunXYZ"
>
<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
/>
</action>
</viewContribution>
</extension>
W powyższym przykładzie określona akcja zostanie włączona tylko przy wyborze pojedynczym (atrybut enablesFor). Ponadto każdy obiekt w wyborze musi być plikiem Java.
Poniżej przedstawiono inny przykład rozszerzenia akcji widoku:
<extension point=
"org.eclipse.ui.viewActions"
>
<viewContribution id=
"com.xyz.xyzViewC1"
targetID=
"org.eclipse.ui.views.navigator.ResourceNavigator"
>
<menu id=
"com.xyz.xyzMenu"
label=
"Menu XYZ"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ2"
label=
"&Uruchom narzędzie XYZ2"
menubarPath=
"com.xyz.xyzMenu/group1"
style=
"push"
icon=
"icons/runXYZ2.gif"
tooltip=
"Uruchom narzędzie 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>
W powyższym przykładzie określona akcja zostanie wyświetlona jako element menu. Akcja jest włączana, gdy wybór nie zawiera zasobów plików Java.
Interfejs org.eclipse.ui.IViewActionDelegate rozszerza interfejs org.eclipse.ui.IActionDelegate i dodaje do niego nową metodę, dzięki której można zainicjować delegata w instancji widoku, którą uzupełnia.
Ten punkt rozszerzenia umożliwia dodawanie akcji do menu utworzonych wcześniej przez widok docelowy. Pominięcie atrybutu ścieżki menu spowoduje dodanie nowego menu lub akcji na końcu menu rozwijanego.
Kryteria decydujące o włączeniu lub wyłączeniu akcji są początkowo definiowane przez atrybuty enablesFor, a także przez selection albo enablement. Po utworzeniu instancji metody delegowanej akcji można jednak kontrolować stan włączenia akcji bezpośrednio w obrębie metody selectionChanged.
Etykiety akcji i menu mogą zawierać znaki specjalne, które umożliwiają kodowanie mnemoników przy użyciu następujących zasad:
Elementy selection i enablement wzajemnie się wykluczają. Element enablement może zastąpić element selection za pomocą podelementów objectClass oraz objectState. Na przykład wyrażenie:
można oddać przy użyciu następującego wyrażenia:<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 i inne podmioty.
Wszelkie prawa zastrzeżone. Program ten oraz towarzyszące mu materiały są udostępniane na warunkach
licencji EPL (Eclipse Public License), wersja 1.0, dołączonej do nich i
dostępnej pod adresem http://www.eclipse.org/legal/epl-v10.html.