Definiciones de acciones

La definición de una acción es la declaración de una acción por su id. Las definiciones de las acciones permiten declarar acciones semánticas para que las acciones definidas en los conjuntos de acciones se puedan asociar a una determinada definición de acción semántica. La separación entre la definición de una acción y su implementación hace posible que múltiples conectores definan acciones que implementen una misma acción semántica. La definición de una acción es lo que se asocia a las combinaciones de teclas aceleradoras.

El entorno de trabajo tiene muchas definiciones de acciones comunes en el archivo plugin.xml; conviene que los conectores asocien sus propias acciones a estas definiciones, siempre que ello tenga sentido. De esta manera, las acciones similares desde el punto de vista semántico y que estén implementadas en los distintos conectores pueden compartir un mismo enlace de teclas.

Definir una definición de acción

Las definiciones de acciones se realizan con el punto de extensión org.eclipse.ui.actionDefinitions. A continuación figuran los códigos XML del entorno de trabajo:

<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 definición en sí es muy sencilla. Tan solo especifica un id para una acción semántica. Una definición de acción solo pasa a ser concreta cuando un conector asocia su acción a la definición.

Asociar una acción a una definición de acción

Las acciones se pueden asociar a una definición de acción en el código o en el archivo plugin.xml de los conjuntos de acciones. Su elección depende de dónde esté definida la acción.

Las acciones cuyas instancias se crean en el código también se pueden asociar a una definición de acción mediante el protocolo IAction. Esto se suele hacer en el momento de crear la acción. El constructor WorkbenchActionBuilder emplea esta técnica para inicializar sus acciones. 

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 esta manera, la acción de implementación SaveAction se asocia a la definición de acción saveActionDefId. ¿Qué es saveActionDefId? Veamos qué indican las definiciones de campo estático de WorkbenchActionBuilder:

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

Es una buena costumbre definir constantes para las definiciones de acciones para que resulte fácil hacer referencia a ellas en el código. 

Si define una acción en un conjunto de acciones, lo normal es que no sea necesario que cree usted mismo una instancia de ella. El entorno de trabajo lo hará automáticamente cuando el usuario invoque la acción desde un menú o desde el teclado. En ese caso, puede asociar su acción a una definición de acción en los códigos XML. A continuación figuran los códigos XML hipotéticos de un conjunto de acciones:

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="com.example.actions.actionSet"
		   label="Acciones de ejemplo"
		   visible="true">
		   <action id="com.example.actions.action1"
			   menubarPath="additions"
			   label="Acción de guardar de ejemplo"
			   class="org.example.actions.ExampleActionDelegate"
			   definitionID="org.eclipse.ui.file.save">
		   </action>
		   ...
	   </actionSet>
   </extension>

El atributo definitionID sirve para declarar un id de definición de la acción.

Mediante una de estas dos técnicas, el hecho de asociar la acción a una definición de acción hace que los enlaces de teclas que queden definidos para la definición de acción org.eclipse.ui.file.save invoquen la acción en el momento oportuno. 

Veamos ahora cómo se definen los enlaces de teclas.

 

Copyright IBM Corp. y otros 2000, 2002.