Bei einer Aktionsdefinition handelt es sich um die Deklaration einer Aktion anhand des Parameters id. Aktionsdefinitionen werden zum Deklarieren semantischer Aktionen verwendet, so dass die in den Aktionssets und Editoren definierten Aktionen sich einer bestimmten semantischen Aktionsdefinition zuordnen können. Die Trennung der Aktionsdefinition von der Aktionsimplementierung ermöglicht verschiedenen Plug-ins das Definieren von Aktionen, die die gleiche semantische Aktion implementieren. Die Aktionsdefinition wird hierbei den Tastenkombinationen für die Direktaufrufe zugeordnet.
Die Workbench definiert in der Datei plugin.xml zahlreiche allgemeine Aktionsdefinitionen. Die Plug-ins sollten, sofern dies im konkreten Fall sinnvoll ist, eigene Aktionen diesen Definitionen zuordnen. Auf diese Weise können semantisch ähnliche Aktionen, die in unterschiedlichen Plug-ins implementiert sind, die gleiche Tastenbelegung verwenden.
Aktionsdefinitionen werden mit Hilfe des Erweiterungspunktes org.eclipse.ui.actionDefinitions definiert. Im Folgenden ist das Befehlsformat der Workbench aufgeführt:
<extension point="org.eclipse.ui.actionDefinitions"> <actionDefinition id="org.eclipse.ui.file.close"> </actionDefinition> <actionDefinition id="org.eclipse.ui.file.closeAll"> </actionDefinition> <actionDefinition id="org.eclipse.ui.file.save"> </actionDefinition> ...
Die Definition selbst ist einfach. Es wird lediglich eine ID für eine semantische Aktion angegeben. Eine Aktionsdefinition nimmt erst dann konkrete Formen an, wenn ein Plug-in seiner Aktion diese Definition zuordnet.
Aktionen können einer Aktionsdefinition über den Code oder in der Datei plugin.xml für Aktionssets zugeordnet werden. Die Auswahl dieser Optionen hängt davon ab, wo die Aktion definiert wird.
Aktionen, die im Code als Exemplar erstellt werden, können auch mit Hilfe des Protokolls IAction einer Aktionsdefinition zugeordnet werden. Dieser Arbeitsschritt wird normalerweise bei der Erstellung der Aktion ausgeführt. In WorkbenchActionBuilder wird dieses Verfahren zum Initialisieren der zugehörigen Aktionen verwendet.
private void makeActions() { ... saveAction = new SaveAction(window); saveAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT)); saveAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_HOVER)); saveAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_DISABLED)); partService.addPartListener(saveAction); saveAction.setActionDefinitionId(saveActionDefId); ...
Auf diese Weise wird die Implementierungsaktion (SaveAction) der Aktionsdefinition saveActionDefId zugeordnet. Die Bedeutung von saveActionDefId wird durch eine kurze Erläuterung der statischen Felddefinitionen in WorkbenchActionBuilder im Folgenden verdeutlicht:
private static final String saveActionDefId = "org.eclipse.ui.file.save";
Es wird empfohlen, Konstanten für die verwendeten Aktionsdefinitionen zu definieren, so dass im Code auf einfache Weise auf sie verwiesen werden kann.
Wenn Sie eine Aktion in einem Aktionsset definieren, müssen Sie dieses normalerweise nicht selbst als Exemplar erstellen. Diesen Arbeitsschritt führt die Workbench aus, wenn der Benutzer Ihre Aktion in einem Menü oder über die Tastatur aufruft. In diesem Fall können Sie Ihre Aktion einer Aktionsdefinition im XML-Befehlsformat zuordnen. Im Folgenden ist ein Beispiel für das Befehlsformat eines Aktionssets aufgeführt:
<extension point = "org.eclipse.ui.actionSets"> <actionSet id="com.example.actions.actionSet" label="Example Actions" visible="true"> <action id="com.example.actions.action1" menubarPath="additions" label="Example Save Action" class="org.example.actions.ExampleActionDelegate" definitionID="org.eclipse.ui.file.save"> </action> ... </actionSet> </extension>
Das Attribut definitionID wird zum Deklarieren einer Aktionsdefinitions-ID für eine bestimmte Aktion verwendet.
Wenn Sie mit einem dieser beiden Verfahren Ihre Aktion einer Aktionsdefinition zuordnen, dann rufen die dabei für die Aktionsdefinition org.eclipse.ui.file.save definierten Tastenbelegungen die Aktion zum geeigneten Zeitpunkt auf.
Im Folgenden wird die Definition dieser Tastenbelegungen beschrieben.