Ein Editor ist eine Workbench-Komponente, mit deren Hilfe ein Benutzer ein Objekt (häufig eine Datei) bearbeiten kann. Die Funktionsweise der Editoren weist Ähnlichkeiten zur Funktionsweise von Dateisystemeditoren auf, sie sind jedoch im Gegensatz zu diesen eng in die Workbench-Benutzerschnittstelle der Plattform integriert. Einem Editor ist immer ein Eingabeobjekt (IEditorInput) zugeordnet. Das Eingabeobjekt ist mit einem Dokument oder einer Datei vergleichbar, das/die bearbeitet wird. Die in einem Editor vorgenommenen Änderungen werden erst dann festgeschrieben, wenn der Benutzer sie speichert.
Für eine bestimmte Editoreingabe auf einer Workbench-Seite kann jeweils nur 1 Editor geöffnet werden. Wenn der Benutzer beispielsweise die Datei readme.txt in der Workbench bearbeitet und in derselben Perspektive erneut öffnet, wird wieder derselbe Editor aktiviert. (Einen anderen Editor für dieselbe Datei können Sie von einem anderen Workbench-Fenster aus oder über eine andere Perspektive öffnen.) Anders als bei Sichten kann derselben Editortyp (z. B. ein Texteditor) auf einer Workbench-Seite jedoch mehrmals für unterschiedliche Eingaben geöffnet sein.
Plug-ins verwenden den Workbench-Erweiterungspunkt org.eclipse.ui.editors, um Editoren zur Workbench hinzuzufügen. Plug-ins, die einen Editor ergänzen, müssen die Editorerweiterung in ihrer Datei plugin.xml zusammen mit den Konfigurationsdaten für den Editor registrieren. Manche Informationen zum Editor, z. B. die Implementierungsklasse, der Name und das Symbol, die in den Workbench-Menüs und Bezeichnungen verwendet werden, haben Ähnlichkeit mit den Angaben über eine Sicht. Editorerweiterungen geben außerdem die Dateierweiterungen oder die Dateinamenmuster für die Dateitypen an, die der Editor kennt. Zusätzlich können Editoren eine Klasse contributorClass definieren, die Aktionen zu den Menüs und Symbolleisten der Workbench hinzufügt, wenn der Editor aktiv ist.
Die Schnittstelle für Editoren ist in IEditorPart definiert. Plug-ins können jedoch auch die Klasse EditorPart erweitern, statt IEditorPart ganz neu zu implementieren.
Hinweis: Eine Editorerweiterung kann auch so konfiguriert werden, dass ein externes Programm gestartet oder bereits vorhandener Java-Code aufgerufen wird. Der vorliegende Abschnitt konzentriert sich auf die Editoren, die tatsächlich eng in die Workbench integriert sind und mit IEditorPart implementiert werden.
Das Tool für Readme-Dateien stellt einen angepassten Editor bereit, der primär dazu dient, eine eigene Seite mit der Inhaltsgliederung zur Sicht "Gliederung" der Workbench hinzuzufügen.
Die Konfiguration für die Editorerweiterung wird folgendermaßen definiert:
<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>
Auch hier werden die bekannten Konfigurationsbefehle für id, name, icon und class verwendet. Das Attribut extensions beschreibt die Dateitypen, die vom Editor verarbeitet werden können. (Sie können auch filenames angeben, wenn spezifischere Angaben gemacht werden sollen.) Die Klasse (class) implementiert den Editor und contributorClass ist für die Bereitstellung der editorbezogenen Aktionen verantwortlich. Die Ergänzungen werden im Folgenden detaillierter erläutert.
Die Klasse der Ergänzungsdefinitionen (contributorClass) fügt mit dem Editor zusammenhängende Aktionen zu Menü und Symbolleiste der Workbench hinzu. Sie muss die Schnittstelle IEditorActionBarContributor implementieren. Die Ergänzungsdefinition besteht separat zum Editor selbst, da auf einer Workbench-Seite mehrere Editoren desselben Typs angezeigt werden können. Eine einzelne Ergänzung wird von allen Editoren eines bestimmten Typs gemeinsam verwendet. Es ist also nicht erforderlich, dass jedes Editorexemplar eigene Aktionen und Images erstellt.
In ReadmeEditorActionBarContributor werden die drei Aktionen "Editor Action1," "Editor Action2" und "Editor Action3" ergänzt. Diese sind im Konstruktor definiert.
public ReadmeEditorActionBarContributor() { ... action1 = new EditorAction(MessageUtil.getString("Editor_Action1")); action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1")); action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE); action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE); ... 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); ... }
Die Namen und Symbole für die Aktionen werden nicht in der Datei plugin.xml, sondern im Code definiert. (Hierbei werden die Unterschiede in den Aktionsklassen vorerst ignoriert. Diese werden im Zusammenhang mit den umlenkbaren Aktionen näher erläutert.)
Beachten Sie die großen Ähnlichkeiten der Aktionsinformationen mit den Informationen zu viewActions, die im Befehlsformat für die Sichtaktion dargestellt wurden. Die Aktionen werden im Code definiert, da die gemeinsame Benutzung der Aktionen durch unterschiedliche Exemplare desselben Editors ermöglicht werden muss. Wenn die Aktionen im Konstruktor erstellt werden, sind sie von den einzelnen Exemplaren des Editors unabhängig.
Wenn ein Editor aktiviert wird und die Aktionen in den Menüs und der Symbolleiste der Workbench installiert werden müssen, wird die Nachricht setActiveEditor an die Ergänzungsdefinition gesendet. Diese verbindet die Editoraktionen mit einem bestimmten Editor.
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
Wie Sie sehen werden die Aktionen im Menü und der Symbolleiste der Workbench angezeigt, wenn ein Editor für Readme-Dateien aktiv ist.
Diese Menü- und Symbolleistenelemente werden nur dann angezeigt, wenn der Editor aktiv ist. Die Position für die Elemente im Menü und in der Symbolleiste kann wie unter Pfade für Menüs und Symbolleisten beschrieben definiert werden.
Der eigentliche Editor für Readme-Dateien ReadmeEditor ist nicht sehr kompliziert. Er erweitert die Klasse TextEditor, damit eine angepasste Seite für die Inhaltsgliederung zur Sicht "Gliederung" hinzugefügt werden kann, wenn eine Readme-Datei bearbeitet wird. Das Verhalten im Texteditor wird jedoch nicht geändert.
Editoren haben häufig entsprechende Funktionen zur Inhaltsgliederung, die eine strukturierte Sicht des Editorinhalts bereitstellen und dem Benutzer bei der Navigation im Inhalt des Editors helfen. Weitere Informationen finden Sie unter Inhaltsgliederungen.
Die Implementierung von Texteditoren wird unter Texteditoren und Plattformtext erläutert.