Définitions d'actions

Une définition d'action est la déclaration d'une action par son ID. Les définitions d'actions sont utilisées pour déclarer des actions sémantiques afin que les actions définies dans des ensembles et des éditeurs puissent s'associer à une définition d'action sémantique donnée. La séparation de la définition d'action et de son implémentation permet à de nombreux plug-in de définir des actions implémentant la même action sémantique. La définition d'action correspond à ce qui est associé aux combinaisons de touches de raccourcis.

Le plan de travail établit diverses définitions d'actions courantes dans son fichier plugin.xml et les plug-in sont invités à associer leurs propres actions à ces définitions 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 définition d'action

Les définitions d'actions sont établies à l'aide du point d'extension org.eclipse.ui.actionDefinitions. Ci-après un fragment des marques du plan de travail :

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

La définition en soi est simple. Elle spécifie un ID pour une action sémantique. Une définition d'action devient uniquement concrète lorsqu'un plug-in associe son action à la définition.

Association d'une action à une définition d'action

Les actions peuvent associées à une définition d'action dans le code ou dans le fichier plugin.xml. 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. Ce cas se vérifie notamment lorsque l'action est créée. WorkbenchActionBuilder utilise cette technique pour initialiser ses actions.  

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);
	...

De cette façon, l'action d'implémentation (SaveAction) est associée à la définition d'action saveActionDefId. A quoi correspond saveActionDefId ? Si vous jetez un oeil aux définitions de zones statiques dans WorkbenchActionBuilder, vous voyez ce qui suit :

private static final String saveActionDefId = "org.eclipse.ui.file.save";

Il est bienvenu de définir des constantes pour vos définitions d'actions afin d'en faciliter les références dans le code. 

Si vous définissez une action dans un ensemble 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'u menu ou du clavier. Dans ce cas, vous pouvez associer votre action à une définition d'action dans les marques XML. Ci-après des marques hypothétiques pour un ensemble 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 définition d'action pour l'action.

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

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

 

Copyright IBM Corp. and others 2000,2002.