Acções de conjunto de acções redestinável

O conjunto de acções da ferramenta readme também define acções redestináveis.  a acção fica visível enquanto o conjunto de acções readme estiver visível, mas só fica activa quando uma vista ou um editor que implemente a acção ficar activo(a).  Ao utilizar conjuntos de acções para definir acções redestináveis, as acções são criadas na marcação do conjunto de acções e não no código.  O seguinte é oriundo da definição do conjunto de acções da ferramenta 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>
...

As acções redestináveis são especificadas com o atributo retarget="true".  Isto causará a criação de uma RetargetAction no conjunto de acções.  Repare que as acções redestináveis não especificam uma classe de implementação dado que compete a cada vista ou editor no plug-in configurar uma rotina de tratamento que implemente cada acção.  Se allowLabelUpdate for verdadeiro (true) será criada LabelRetargetAction .

As acções redestináveis ficarão visíveis no menu da janela quando o conjunto de acções readme fica visível.  Todavia, não ficarão visíveis se o editor ou a vista de destaque da ferramenta readme não estiver activa(o).

Editor de ficheiro readme com dois artigos a cinzento e um artigo activado

 

Qual a relação do editor e da vista?  Mais uma vez, o lado do cliente é semelhante ao registo de uma rotina de tratamento para a área de trabalho ou uma acção redestinável do editor.  O ID da acção especificado na marcação deve ser usado quando se regista uma rotina de tratamento de acção global.

O ReadmeEditorActionBarContributor encarrega-se disto para o editor. Primeiro, define as rotinas de tratamento para as acções.

   public ReadmeEditorActionBarContributor() {
	...
	handler4 = new EditorAction(MessageUtil.getString("Acção_Editor4")); 
	handler5 = new EditorAction(MessageUtil.getString("Acção_Editor5"));
	handler5.setToolTipText(MessageUtil.getString("Acção_Editor_Readme5"));
	...
}

As rotinas de tratamento são registadas ao mesmo tempo que as rotinas de tratamento para as acções redestináveis do editor o foram.

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

Lembre-se que os contribuintes de barras de acções são partilhados entre diferentes instâncias do mesmo editor. Significa isto que as rotinas de tratamento devem ser notificadas se o editor activo do ReadmeEditorActionBarContributor for alterado.

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

E já está no que respeita ao editor.  Devemos ver estas acções activadas quando o editor o for também.

Menu do editor do ficheiro readme com acções activadas 

Repare que a etiqueta para a primeira acção redestinável ("Acção de Editor 4") não foi usada dado que a marcação XML do conjunto de acções não definiu allowLabelUpdate.

A ReadmeContentOutlinePage define as suas rotinas de tratamento no mesmo lugar que definiu rotinas de tratamento para as acções redestináveis do editor:

    public void createControl(Composite parent) {
	...
	action = new OutlineAction(MessageUtil.getString("Acção_Destaque4")); 
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_RETARGET4, 
		action);  
	action = new OutlineAction(MessageUtil.getString("Acção_Destaque5")); 
	action.setToolTipText(MessageUtil.getString("Acção_Destaque_Readme5")); 
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.ACTION_SET_LABELRETARGET5, 
		action);  
}

Devemos ver a sua acção reetiquetada quando o destacador de conteúdos estiver activo.

Menu do editor do ficheiro readme com acção de nome mudado