Der "Eingangspunkt" zur Anpassung des Workbench-Verhaltens ist die Bestimmung einer Advisorfunktion WorkbenchAdvisor, über die die Workbench konfiguriert wird. Ihr Rich Client-Plug-in sollte diese abstrakte Klasse erweitern, um eine anwendungsspezifische Konfiguration der Workbench zu ermöglichen. Das Browserbeispiel verwendet hierfür die Klasse BrowserAdvisor.
... int code = PlatformUI.createAndRunWorkbench(display, new BrowserAdvisor()); ...
Aufgabe einer Workbench-Advisorfunktion ist es, Methoden zu überschreiben und so die Workbench mit dem gewünschten Layout und den benötigten Funktionen (z.B. die Aktionsleistenauswahlmöglichkeiten oder die Begrüßungsseite) zu konfigurieren.
Über die von der Workbench-Advisorfunktion bereitgestellten Lebenszyklusmethoden kann sich Ihre Anwendung zu jedem Zeitpunkt der Workbench-Erstellung einklinken und das Verhalten beeinflussen. Die folgende Liste von überschreibbaren Lebenszyklusmethoden der Advisorfunktion ist der Javadoc-Datei für WorkbenchAdvisor entnommen.
initialize
- zuerst aufgerufen; vor allen Fenstern; wird zur Registrierung verwendetpreStartup
- als zweites aufgerufen; nach 'initialize', aber bevor ein Fenster geöffnet wird; wird verwendet, um beliebige Objekte bei Start oder Wiederherstellung vorübergehend zu sperrenpostStartup
- als drittes aufgerufen; nachdem ein erstes Fenster geöffnet wurde; wird verwendet, um Objekte wieder zu aktivieren, die im vorherigen Schritt gesperrt worden warenpostRestore
- wird aufgerufen, nachdem die Workbench und die zugehörigen Fenster aus einem zuvor gespeicherten Status erneut erstellt ist; wird verwendet, um die wiederhergestellte Workbench anzupassenpreWindowOpen
- wird von jedem Fenster beim Öffnen aufgerufen;
wird verwendet, um Aspekte des Fensters (außer Aktionsleisten) zu konfigurieren fillActionBars
- nach preWindowOpen
aufgerufen, um die Aktionsleisten eines Fensters zu konfigurierenpostWindowRestore
- wird aufgerufen, nachdem ein Fenster aus einem zuvor abgespeicherten Status wieder hergestellt wurde; wird verwendet, um das wiederhergestellte Fenster anzupassenpostWindowCreate
- wird aufgerufen, nachdem ein Fenster entweder aus einem Anfangsstatus oder einem wiederhergestellten Status erstellt wurde; wird verwendet, um das Fenster anzupassenopenIntro
- wird direkt vor dem Öffnen eines Fensters aufgerufen, um die Begrüßungskomponente (falls vorhanden) zu erstellen.postWindowOpen
- wird aufgerufen, nachdem ein Fenster geöffnet wurde; wird verwendet, um Listener-Funktionen für Fenster anzubinden, etc.preWindowShellClose
- wird aufgerufen, wenn die Shell eines Fensters vom Benutzer geschlossen wird; wird verwendet, um das Schließen von Fenstern zu überwacheneventLoopException
- wird aufgerufen, wenn die Ereignisschleife abgestürzt ist; wird verwendet, um den Benutzer über ein Problem zu informiereneventLoopIdle
- wird aufgerufen, wenn zur Zeit keine weiteren Ereignisse verarbeitet werden müssen; wird verwendet, um andere Arbeiten auszuführen oder zu warten, bis neue Ereignisse in die Schleife eingegeben werdenpreShutdown
- wird aufgerufen nachdem eine Ereignisschleife beendet wurde aber bevor das Fenster geschlossen wird; ermöglicht der Anwendung, das Herunterfahren zu blockierenpostShutdown
- zuletzt aufgerufen; nachdem die Ereignisschleife beendet wurde und alle Fenster geschlossen sind; wird verwendet, um die Registrierung für Objekte zurückzunehmen, die bei der Initialisierung registriert wurdenWie Sie sehen, hat eine Rich Client-Anwendung großen Einfluss auf Konfigurierung und Implementierung der Workbench. Im Browserbeispiel besteht die Hauptfunktion der Advisor-Funktion BrowserAdvisor darin, die Aktionsleisten mit Menüpunkten zu konfigurieren, die für einen Browser geeignet sind. Hierfür wird die Methode fillActionBars verwendet:
public void fillActionBars(IWorkbenchWindow window, IActionBarConfigurer configurer, int flags) { ... BrowserActionBuilder builder = new BrowserActionBuilder(window); getWorkbenchConfigurer().getWindowConfigurer(window).setData(BUILDER_KEY, builder); builder.fillActionBars(configurer, flags); }
In dieser Methode wird die Workbench mit einem speziellen Aktionserstellungsprogramm konfiguriert. Dieses Aktionserstellungsprogramm wird verwendet, um die Aktionsleiste der Workbench auszufüllen. Die Details über die Bestimmung der Aktionen werden unter Aktionen definieren genauer betrachtet. An dieser Stelle soll der Schwerpunkt auf der Konfiguration der Workbench liegen.
Beachten Sie im obigen Beispiel die Verwendung der Methode getWorkbenchConfigurer(). IWorkbenchConfigurer und IWorkbenchWindowConfigurer werden zusammen mit der Advisor-Funktion WorkbenchAdvisor verwendet, um das Fenster anzupassen. Über diese Klassen können sie viele Aspekte der Workbench-Erstellung auf verschiedenen Ebenen überschreiben. So definiert zum Beispiel IWorkbenchWindowConfigurer ein Protokoll, das eine bestimmte Konfiguration von Steuerelementen im Workbench-Fenster voraussetzt, z.B. eine Aktionsleiste, eine Statuszeile, eine Perspektivenleiste, Cool-Leiste, etc. Dieses Protokoll ermöglicht Ihnen die Anpassung und Auffüllung dieser Elemente. IWorkbenchConfigurer ist auf einer höheren Ebene aktiv und ermöglicht Ihnen die Speicherung anwendungsspezifischer Daten bei der Workbench. Die Advisor-Funktion WorkbenchAdvisor bietet in den oben dargestellten Lebenszyklusmethoden Zugriff auf diese Konfigurationsfunktionen. Methoden, die sich innerhalb von WorkbenchAdvisor auf niedrigeren Ebenen befinden, können überschrieben werden, um das Standardverhalten vollständig zu ersetzen. Die Advisor-Funktion Ihrer Workbench könnte beispielsweise die Methode überschreiben, die im Fenster die SWT-Steuerelemente erstellt, so dass das Hauptfenster völlig anders implementiert wird.
In anderen Worten: es gibt viele Möglichkeiten, die Workbench anzupassen, und viele verschiedene Ebenen, auf denen diese Verfahren verwendet werden können. Die Javadoc-Dateien für WorkbenchAdvisor, IWorkbenchConfigurer und IWorkbenchWindowConfigurer enthalten eine vollständige Beschreibung der verfügbaren Protokolle. Kommentare über alternative Implementierungen finden Sie auch in der vollständigen Implementierung von BrowserAdvisor.