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 visualizaçã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.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 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.

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