Das Aktionsset für das Tool für Readme-Dateien definiert außerdem umlenkbare Aktionen. Die Aktion bleibt sichtbar, so lange 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.gif" 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.gif" retarget="true" allowLabelUpdate="true"> </action> ...
Umgelenkte Aktionen werden mit Hilfe des Attributs retarget="true" angegeben. Hierdurch wird im Aktionsset RetargetAction erstellt. Beachten Sie, dass die umlenkbaren Aktionen keine Klasse (class) für die Implementierung angeben, da es von der jeweiligen Sicht bzw. dem jeweiligen Editor innerhalb des Plug-ins abhängt, ob eine Steuerroutine zum Implementieren der einzelnen Aktionen definiert wird. 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 der Editor oder die Gliederungssicht des Tools für Readme-Dateien nicht aktiv ist.
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 des selben 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.
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 der selben 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.