Acciones del conjunto de acciones redirigibles

El conjunto de acciones de la herramienta readme también define acciones redirigibles.  La acción estará visible siempre que lo esté el conjunto de acciones del readme, pero solo estará habilitada cuando esté activa una vista o un editor que implemente la acción.  Si se utilizan conjuntos de acciones para definir acciones redirigibles, las acciones se crean en los códigos XML del conjunto de acciones, en vez de en el código.  Los siguientes códigos XML proceden de la definición de conjunto de acciones de la herramienta readme:

<extension point = "org.eclipse.ui.actionSets">
	   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
		   label="%ActionSet.name"
		   visible="true">
...
<action id="org_eclipse_ui_examples_readmetool_readmeRetargetAction"
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
   label="%ReadmeRetargetAction.label"
   tooltip="%ReadmeRetargetAction.tooltip"
   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
   icon="icons/ctool16/openbrwsr.png"
   retarget="true">
</action>
<action id="org_eclipse_ui_examples_readmetool_readmeRelabelRetargetAction"
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
   label="%ReadmeRelabelRetargetAction.label"
   tooltip="%ReadmeRelabelRetargetAction.tooltip"
   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
   icon="icons/ctool16/openbrwsr.png"
   retarget="true"	
   allowLabelUpdate="true">
</action>
...

Las acciones redirigidas se especifican con el atributo retarget="true".  Esto provocará la creación de una RetargetAction en el conjunto de acciones.  Observe que las acciones redirigibles no especifican una clase de implementación, porque será cada vista o editor del conector el que se encargue de configurar un manejador que implemente cada una de las acciones.  Si el valor de allowLabelUpdate es true, la acción que se creará será de tipo LabelRetargetAction.

Las acciones redirigidas estarán visibles en el menú Ventana siempre que esté visible el conjunto de acciones del readme.  Sin embargo, no estarán habilitadas si no están activos el editor o la vista Esquema de la herramienta readme.

Menú Editor de archivos readme con dos elementos inactivos y un elemento habilitado

 

¿Qué deben hacer el editor y la vista?  Nuevamente, el proceso del lado del cliente es similar al de registrar un manejador para una acción redirigible del entorno de trabajo o de un editor.  Al registrar un manejador de acción global, hay que utilizar el ID de acción especificado en los códigos XML.

El objeto ReadmeEditorActionBarContributor se encarga de ello en el caso del editor.  En primer lugar, define los manejadores de las acciones.

public ReadmeEditorActionBarContributor() {
	...
	handler4 = new EditorAction(MessageUtil.getString("Editor_Action4")); 
	handler5 = new EditorAction(MessageUtil.getString("Editor_Action5")); 
	handler5.setToolTipText(MessageUtil.getString("Readme_Editor_Action5"));
	...
}

Los manejadores se registran en el mismo momento en que se registraron los manejadores de las acciones redirigibles del editor.

public void init(IActionBars bars, IWorkbenchPage page) {
	...
	bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_RETARGET4, handler4);
	bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_LABELRETARGET5, handler5);
	...
}

Recuerde que los contribuyentes de barra de acciones se comparten entre las distintas instancias de un mismo editor.  Esto significa que hay que informar a los manejadores si cambia el editor activo de ReadmeEditorActionBarContributor.

public void setActiveEditor(IEditorPart editor) {
	...
	handler4.setActiveEditor(editor);
	handler5.setActiveEditor(editor);
	...
}

Esto es todo por lo respecta al editor.  Debemos ver estas acciones habilitadas cuando se activa el editor.

Menú Editor de Archivo Readme con acciones habilitadas 

Observe que no se ha utilizado la etiqueta de la primera acción redirigible ("Acción 4 del editor") porque los códigos XML del conjunto de acciones no establecieron allowLabelUpdate.

El objeto ReadmeContentOutlinePage define sus manejadores en el mismo lugar en que definió los manejadores de las acciones redirigibles del editor:

    public void createControl(Composite parent) {
	...
	action = new OutlineAction(MessageUtil.getString("Outline_Action4")); 
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_RETARGET4, 
		action);  
	action = new OutlineAction(MessageUtil.getString("Outline_Action5")); 
	action.setToolTipText(MessageUtil.getString("Readme_Outline_Action5")); 
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_LABELRETARGET5, 
		action);  
}

Debemos ver la acción con la nueva etiqueta cuando esté activo el esquematizador del contenido.

Menú Editor de archivos readme con acción renombrada