Actions de jeux d'actions redirigeables

Le jeu d'actions de l'outil readme définit également des actions redirigeables. L'action est visible tant que le jeu l'est aussi, mais est uniquement activée lorsque la vue (ou l'éditeur) l'implémentant est active. Lorsqu'un jeu d'actions est utilisé pour créer des actions redirigeables, ces dernières sont créées dans les marques du jeu au lieu du code. Voici un fragment de la définition du jeu d'actions de l'outil 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>
...

Les actions redirigées sont spécifiées à l'aide de l'attribut retarget="true". S'ensuit alors la création de RetargetAction dans le jeu d'actions . Les actions redirigeables n'indiquent pas une classe d'implémentation car chaque vue (ou éditeur) du plug-in est chargée de configurer un gestionnaire implémentant les actions. Si allowLabelUpdate possède la valeur true, LabelRetargetAction sera créé à la place.

Les actions redirigées seront visibles dans le menu Fenêtre lorsque le jeu d'actions du readme sera lui aussi visible. Toutefois, elles ne seront pas activées si l'éditeur ou la vue d'aperçu de l'outil readme ne sont pas actifs.

Menu de l'Editeur de fichier Readme avec deux éléments gris et un élément actif

 

Que doivent faire l'éditeur et la vue ? Là encore, le côté client s'apparente à l'enregistrement d'un gestionnaire pour le plan de travail ou une action redirigeable de l'éditeur. L'ID d'action spécifié dans les marques doit être utilisé lors de l'enregistrement d'un gestionnaire d'action globale.

ReadmeEditorActionBarContributor se charge de l'opération pour l'éditeur. Tout d'abord, il définit les gestionnaires des actions.

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

Les gestionnaires sont enregistrés en même temps que ceux pour les actions redirigeables de l'éditeur.

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

Pour rappel, les contributeurs de le barre d'actions sont partagés entre les diverses instance du même éditeur. Par conséquent, les gestionnaires doivent être informés si l'éditeur actif pour ReadmeEditorActionBarContributor change.

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

C'est en fini pour l'éditeur. Ces actions doivent s'activer lorsque l'éditeur est actif.

Menu de l'éditeur du fichier readme avec des actions activées 

Le libellé pour la première action redirigeable ("Editor Action 4") n'a pas été utilisé car les marques XML du jeu d'actions n'ont pas défini allowLabelUpdate.

ReadmeContentOutlinePage définit ses gestionnaires au même endroit que ceux des actions redirigeables de l'éditeur :

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

L'action renommée doit apparaître lorsque le décomposeur de contenu est actif.

Menu Editeur de fichier Readme avec une action renommée