Site-Schnittstellen

Die Argumente in dem Konstruktor eines Abschnitts werden als Abhängigkeiten bezeichnet. Abschnittsabhängigkeiten ersetzen die verschiedenen Adapter und Abrufmethoden. Um zum Beispiel auf die IActionBars einer Site zuzugreifen, würde ein auf Komponenten basierender Abschnitt eine IActionBars-Instanz in seinen Konstruktor aufnehmen.

Neue Sites bieten eine unbegrenzte Menge an Schnittstellen an. Jedes Plug-in kann die Menge der Site-Schnittstellen unter Verwendung des Erweiterungspunkts org.eclipse.core.component.types erweitern. Obschon die Menge der Site-Schnittstellen erweitert werden kann, unterstützen alle Sites dieselbe Menge, und stellen so sicher, dass jeder Abschnitt in jede Site integriert werden kann. Die vollständige Menge an Site-Schnittstellen können Sie mit Hilfe PDE-Sicht 'Plug-in-Registrierung' anzeigen.

Die Workbench stellt die folgenden Site-Schnittstellen zur Verfügung:

Schnittstelle
Beschreibung
IErrorContext
Konstruiert und protokolliert IStatus-Nachrichten in dem Plug-in-Protokoll.
Bundle
Das Plug-in-Produktpaket, das die Implementierung des Abschnitts enthält. Dieses informiert andere Komponenten, wie z.B. die Implementierung von IErrorContext, automatisch über ihre Plug-ins.
IContainer
Der Container der Site. Dieses Objekt kann nach allen anderen Site-Schnittstellen abgefragt werden, was hilfreich sein kann, wenn der Abschnitt alles von seiner Site an seine untergeordneten Elemente umleiten oder multiplexen möchte.
INameable
Ermöglicht einem Abschnitt die Einstellung seines Namens, Symbols, der QuickInfo und der Inhaltsbeschreibung. Ersetzt die verschiedenen Abrufmethoden und Listener-Funktionen bei IWorkbenchPart.
Composite
Das übergeordnete kombinierte Anzeigenobjekt für den Abschnitt. Dieses kombinierte Anzeigenobjekt wird nicht mit anderen Abschnitten gemeinsam benutzt und wird zum selben Zeitpunkt entfernt, wie der Abschnitt. Es ist dem Abschnitt möglich, das Layout einzustellen und diesem kombinierten Anzeigenobjekt Listener-Funktionen hinzuzufügen.
ISecondaryId
Eine Schnittstelle, die bei Verwendung als Sicht mit mehreren Instanzen die sekundäre ID des Abschnitts zurückgibt.
ResourceManager
Ordnet sicher Abbildungen, Schriftarten, Farben und andere SWT-Ressourcen zu und hebt die Zuordnung wieder auf. Stellt sicher, dass identische Ressourcen gemeinsam von Abschnitten benutzt werden und dass alle Verluste bereinigt werden, wenn der Abschnitt geschlossen wird.
IDirtyHandler
Ermgöicht Abschnitten, ihren unbereinigten Status zu setzen oder zu löschen.
IMessageDialogs
Zeigt dem Benutzer Fehler-, Warn- und Info-Dialoge an.
IActionBars
Dient demselben Zweck, wie dies mit getViewSite().getActionBars() bei Eclipse 3.0 API der Fall war.
IMultiplexer
Stellt eine multiplexte Komponente mit Zugriff auf ihre Multiplexer und alle gemeinsam benutzten Schnittstellen zur Verfügung.
.
ISavedState
Enthält den zuvor bestehenden Status des Abschnitts.
IPartFactory
Ermöglicht einem Abschnitt, verschachtelte Sichten und Editoren zu erstellen.
IPartDescriptor
Enthält Meta-Informationen über einen Abschnitt, wie dessen ID, Titel, Standardbild usw.
IEditorInput
Enthält die Editoreingabe für einen Editor. Verweist auf eine leere Editoreingabe für Sichten.
ISelectionHandler
Handhabt alle Auswahländerungen. Abschnitte können dies verwenden, um die Auswahl zu ändern, die sie der Workbench zur Verfügung stellen.

Es hängt von dem Kontext des Abschnitts ab zu bestimmen, ob der Abschnitt eine eindeutige Instanz für jede Schnittstelle erhält oder ein Objekt, das von mehreren Abschnitten gemeinsam benutzt wird. Der Konstruktor des Abschnitts empfängt niemals ein Null-Argument.

 

Verwendung neuer Site-Schnittstellen mit vorhandenen Abschnitten

Obschon die Konstruktor-Einblendung angenehm ist, wäre es unpraktisch, jeden vorhandenen Editor und jede Sicht zur Konstruktor-Einblendung neu zu schreiben, um Vorteile aus den neuen Site-Schnittstellen zu ziehen. Aus diesem grund stehen alle neuen Schnittstellen auch den vorhandenen Sichten als Adapter auf der IWorkbenchPartSite zur Verfügung.

Hier ist eine Sicht, die eine einzelne Schaltfläche zum Öffnen eines Nachrichtendialogs enthält.

Abbildung von DependenciesViewOld

Das folgende Beispiel zeigt zeigt die Quelle für eine neuartige Ansicht, die den Dialog unter Verwendung der neuen Schnittstelle 'IMessageDialogs' öffnet.

/**
 * Demonstriert die Verwendung von Komponentenabhängigkeiten in einem neuartigen Abschnitt.
 *
 * @Ab 3.1
 */
public class DependenciesViewNew {
    // Abhängigkeiten
    private IMessageDialogs dialogs;
   
    /**
     * Komponentenkonstruktor. Nicht direkt aufrufen.
     */
    public DependenciesViewNew(Composite parent, IMessageDialogs dialogs) {
        this.dialogs = dialogs;
       
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (nicht Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
   
    private void openADialog() {
        dialogs.open(IStatus.INFO, "Dies ist eine Nachricht");
    }
}

Dieses Beispiel zeigt eine traditionelle Sicht, die einen Dialog mit Hilfe von 'IMessageDialogs' öffnet und demonstriert, dass dies auch unter Verwendung eines traditionellen Workbench-Abschnitts möglich ist. Die Zeilen in roter Schrift zeigen, wie die IMessageDialogs-Schnittstelle initialisiert und in jedem Fall verwendet wird.

/**
 * Demonstriert die Verwendung von Komponentenabhängigkeiten in einer alten Sicht
 *
 * @Ab 3.1
 */
public class DependenciesViewOld extends ViewPart {
    // Abhängigkeiten
    private IMessageDialogs dialogs;
    
    // Hauptfensterobjekt
    private Composite parent;
    
    /* (nicht Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
     */
    public void createPartControl(Composite parent) {
        this.parent = parent;
        this.dialogs = (IMessageDialogs)getSite().getAdapter(IMessageDialogs.class);
        
        Button testButton = new Button(parent, SWT.PUSH);
        testButton.setText("Open a dialog");
        testButton.addSelectionListener(new SelectionAdapter() {
        /* (nicht Javadoc)
         * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
         */
        public void widgetSelected(SelectionEvent e) {
            openADialog();
        }
        });
    }
    
    private void openADialog() {
        if (dialogs != null) {
            dialogs.open(IStatus.INFO, "Dies ist eine Nachricht");
        }
    }

    /* (nicht Javadoc)
     * @see org.eclipse.ui.IWorkbenchPart#setFocus()
     */
    public void setFocus() {
        parent.setFocus();
    }
}