Befehle

Bei einem Befehl handelt es sich um die Deklaration einer Benutzeraktion anhand des Parameters id.  Befehle werden zum Deklarieren semantischer Aktionen verwendet, so dass die in den Aktionssets und Editoren definierten Aktionen sich einem bestimmten semantischen Befehl zuordnen können.  Die Trennung des Befehls von der Aktionsimplementierung ermöglicht verschiedenen Plug-ins das Definieren von Aktionen, die den gleichen semantische Befehl implementieren.  Dem Befehl wird hierbei eine spezielle Tastenbelegung zugeordnet.

Die Workbench definiert in der Datei plugin.xml zahlreiche allgemeine Befehle. Die Plug-ins sollten, sofern dies im konkreten Fall sinnvoll ist, eigene Aktionen diesen Befehlen zuordnen.  Auf diese Weise können semantisch ähnliche Aktionen, die in unterschiedlichen Plug-ins implementiert sind, die gleiche Tastenbelegung verwenden.

Befehl definieren

Befehle werden mit Hilfe des Erweiterungspunktes org.eclipse.ui.commands definiert.  Im Folgenden ist das Befehlsformat der Workbench aufgeführt:

<extension
         point="org.eclipse.ui.commands">
      ...
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.close.name"
            description="%command.close.description"
            id="org.eclipse.ui.file.close">
      </command>
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.closeAll.name"
            description="%command.closeAll.description"
            id="org.eclipse.ui.file.closeAll">
      </command>
      <command
	    category="org.eclipse.ui.category.file"
            name="%command.save.name"
            icon="icons/full/ctool16/save_edit.gif"
            description="%command.save.description"
            id="org.eclipse.ui.file.save">
      </command>
      ...     

Die Befehlsdefinition gibt für die Aktion die Parameter name, description und id an.    Außerdem benennt sie eine Kategorie für den Befehl, mit deren Hilfe Befehl im Benutzervorgabendialog gruppiert werden.  Die Kategorie sind ebenfalls im Erweiterungspunkt org.eclipse.ui.commands definiert:


      ...
      <category
            name="%category.file.name"
            description="%category.file.description"
            id="org.eclipse.ui.category.file">
      </category>
      ...

Bitte beachten Sie, dass für einen Befehl keine Implementierung angegeben ist.   Ein Befehl wird nur dann konkret, wenn ein Plug-in seine Aktion der Befehls-ID zuordnet.

Aktion zu Befehl zuordnen

Aktionen können einem Befehl ü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);
	...

(Hinweis:  Der Methodenname setActionDefinitionID müsste eigentlich passender setCommandID lauten.  Der Methodenname gibt die ursprüngliche Implementierung von Tastenbelegungen wieder und verwendete veraltete Terminologie.)

Durch das Aufrufen von setActionDefinitionID wird die Implementierungsaktion (SaveAction) der Befehls-ID 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";

Diese Konstante definiert die Zeichenfolgen-ID, die in den Konfigurationsbefehlen für die Befehlsdefinition verwendet wurde.  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 die Aktion 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 Befehls-ID 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 Befehls-ID für eine bestimmte Aktion verwendet.

Wenn Sie mit einem dieser beiden Verfahren Ihre Aktion einer Befehls-ID zuordnen, dann rufen die dabei für den Befehl org.eclipse.ui.file.save definierten Tastenbelegungen die Aktion zum geeigneten Zeitpunkt auf. 

Im Folgenden wird die Definition dieser Tastenbelegungen beschrieben.

 

Copyright IBM Corporation und Andere 2000, 2003.