Handlinger i målskiftende (retargetable) handlingssett

Handlingssettet readme-verktøy definerer også målskiftende handlinger. Handlingen vises så lenge readme-handlingen vises, men aktiveres bare når en visning eller et redigeringsprogram som implementerer handlingen, er aktiv.  Når du bruker handlingssett til å definere målskiftende handlinger, opprettes handlingene i handlingssettkodetypen og ikke i koden. Følgende er hentet fra handlingssettdefinisjonen for readme-verktøyet:

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

Målskiftende handlinger angis ved hjelp av attributtet retarget="true".  Dette oppretter en RetargetAction i handlingssettet. Merk at de målskiftende handlingene ikke angir en implementeringsklasse (class) ettersom det er opp til hver enkelt visning eller redigeringsprogram i plugin-modulen å definere en behandler som implementerer hver handling.  Hvis allowLabelUpdate er "true", opprettes i stedet en LabelRetargetAction.

De målskiftende handlingene vises på vindusmenyen når readme-handlingssettet vises.  De vil imidlertid ikke bli aktivert hvis redigeringsprogrammet eller disposisjonsvisningen for readme-verktøyet ikke er aktivert.

Menyen i readme-filredigeringsprogrammet med to nedtonede elementer og ett aktivert element

 

Hva skal redigeringsprogrammet og visningen gjøre? Nok en gang likner klientsiden på registrering av en behandler for arbeidsbenken eller en målskiftende handling for et redigeringsprogram. Handlings-IDen som er angitt i kodetypen, må brukes ved registrering av en global handlingsbehandler.

ReadmeEditorActionBarContributor håndterer dette for redigeringsprogrammet.  Først definerer den behandlere for handlingene.

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

Behandlerene registreres samtidig som behandlerene for de målskiftende handlingene ble registrert for redigeringsprogrammet.

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

Husk at handlingslinjebidragsytere deles mellom ulike forekomster av det samme redigeringsprogrammet. Dette betyr at behandlere må underrettes hvis det aktive redigeringsprogrammet for ReadmeEditorActionBarContributor endres.

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

Det er det hele for redigeringsprogrammet. Disse handlingene skal aktiveres når redigeringsprogrammet aktiveres.

Meny i readme-filredigeringsprogram med aktiverte handlinger 

Merk at etiketten for den første målskiftende handlingen ("Editor Action 4") ikke ble brukt siden handlingssettets XML-kodetype ikke anga allowLabelUpdate.

ReadmeContentOutlinePage definerer sine behandlere samme sted som behandlere for redigeringsprogrammets målskiftende handlinger ble definert:

    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);  
}

Handlingen med den nye etiketten skal vises når innholdsdisposisjonen er aktiv.

Meny i readme-filredigeringsprogram med handling med nytt navn