Ações do Conjunto de Ações Reatingíveis

O conjunto de ações da ferramenta Leia-me também define ações reatingíveis.  A ação permanece visível enquanto o conjunto de ações de Leia-me estiver visível, mas só será ativada quando uma exibição ou editor que implementar a ação estiver ativo.  Ao utilizar conjuntos de ações para definir ações reatingíveis, as ações serão criadas na marcação do conjunto de ações, em vez de no código.  O seguinte exemplo é da definição do conjunto de ações da ferramenta Leia-me:

<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>
...

As ações reatingíveis são especificadas utilizando o atributo retarget="true".  Isso fará com que uma RetargetAction seja criada no conjunto de ações.  Observe que as ações reatingíveis não especificam uma classe de implementação, pois cabe a cada exibição ou editor no plug-in configurar uma rotina de tratamento que implemente cada ação.  Se allowLabelUpdate for true, uma LabelRetargetAction será criada no lugar.

As ações reatingíveis ficarão visíveis no menu da janela quando o conjunto de ações de Leia-me estiver visível.  No entanto, não serão ativadas se a exibição de outline ou o editor da ferramenta Leia-me não estiver ativo.

Menu Editor do Arquivo Readme com dois itens acinzentados (desativados) e um ativado

 

O que o editor e a exibição precisam fazer?  Novamente, o lado do cliente é semelhante a registrar uma rotina de tratamento do workbench ou uma ação reatingível do editor.  O ID da ação especificado na marcação deve ser utilizado ao registrar uma rotina de tratamento de ação global.

O ReadmeEditorActionBarContributor cuida disso para o editor.  Primeiro, ele define as rotinas de tratamento das ações.

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

As rotinas de tratamento são registradas ao mesmo tempo em que as rotinas de tratamento das ações reatingíveis do editor.

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 contribuidores da barra de ações são compartilhados entre instâncias diferentes do mesmo editor.  Isso significa que as rotinas de tratamento deverão ser notificadas se o editor ativo do ReadmeEditorActionBarContributor for alterado.

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

Isso é tudo sobre o editor.  Deveremos ver essas ações ativadas quando o editor estiver ativado.

Menu Editor do Arquivo Readme com ações ativadas 

Observe que o rótulo da primeira ação reatingível ("Editor Action 4") não foi utilizado, pois a marcação XML do conjunto de ações não definiu allowLabelUpdate.

A ReadmeContentOutlinePage define suas rotinas de tratamento no mesmo local em que definiu as rotinas de tratamento das ações reatingíveis do 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);
}

Deveremos ver sua ação com um novo rótulo quando o descritor de conteúdo estiver ativo.

Menu Editor do Arquivo Readme com ação renomeada

 

Copyright IBM Corporation e outros 2000, 2003.