Akční sada nástroje pro soubor README také definuje přecílitelné akce. Akce zůstává viditelná tak dlouho, jak je viditelná akční sada souboru README, ale je zpřístupněna pouze, pokud je aktivní pohled nebo editor, který akci implementuje. Při používání akčních sad k definování přecílitelných akcí se akce vytvářejí spíše v markupu akční sady, než v kódu. Následující příklad pochází z definice akční sady nástroje pro soubor 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> ...
Přecílené akce se určují s použitím atributu retarget="true". To povede k vytvoření RetargetAction v akční sadě. Pamatujte, že přecílitelné akce neurčují třídu implementace, protože záleží na každém pohledu nebo editoru v modulu plug-in, aby nastavil popisovač, který implementuje jednotlivé akce. Pokud má allowLabelUpdate hodnotu true, potom bude namísto toho vytvořen LabelRetargetAction .
Přecílené akce budou viditelné v nabídce okna, jestliže je viditelná akční sada souboru README. Avšak nebudou zpřístupněny, pokud není editor nástroje pro soubor README nebo pohled osnovy aktivní.
Co musí dělat editor a pohled? Strana klienta je podobná registraci popisovače pro pracovní plochu nebo přecílitelnou akci editoru. Při registraci globálního popisovače akce je nutno použít id akce určené v markupu.
Místo editoru se o to stará ReadmeEditorActionBarContributor . Nejdříve definuje popisovače pro akce.
public ReadmeEditorActionBarContributor() { ... handler4 = new EditorAction(MessageUtil.getString("Editor_Action4")); handler5 = new EditorAction(MessageUtil.getString("Editor_Action5")); handler5.setToolTipText(MessageUtil.getString("Readme_Editor_Action5")); ... }
Popisovače se registrují současně s registrací popisovačů pro přecílitelné akce editoru.
public void init(IActionBars bars, IWorkbenchPage page) { ... bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_RETARGET4, handler4); bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_LABELRETARGET5, handler5); ... }
Připomeňte si, že přispěvatelé řádku s akcemi jsou sdíleni mezi různými instancemi stejného editoru. To znamená, že popisovače musí být upozorněny v případě, že dojde ke změně aktivního editoru pro ReadmeEditorActionBarContributor.
public void setActiveEditor(IEditorPart editor) { ... handler4.setActiveEditor(editor); handler5.setActiveEditor(editor); ... }
Tolik k editoru. Tyto akce by měly být zpřístupněny, pokud je aktivován editor.
Pamatujte, že štítek pro první přecílitelnou akci ("akce editoru 4") nebyla použita, protože XML markup akční sady nenastavil allowLabelUpdate.
ReadmeContentOutlinePage definuje svoje popisovače na stejném místě, na kterém byly definovány popisovače pro přecílitelné akce editoru:
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); }
Pokud je prohlížeč osnovy obsahu aktivní, měla by být vidět akce s novým štítkem.