Umlenkbare Editoraktionen

Beachten Sie, dass das Tool für Readme-Dateien einen eigenen Editor definiert, der die Menüleiste der Workbench mit Hilfe von ReadmeEditorActionBarContributor mit Aktionen ergänzt.  

<extension
    point = "org.eclipse.ui.editors">
	<editor
  id = "org.eclipse.ui.examples.readmetool.ReadmeEditor"
  	   name="%Editors.ReadmeEditor"
      	   icon="icons/obj16/editor.png"
      	   class="org.eclipse.ui.examples.readmetool.ReadmeEditor"
	   extensions="readme"
           contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor">
	</editor>
</extension>

Im Folgenden werden die in der Ergänzungsklasse ausgeführten Operationen näher erläutert.

public ReadmeEditorActionBarContributor() {
	...
	action2 = new RetargetAction(IReadmeConstants.RETARGET2, MessageUtil.getString("Editor_Action2"));
	action2.setToolTipText(MessageUtil.getString("Readme_Editor_Action2"));
	action2.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_DISABLE);
	action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_ENABLE);
	...
	action3 = new LabelRetargetAction(IReadmeConstants.LABELRETARGET3, MessageUtil.getString("Editor_Action3"));
	action3.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_DISABLE);
	action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_ENABLE);
	...  
	handler2 = new EditorAction(MessageUtil.getString("Editor_Action2")); 
	...
	handler3 = new EditorAction(MessageUtil.getString("Editor_Action3")); 
	...

Bei der Erstellung der Ergänzung werden zwei umlenkbare Aktionen erstellt, wobei eine die Aktualisierung von Bezeichnungen erlaubt und die andere nicht.  Bei der Erstellung der Aktionen werden die gleichen Verfahren angewendet, die auch in der Workbench benutzt werden.  Außerdem werden zwei Steuerroutinen erstellt, die für die Aktionen verwendet werden, wenn der Editor aktiviert ist.  

Es stellt sich die Frage, wo die Steuerroutinen für die Aktionen registriert werden.  Die Einstellung globaler Steuerroutinen erfolgt etwas anders, wenn die umlenkbaren Aktionen durch Ihren Editor definiert werden.  Dies liegt daran, dass Ihre Ergänzung dafür verantwortlich ist, die aktive Sicht zu überwachen und unterschiedliche Steuerroutinen als verschiedene Sichten anzubinden, damit der Editor nicht selbst aktiv wird.  (Die Workbench übernimmt diese Aufgabe, wenn Sie eine Steuerroutine für eine der globalen Aktionen der Workbench setzen).  Der ReadmeEditorActionBarContributor geht folgendermaßen vor:

public void init(IActionBars bars, IWorkbenchPage page) {
	super.init(bars, page);
	bars.setGlobalActionHandler(IReadmeConstants.RETARGET2, handler2);
	bars.setGlobalActionHandler(IReadmeConstants.LABELRETARGET3, handler3);
	...

Als Erstes registriert die Ergänzung ihre Steuerroutinen für die umgelenkten Aktionen.  Hierdurch wird sichergestellt, dass die Aktionen der Ergänzung ausgeführt werden, wenn der Editor selbst aktiv ist.  Als Nächstes wird jedes Vorkommen von RetargetAction auf der Seite als Komponenten-Listener registriert.

	...
	// Hook retarget actions as page listeners
	page.addPartListener(action2);
	page.addPartListener(action3);
	IWorkbenchPart activePart = page.getActivePart();
	if (activePart != null) {
		action2.partActivated(activePart);
		action3.partActivated(activePart);
	}
}

Durch das Hinzufügen aller Vorkommen von RetargetAction als Komponenten-Listener werden diese benachrichtigt, wenn die aktive Komponente sich ändert.  Die Aktion kann dann die korrekte globale Steuerroutine von der neu aktivierten Komponente abrufen.  (Detaillierte Informationen hierzu finden Sie unter dem Thema zur Implementierung von RetargetAction .)   Beachten Sie hierbei, das der Aktion zum Starten die momentan aktive Komponente zugeordnet wird.

Wenn die Editorergänzung entfernt wird, sollte die Einfügung der umlenkbaren Aktionen als Seiten-Listener aufgehoben werden.

public void dispose() {
	// Remove retarget actions as page listeners
	getPage().removePartListener(action2);
	getPage().removePartListener(action3);
}

Abschließend sollte berücksichtigt werden, dass Aktionsleistenergänzungen von den verschiedenen Exemplaren einer Editorklasse gemeinsam verwendet werden.  Aus diesem Grund müssen die Steuerroutinen benachrichtigt werden, wenn der aktive Editor sich ändert, so dass eine Verbindung zum korrekten Editorexemplar hergestellt werden kann.

public void setActiveEditor(IEditorPart editor) {
	...
	handler2.setActiveEditor(editor);
	handler3.setActiveEditor(editor);
	...
}

Hiermit ist die Konfiguration der Editorseite abgeschlossen.  Wenn der Editor geöffnet und aktiv ist, werden die Steuerroutinen (und ihre Bezeichnungen) mit Hilfe von ReadmeEditorActionBarContributor definiert und in der Menüleiste der Workbench angezeigt.

Readme-Menü mit drei Editoraktionen in der Workbench-Menüleiste

Nachdem die Ergänzungen des Editors sich nun an der korrekten Stelle befinden, wird als Nächstes die Registrierung einer Steuerroutine in einer Sicht erläutert. Der Code der Client-Seite weist Parallelen zur Registrierung einer Steuerroutine für eine Workbench-Aktion auf. Eine Ausnahme bildet hierbei allerdings die Tatsache, dass die Aktions-ID vom Editor des Plug-ins definiert wird.  Über ReadmeContentOutlinePage wird eine Steuerroutine für diese Aktionen registriert.

public void createControl(Composite parent) {
super.createControl(parent);
	...
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.RETARGET2, 
		new OutlineAction(MessageUtil.getString("Outline_Action2")));  

	OutlineAction action = new OutlineAction(MessageUtil.getString("Outline_Action3")); 
	action.setToolTipText(MessageUtil.getString("Readme_Outline_Action3")); 
	getSite().getActionBars().setGlobalActionHandler(
		IReadmeConstants.LABELRETARGET3, 
		action);  
	...

Beachten Sie, dass der Text für die QuickInfo und eine Bezeichnung für die zweite Aktion von der Gliederung definiert werden, die die Erstellung einer neuen Bezeichnung erlaubt. Wenn die Sicht der Readme-Gliederung aktiviert wird, werden die zugehörigen Steuerroutinen (und deren Bezeichnungen) in der Menüleiste der Workbench angezeigt.

Readme-Menü mit einer umbenannten Editoraktion

Beachten Sie hierbei, dass die umbenannte Aktion mit der neuen Bezeichnung angezeigt wird.