Åtgärdsuppsättningar med åtgärder som kan växla mål

Åtgärdsuppsättningen för readme-verktyget definierar även åtgärder som kan växla mål.  Åtgärden förblir synlig så länge som readme-åtgärdsuppsättningen är synlig, men aktiveras bara när en vy eller redigerare som implementerar åtgärden är aktiv.  När du definierar åtgärder som kan växla mål med åtgärdsuppsättningar, skapas åtgärderna i åtgärdsuppsättningens kod och inte i programkoden.  Följande kommer från readme-verktygets åtgärdsuppssättningsdefinition:

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

Åtgärder som kan växla mål anges med attributet retarget="true".  Detta gör att enRetargetAction skapas i åtgärdsuppsättningen.  lägg märke till att åtgärder som kan växla mål inte anger en implementerande klass eftersom det är upp till varje vy eller redigerare i insticksprogrammet att konfigurera en hanterare som implementerar varje åtgärd.  OmallowLabelUpdate är sant, skapas istället en LabelRetargetAction.

De åtgärder som växlat mål visas på fönstrets meny när readme-åtgärdsuppsättningen visas.  Däremot aktiveras de inte om readme-verktygets redigerare eller dispositionsvy inte är aktiva.

Menyn i readme-filredigerare med två nedtonade objekt och ett aktiverat objekt

 

Vad behöver redigeraren och vyn göra?  Återigen liknar klientsidan att registrera en hanterare för arbetsmiljön eller en redigerares åtgärd som kan växla mål.  Det åtgärds-id som anges i koden måste användas när du registrerar en global åtgärds hanterare.

ReadmeEditorActionBarContributor tar hand om detta för redigeraren.  Först definierar den hanterarna för åtgärderna.

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

Hanterarna registreras samtidigt som hanterarna för redigerarnas åtgärder som kan växla mål registrerades.

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

Kommer du ihåg att bidragsgivare till åtgärdsfält delas mellan olika förekomster av samma redigerare?  Det betyder att hanterarna måste meddelas om den aktiva redigeraren för ReadmeEditorActionBarContributor ändras.

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

Det är allt för redigeraren.  Vi borde se att dessa åtgärder aktiveras när redigeraren aktiveras.

Meny i readme-filredigerare med aktiverade åtgärder 

Lägg märke till att etiketten för den första åtgärden som kan växla mål ("Redigeraråtgärd 4") inte användes eftersom åtgärdsuppsättningens XML-kod inte angav allowLabelUpdate.

ReadmeContentOutlinePage definierar dess hanterare på samma plats som den definierade hanterare för redigerarens åtgärder som inte kan växla mål:

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

Vi borde se åtgärden med ny etikett när innehållsdispositionen är aktiv.

Menyn i readme-filredigerare med åtgärd med nytt namn