Azioni dell'insieme delle azioni ridestinabili

L'insieme delle azioni dello strumento readme definisce anche le azioni ridestinabili.  L'azione rimane visibile finché la serie delle azioni readme è visibile, ma è attiva soltanto quando una visualizzazione o un editor che la implementano sono attivi.  Quando per definire azioni ridestinabili si utilizzano serie di azioni, le azioni vengono create nel tag della serie piuttosto che nel codice.  Il codice di seguito riportato è tratto dalla definizione della serie di azioni dello strumento 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.gif"
   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.gif"
   retarget="true"	
   allowLabelUpdate="true">
</action>
...

Le azioni ridestinabili vengono specificate utilizzando l'attributo retarget="true".  Questo farà sì che nella serie di azioni venga creata una RetargetAction.  Si noti che le azioni ridestinabili non specificano una classe di implementazione, poiché è compito di ciascuna visualizzazione o editor del plug-in impostare un gestore che implementi ciascuna azione.  Se allowLabelUpdate è true, allora verrà creata una LabelRetargetAction.

Le azioni ridestinabili saranno visibili nel menu della finestra quando l'insieme delle azioni readme è visibile.  Tuttavia, non saranno abilitate se l'editor o la visualizzazione di struttura dello strumento readme non sono attivi.

Menu dell'editor del file readme con due voci in grigio e una abilitata

 

Cosa devono fare editor e visualizzazione?  Anche in questo caso, il lato client esegue un'operazione simile alla registrazione di un gestore per il workbench o di un'azione ridestinabile dell'editor.  Quando si registra un gestore di azione globale, è necessario utilizzare l'id dell'azione specificato nel tag.

Questa operazione viene gestita dal ReadmeEditorActionBarContributor per l'editor.  Per prima cosa, vengono definiti i gestori per le azioni.

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

I gestori vengono registrati contemporaneamente ai gestori per le azioni ridestinabili dell'editor.

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

E importante ricordare che i contributor della barra delle azioni sono condivisi da istanze differenti di uno stesso editor.  Ciò significa che se l'editor attivo per il ReadmeEditorActionBarContributor cambia, i gestori devono esserne informati.

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

Tutto questo è valido per l'editor.  Quando quest'ultimo è attivato, lo saranno anche queste azioni.

Menu dell'editor del file readme con azioni attivate 

Si noti che l'etichetta della prima azione ridestinabile ("Azione 4 dell'editor") non è stata utilizzata dal momento che il tag XML della serie di azioni non ha impostato allowLabelUpdate.

ReadmeContentOutlinePage definisce i propri gestori nello stessa posizione in cui ha definito i gestori per le azioni ridestinabili dell'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);  
}

Quando la struttura del contenuto è attiva sarà possibile vedere questa azione con la nuova etichetta.

Menu dell'editor del file readme con un'azione rinominata

 

Copyright
IBM Corp. e altri 2000,2002.