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

An welcher Stelle werden die Steuerroutinen für die Aktionen registriert?  Das Definieren der globalen Steuerroutinen weist gewisse Unterschiede auf, wenn der Editor die umlenkbaren Aktionen definiert.  Der Grund hierfür liegt darin, dass die Ergänzung die Protokollierung der aktiven Sicht steuert und verschiedene Steuerroutinen einfügt, wenn unterschiedliche Sichten oder der Editor selbst aktiviert werden.  (Die Workbench führt diese Operation aus, wenn eine Steuerroutine für eine der globalen Aktionen definiert wird.)  Im folgenden Beispiel ist dargestellt, wie ReadmeEditorActionBarContributor das System konfiguriert:

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 Menüleiste der Workbench

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

Copyright IBM Corporation und Andere 2000, 2003.