Umlenkbare Aktionen im Aktionsset

Das Aktionsset Tool für Readme-Dateien definiert auch umlenkbare Aktionen. Die Aktion bleibt sichtbar, solange das Readme-Aktionsset sichtbar ist. Sie ist allerdings nur aktiviert, wenn eine Sicht oder ein Editor, der diese Aktion implementiert hat, aktiv ist. Bei der Verwendung von Aktionssets zum Definieren umlenkbarer Aktionen werden die Aktionen im Befehlsformat des Aktionssets und nicht im Code erstellt.  Das folgende Beispiel stammt aus der Aktionssetdefinition des Tools für Readme-Dateien:

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

Umgelenkte Aktionen werden mit Hilfe des Attributs retarget="true" angegeben. Hierdurch wird im Aktionsset eine Aktion RetargetAction erstellt.  Beachten Sie, dass die umlenkbaren Aktionen keine Klasse (class) für die Implementierung angeben, da es Aufgabe der jeweiligen Sicht bzw. des jeweiligen Editors innerhalb des Plug-ins ist, eine Steuerroutine zum Implementieren der einzelnen Aktionen zu erstellen. Wenn für allowLabelUpdate der Wert 'true' gilt, wird stattdessen LabelRetargetAction erstellt.

Die umgelenkten Aktionen werden im Fenstermenü angezeigt, wenn auch das Readme-Aktionsset sichtbar ist.  Allerdings sind diese nicht aktiviert, wenn entweder der Editor oder die Gliederungssicht des Tools für Readme-Dateien nicht aktiv sind.

Editormenü für Readme-Dateien mit zwei grau unterlegten Elementen und einem aktiven Element

 

Welche Aufgaben haben der Editor und die Sicht?  Die auf der Client-Seite ausgeführten Operationen weisen Parallelen zum Registrieren einer Steuerroutine für die Workbench oder die umlenkbare Aktion eines Editors auf.  Die im Befehlsformat angegebene Aktions-ID muss verwendet werden, wenn eine Steuerroutine für eine globale Aktion registriert werden soll.

ReadmeEditorActionBarContributor führt diese Operation für den Editor aus.  Als Erstes werden die Steuerroutinen für die Aktionen definiert.

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

Die Steuerroutinen werden zur gleichen Zeit registriert wie die Steuerroutinen für die umlenkbaren Aktionen des Editors.

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

Beachten Sie hierbei, dass Aktionsleistenergänzungen von mehreren Exemplaren desselben Editors gemeinsam verwendet werden.  Dies bedeutet, dass die Steuerroutinen benachrichtigt werden müssen, wenn der aktive Editor für ReadmeEditorActionBarContributor geändert wird.

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

Damit sind alle erforderlichen Schritte für den Editor ausgeführt.  Die Aktionen werden nun aktiviert, sobald der Editor aufgerufen wird.

Menü des Editors für Readme-Dateien mit aktivierten Aktionen 

Beachten Sie hierbei, dass die Bezeichnung der ersten umlenkbaren Aktion ("Editoraktion 4") nicht verwendet wurde, weil im XML-Befehlsformat des Aktionssets der Wert allowLabelUpdate nicht definiert wurde.

ReadmeContentOutlinePage definiert die zugehörigen Steuerroutinen an derselben Position, an der auch die umlenkbaren Aktionen des Editors definiert wurden:

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

Wenn die Inhaltsgliederung aktiv ist, wird die umbenannte Aktion angezeigt.

Menü des Editors für Readme-Dateien mit Umbenennungsaktion