Die Aktivierung und/oder Sichtbarkeit einer Aktion kann mit den Elementen enablement bzw. visibility definiert werden. Diese beiden Elemente enthalten einen Booleschen Ausdruck, dessen Auswertung die Aktivierung und/oder Sichtbarkeit festlegt.
Die Syntax für die Elemente enablement und visibility ist jeweils identisch. Beide Elemente enthalten nur ein Unterelement für den Booleschen Ausdruck. Im einfachsten Fall handelt es sich hierbei um ein Element objectClass, objectState, pluginState oder systemProperty. In komplexeren Angaben können die Elemente and, or und not zu einem Booleschen Ausdruck kombiniert werden. Sowohl das Element and als auch das Element or muss 2 Unterelemente enthalten. Das Element not darf lediglich 1 Unterelement enthalten.
<!ELEMENT extension (actionSet+)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT actionSet (menu* , action*)>
<!ATTLIST actionSet
id CDATA #REQUIRED
label CDATA #REQUIRED
visible (true | false)
description CDATA #IMPLIED>
Mit diesem Element wird eine Gruppe von Aktionen und/oder Menüs definiert.
<!ELEMENT action (selection* | enablement?)>
<!ATTLIST action
id CDATA #REQUIRED
label CDATA #REQUIRED
accelerator CDATA #IMPLIED
definitionId CDATA #IMPLIED
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|pulldown) "push"
state (true | false)
pulldown (true | false)
class CDATA #IMPLIED
retarget (true | false)
allowLabelUpdate (true | false)
enablesFor CDATA #IMPLIED>
Dieses Element definiert eine Aktion, die der Benutzer in der Benutzerschnittstelle aufrufen kann.
push | - Die Aktion wird als normale Menüoption oder Symbolleistenoption dargestellt. | |
radio | - Die Aktion wird als Optionsfeld dargestellt. Aktionen mit dieser Darstellung, die zur gleichen Menü- oder Symbolleistengruppe gehören, verhalten sich wie eine Optionsfeldgruppe. Der Ausgangswert wird durch das Attribut state definiert. | |
toggle | - Die Aktion wird als mit einem Haken markierte Menüoption oder als Umschaltelement in der Symbolleiste angezeigt. Der Ausgangswert wird durch das Attribut state definiert. | |
pulldown | - Die Aktion wird als Untermenü oder als Dropdown-Menü neben dem Symbolleistenelement angezeigt. |
! | - 0 ausgewählte Elemente | |
? | - 0 oder 1 ausgewählte Elemente | |
+ | - 1 oder mehr ausgewählte Elemente | |
multiple, 2+ | - 2 oder mehr ausgewählte Elemente | |
n | - Eine genaue Anzahl ausgewählter Elemente. Bei der Angabe enablesFor=" 4" wird die Aktion beispielsweise nur dann aktiviert, wenn 4 Elemete ausgewählt sind. | |
* | - Beliebig viele ausgewählte Elemente |
<!ELEMENT menu (separator+ , groupMarker*)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #REQUIRED
path CDATA #IMPLIED>
Mit diesem Element wird ein neues Menü definiert.
<!ELEMENT separator EMPTY>
<!ATTLIST separator
name CDATA #REQUIRED>
Mit diesem Element wird im neuen Menü ein Menütrennzeichen erstellt.
<!ELEMENT groupMarker EMPTY>
<!ATTLIST groupMarker
name CDATA #REQUIRED>
Mit diesem Element wird im neuen Menü eine benannte Gruppe erstellt. Anders als das Element separator gibt es für dieses Element im neuen Menü keine sichtbare Darstellung.
<!ELEMENT selection EMPTY>
<!ATTLIST selection
class CDATA #REQUIRED
name CDATA #IMPLIED>
Mit diesem Element wird die Aktionsaktivierung anhand der aktuellen Auswahl ermittelt. Es wird ignoriert, wenn das Element enablement angegeben ist.
<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Mit diesem Element wird die Aktivierung der Erweiterung definiert.
<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Dieses Element definiert die Sichtbarkeit für die Erweiterung.
<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Dieses Element stellt eine Boolesche Operation AND für das Ergebnis der Auswertung seiner beiden Unterelementausdrücke dar.
<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Dieses Element stellt eine Boolesche Operation OR für das Auswertungsergebnis seiner beiden Unterelementausdrücke dar.
<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Dieses Element stellt eine Boolesche Operation NOT für das Ergebnis der Auswertung seiner Unterelementausdrücke dar.
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED>
Mit diesem Element wird die Klasse oder Schnittstelle aller Objekte in der aktuellen Auswahl ausgewertet. Wenn jedes Objekt in der Auswahl die angegebene Klasse oder Schnittstelle implementiert, wird der Ausdruck mit dem Ergebnis "true" ausgewertet.
<!ELEMENT objectState EMPTY>
<!ATTLIST objectState
name CDATA #REQUIRED
value CDATA #REQUIRED>
Mit diesem Element wird der Attributstatus aller Objekte in der aktuellen Auswahl ausgewertet. Wenn jedes Objekt in der Auswahl den angegebenen Attributstatus aufweist, wird der Ausdruck mit dem Ergebnis "true" ausgewertet. Damit dieser Typ Ausdruck ausgewertet wird, muss jedes Objekt in der Auswahl die Schnittstelle org.eclipse.ui.IActionFilter implementiere oder ihr zugeordnet sein.
<!ELEMENT pluginState EMPTY>
<!ATTLIST pluginState
id CDATA #REQUIRED
value (installed|activated) "installed">
Mit diesem Element wird der Status eines Plug-ins ausgewertet. Der Status des Plug-ins kann installed (entspricht dem OSGi-Konzept 'resolved') oder activated (entspricht dem OSGi-Konzept 'active') lauten.
<!ELEMENT systemProperty EMPTY>
<!ATTLIST systemProperty
name CDATA #REQUIRED
value CDATA #REQUIRED>
Mit diesem Element wird der Status einer bestimmten Systemeigenschaft ausgewertet. Der Eigenschaftswert wird aus java.lang.System abgerufen.
<extension point =
"org.eclipse.ui.actionSets"
>
<actionSet id=
"com.xyz.actionSet"
label=
"My Actions"
>
<menu id=
"com.xyz.xyzMenu"
label=
"XYZ Menu"
path=
"additions"
>
<separator name=
"group1"
/>
<separator name=
"option1"
/>
</menu>
<action id=
"com.xyz.runXYZ"
label=
"&Run XYZ Tool"
style=
"toggle"
state=
"false"
menubarPath=
"com.xyz.xyzMenu/group1"
icon=
"icons/runXYZ.gif"
tooltip=
"Run XYZ Tool"
helpContextId=
"com.xyz.run_action_context"
class=
"com.xyz.actions.RunXYZ"
enablesFor=
"1"
>
<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
/>
</action>
<action id=
"com.xyz.runABC"
label=
"&Run ABC Tool"
style=
"push"
menubarPath=
"com.xyz.xyzMenu/group1"
toolbarPath=
"Normal/XYZ"
icon=
"icons/runABC.gif"
tooltip=
"Run ABC Tool"
helpContextId=
"com.xyz.run_abc_action_context"
retarget=
"true"
allowLabelUpdate=
"true"
>
<enablement>
<and>
<objectClass name=
"org.eclipse.core.resources.IFile"
/>
<not>
<objectState name=
"extension"
value=
"java"
/>
</not>
</and>
</enablement>
</action>
<action id=
"com.xyz.runDEF"
label=
"&Run DEF Tool"
style=
"radio"
state=
"true"
menubarPath=
"com.xyz.xyzMenu/option1"
icon=
"icons/runDEF.gif"
tooltip=
"Run DEF Tool"
class=
"com.xyz.actions.RunDEF"
helpContextId=
"com.xyz.run_def_action_context"
>
</action>
<action id=
"com.xyz.runGHI"
label=
"&Run GHI Tool"
style=
"radio"
state=
"false"
menubarPath=
"com.xyz.xyzMenu/option1"
icon=
"icons/runGHI.gif"
tooltip=
"Run GHI Tool"
class=
"com.xyz.actions.RunGHI"
helpContextId=
"com.xyz.run_ghi_action_context"
>
</action>
<action id=
"com.xyz.runJKL"
label=
"&Run JKL Tool"
style=
"radio"
state=
"false"
menubarPath=
"com.xyz.xyzMenu/option1"
icon=
"icons/runJKL.gif"
tooltip=
"Run JKL Tool"
class=
"com.xyz.actions.RunJKL"
helpContextId=
"com.xyz.run_jkl_action_context"
>
</action>
</actionSet>
</extension>
Im oben dargestellten Beispiel ist das angegebene Aktionsset "My Actions" anfänglich nicht in jeder Perspektive sichtbar, weil das Attribut visible nicht angegeben ist.
Die Aktion "XYZ" wird als Markierungsfeldoption angezeigt, die anfänglich nicht ausgewählt ist. Sie wird nur dann aktiviert, wenn der Auswahlzähler 1 beträgt und die Auswahl eine Java-Dateiressource enthält.
Die Aktion "ABC" wird sowohl im Menü als auch in der Symbolleiste angezeigt. Sie wird nur dann aktiviert, wenn die Auswahl keine Java-Dateiressourcen enthält. Bitte beachten Sie, dass es sich hierbei auch um eine Aktion für ein neues Bezeichnungsziel handelt. Daher wird kein Attribut class bereitgestellt.
Die Aktionen "DEF", "GHI" und "JKL" werden als Optionsfelder angezeigt. Sie sind - unabhängig vom aktuellen Status der Auswahl - immer aktiviert.
Die Aktivierungsbedingung für eine Aktionserweiterung ist anfänglich durch enablesFor definiert und ebenfalls durch selection oder enablement. Sobald der Aktionsstellvertreter als Exemplar erstellt wurde, kann sie den Aktionsaktivierungsstatus jedoch direkt in ihrer Methode selectionChanged steuern.
Es muss unbedingt beachtet werden, dass die Workbench die Generierung des Menüs für ein Plug-in nicht übernimmt. Menüpfade müssen auf Menüs verweisen, die bereits vorhanden sind.
Aktions- und Menübezeichnungen können Sonderzeichen für die Codierung von mnemonischen Zeichen enthalten. Hierbei gelten die folgenden Regeln:
Die Elemente selection und enablement schließen sich gegenseitig aus. Das Element enablement kann das Element selection unter Verwendung der Unterelemente objectClass und objectState ersetzen. So kann beispielsweise die folgende Codierung:
ebenfalls unter Verwendung der folgenden Angaben ausgedrückt werden:<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>
Menüs der höchsten Ebene werden erstellt, indem die folgenden Werte für das Attribut "path" verwendet werden:
Die Standardgruppen in einem Workbenchfenster sind in der Schnittstelle IWorkbenchActionConstants definiert. Diese Konstanten können zur dynamischen Ergänzung im Code verwendet werden. Die Werte können außerdem in eine XML-Datei kopiert werden, damit eine differenzierte Integration in die vorhandenen Menüs und die Symbolleiste der Workbench erreicht wird.
Verschiedene Menü- und Symbolleistenoptionen im Workbenchfenster werden algorithmisch definiert. In diesen Fällen muss ein separater Mechanismus verwendet werden, um das Fenster zu erweitern. Das Hinzufügen einer neuen Workbenchsicht führt beispielsweise dazu, dass im Menü "Perspektive" eine neue Menüoption angezeigt wird. Erweiterungen für Import- und Exportassistenten sowie für Assistenten für neue Ressourcen werden ebenfalls automatisch zum Fenster hinzugefügt.
Copyright (c) 2000, 2004 IBM Corporation und Andere.
Alle Rechte vorbehalten. Dieses Programm und sein Begleitmaterial werden gemäß den Bedingungen der "Eclipse Public License v1.0" zur Verfügung gestellt, die dieser Lieferung beiliegt und unter
http://www.eclipse.org/legal/epl-v10.html abgerufen werden kann.