Readme-työkalun toimintojoukko määrittää myös uudelleen kohdennettavia toimintoja. Toiminto pysyy näkyvissä niin kauan kuin readme-toimintojoukko on aktiivinen, mutta se on käytettävissä vain silloin, kun toiminnon toteuttava näkymä tai muokkausohjelma on aktiivinen. Kun toimintojoukkoja käytetään uudelleen kohdennettavien toimintojen määritykseen, toiminnot luodaan koodin sijaan toimintojoukon merkintöihin. Seuraava esimerkki on readme-työkalun toimintojoukon määrityksestä:
<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> ...
Uudelleen kohdennettavat toiminnot määritetään määritteen retarget="true" avulla. Tällöin RetargetAction luodaan toimintojoukkoon. Huomaa, että uudelleen kohdennettavat toiminnot eivät määritä toteuttavaa luokkaa, sillä lisäosan jokaisen näkymän ja muokkausohjelman on itse asetettava kunkin toiminnon toteuttava käsittelytoiminto. Jos allowLabelUpdate-arvo on true, niin LabelRetargetAction luodaan sen sijaan.
Uudelleen kohdennetut toiminnot näkyvät ikkunavalikossa, kun readme-toimintojoukko on näkyvä. Ne eivät kuitenkaan ole käytettävissä, jos readme-työkalun muokkausohjelma tai hahmotelmanäkymä ei ole aktiivinen.
Mitä muokkausohjelman ja näkymän on tehtävä? Työaseman puoli vastaa jälleen käsittelytoiminnon työympäristölle tai muokkausohjelman uudelleen kohdennettavan toiminnon rekisteröintiä. Merkinnöissä määritettyä toiminnon tunnusta on käytettävä rekisteröitäessä yleistä toiminnon käsittelytoimintoa.
ReadmeEditorActionBarContributor tekee tämän muokkausohjelman puolesta. Ensin se määrittää toimintojen käsittelytoiminnot.
public ReadmeEditorActionBarContributor() { ... handler4 = new EditorAction(MessageUtil.getString("Editor_Action4")); handler5 = new EditorAction(MessageUtil.getString("Editor_Action5")); handler5.setToolTipText(MessageUtil.getString("Readme_Editor_Action5")); ... }
Käsittelytoiminnot rekisteröidään samaan aikaan kuin muokkausohjelman uudelleen kohdennettavat toiminnot.
public void init(IActionBars bars, IWorkbenchPage page) { ... bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_RETARGET4, handler4); bars.setGlobalActionHandler(IReadmeConstants.ACTION_SET_LABELRETARGET5, handler5); ... }
Huomaa, että toimintopalkin toimittajat ovat saman muokkausohjelman eri ilmentymien yhteiskäytössä. Tämä tarkoittaa sitä, että käsittelytoiminnoille on ilmoitettava, jos aktiivinen ReadmeEditorActionBarContributor-luokan muokkausohjelma vaihtuu.
public void setActiveEditor(IEditorPart editor) { ... handler4.setActiveEditor(editor); handler5.setActiveEditor(editor); ... }
Tässä kaikki muokkausohjelman osalta. Näiden toimintojen pitäisi olla käytettävissä, kun muokkausohjelma aktivoidaan.
Huomaa, että ensimmäisen uudelleen kohdennettavan toiminnon ("Editor Action 4") nimiötä ei käytetty, sillä toimintojoukon XML-merkinnöissä ei ollut allowLabelUpdate-asetusta.
ReadmeContentOutlinePage määrittää käsittelytoimintonsa samassa paikassa, missä se määritti käsittelytoiminnot muokkausohjelman uudelleen kohdennettaville toiminnoille:
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); }
Uudelleen nimiöidyn toiminnon tulisi näkyä, kun sisällön jäsentelytoiminto on aktiivinen.