org.eclipse.ui.editors

Ein Editor ist eine Workbench-Komponente, mit deren Hilfe ein Benutzer ein Objekt (häufig eine Datei) bearbeiten kann. Editoren funktionieren ähnlich wie die Bearbeitungstools des Dateisystems, sind jedoch 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 sowie der Name und das Symbol, die in den Workbench-Menüs und Anzeigenelementen 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 erkennt. 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 der Schnittstelle IEditorPart definiert. Plug-ins können jedoch auch die Klasse EditorPart erweitern, statt die Schnittstelle IEditorPart ganz neu zu implementieren.

Hinweis: Editorerweiterungen können außerdem so konfiguriert werden, dass zum Bearbeiten einer Datei ein externes Programm gestartet oder eine Klasse für das Startprogramm bereitgestellt wird, mit der ein bereits vorhandener Java-Code als Editor 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="Readme File Editor"
            icon="icons/basic/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. Es gibt allerdings auch ein neues Element, nämlich die Klasse contributorClass.

Ergänzungsdefinitionen für Editoraktionen

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. Damit nicht jedes Exemplar eines Editortyps Aktionen und Images erstellt, wird eine einzige Ergänzungsdefinition von allen Editoren eines spezifischen Typs gemeinsam benutzt.

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("&Editor Action1");
    action1.setToolTipText("Readme Editor Action1");
    action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE);
    ...
    action2 = new EditorAction("&Editor Action2");
    action2.setToolTipText("Readme Editor Action2");
    action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE);
    ...
    action3 = new EditorAction("&Editor Action3");
    action3.setToolTipText("Readme Editor Action3");
    action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE);
    ...
}

Die Namen und Symbole für die Aktionen werden nicht in der Datei plugin.xml, sondern im Code definiert. Sie werden bemerken, dass diese Informationen Ähnlichkeit mit den Angaben für viewActions in der Befehlsdatei für die Sichtaktion haben. Die Aktionen werden im Code definiert, da die gemeinsame Benutzung der Aktionen durch unterschiedliche Exemplare desselben Editors verwaltet werden muss.

Da die Aktionen im Konstruktor erstellt werden, sind sie nicht von einem bestimmten Exemplar des Editors abhä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);
    action2.setActiveEditor(editor);
    action3.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.

Ergänzungen des Editors für Readme-Dateien für die Menüleiste der Workbench
Ergänzungen des Editors für Readme-Dateien für die Symbolleiste der Workbench

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.

Editoren und Inhaltsgliederungen

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 Inhaltsgliederungen, die eine strukturierte Ansicht 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 JFace-Text erläutert.