Commandes

Une commande est la déclaration d'une action de l'utilisateur par son id.  Les commandes sont utilisées pour déclarer des actions sémantiques afin que les implémentations d'action définies dans des ensembles d'actions et des éditeurs puissent s'associer à une commande sémantique donnée.  La séparation de la commande et de l'implémentation d'action permet à de nombreux plug-in de définir des actions implémentant la même commande sémantique.  La commande correspond à ce qui est associé à une combinaison de touches particulière.

Le plan de travail établit diverses commandes courantes dans son fichier plugin.xml et les plug-in sont invités à associer leurs propres actions à ces commandes lorsqu'approprié.  De cette façon, les actions identiques sur le plan sémantique et implémentées dans différents plug-in peuvent partager la même combinaison de touches.

Définition d'une commande

Les commandes sont définies à l'aide du point d'extension org.eclipse.ui.commands.  L'exemple suivant provient des marques du plan de travail :

<extension
	point="org.eclipse.ui.commands">
	...
	<command
		name="%command.save.name"
		description="%command.save.description"
		categoryId="org.eclipse.ui.category.file"
		id="org.eclipse.ui.file.save">
	</command>
	...

La définition de commande indique un nom, une description et un id pour l'action. Il indique aussi pour la commande une catégorie utilisée pour regrouper les commandes dans la boîte de dialogue des préférences. Les catégories sont également définies dans le point d'extension org.eclipse.ui.commands :

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

Aucune implémentation n'est spécifiée pour une commande.  Une commande ne se concrétise que lorsqu'un plug-in a associé son action à son ID de commande.

Association d'une action à une commande

Les actions peuvent être associées à une commande dans le code ou dans le fichier plugin.xmlfor action sets.  Votre choix dépend de l'endroit où l'action est définie.

Les actions instanciées dans le code peuvent également être associées à une définition d'action à l'aide du protocole IAction. Cette opération est généralement effectuée lorsque l'action est créée. SaveAction utilise cette technique lors de sa propre initialisation.

public SaveAction(IWorkbenchWindow window) {
	...
	setText...
	setToolTipText...
	setImageDescriptor...
	setActionDefinitionId("org.eclipse.ui.file.save"); 
}

(Remarque :  setCommandID est un nom plus approprié pour la méthode setActionDefinitionID.  En effet, le nom de méthode reflétant l'implémentation d'origine des combinaisons de touches, la terminologie employée est ici obsolète.)

En appelant setActionDefinitionID, l'action d'implémentation (SaveAction) est associée à l'ID commande qui a été utilisé dans le marquage de la définition de la commande. Il est approprié de définir des constantes pour les définitions d'action afin de faciliter leur référencement dans le code.

Si vous définissez une action dans un jeu d'actions, il est généralement inutile de l'instancier vous-même.  Le plan de travail s'en charge lorsque l'utilisateur appelle votre action à partir d'un menu ou du clavier.  Dans ce cas, vous pouvez associer votre action à un ID de commande dans les marques XML.  Ci-après des marques hypothétiques pour un jeu d'actions :

<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>

L'attribut definitionID est utilisé pour déclarer un ID de commande pour l'action.

Quelle que soit la technique employée, l'association de votre action à un ID de commande entraîne l'appel de votre action au moment opportun par les combinaisons de touches définies pour la commande org.eclipse.ui.file.save

Penchons-nous à présent sur le mode de définition de ces combinaisons de touches.