Über einen Kontext kann gesteuert werden, welche Befehle einem Benutzer zu einem bestimmten Zeitpunkt zur Verfügung stehen. Kontexte sind sehr viel dynamischer als Aktivitäten. Während eine Aktivität eine breite Gruppe von Funktionen darstellt, die dem Benutzer fast immer zur Verfügung steht, beschreiben Kontexte einen Fokus des Benutzers zu einem bestimmten Zeitpunkt. Die Befehle, auf die ein Benutzer während der Textbearbeitung zugreifen kann, können sich beispielsweise von denen unterscheiden, die ihm bei der Bearbeitung von Java-Text oder beim Durchsuchen von Paketen im Paket-Explorer zur Verfügung stehen.
Kontexte werden im Erweiterungspunkt org.eclipse.ui.contexts deklariert. Betrachten Sie einmal den folgenden Kontext, der für die Bearbeitung von Text definiert ist:
<extension point="org.eclipse.ui.contexts"> <context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Kontexten wird ein Name und eine Beschreibung zugeordnet, die verwendet werden, wenn dem Benutzer Informationen über den Kontext angezeigt werden. Die ID des Kontexts wird verwendet, wenn Benutzerschnittstellenergänzungen wie z.B. Befehle mit einem bestimmten Kontext verbunden werden sollen.
Kontexte sind hierarchisch strukturiert. Wenn ein Kontext aktiviert ist, so stehen auch die Befehle, die im Kontext selbst und in den entsprechenden übergeordneten Kontexten bereitgestellt werden, zur Verfügung. Dies ist für die Definition von Kontextebenen nützlich, die sich von sehr allgemeinen Situationen bis hin zu sehr spezifischen Kontexten bewegen können. Beachten Sie, dass dem Kontext in der voranstehenden Kontextdefinition eine ID eines übergeordneten Kontexts zugeordnet ist:
<context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>Der übergeordnete Kontext definiert den allgemeineren Kontext, die Arbeit innerhalb eines Fensters. Dessen übergeordnete Kontext definiert wiederum einen noch allgemeineren Kontext, die Arbeit innerhalb von Fenstern undDialogen.
<context name="%context.window.name" description="%context.window.description" id="org.eclipse.ui.contexts.window" parentId="org.eclipse.ui.contexts.dialogAndWindow"> </context> <context name="%context.dialogAndWindow.name" description="%context.dialogAndWindow.description" id="org.eclipse.ui.contexts.dialogAndWindow"> </context>
Bisher wurde lediglich eine Kontexthierarchie definiert. Der Kontext wird erst dann nützlich, wenn in der Beschreibung einer anderen Benutzerschnittstellenergänzung auf ihn verwiesen wird. Die häufigste Verwendung von Kontexten ist bei der Tastenbelegung. Wenn einer Tastenbelegung ein bestimmter Kontext zugeordnet wird, so ist die Tastenbelegung nur dann aktiv, wenn sich der Benutzer in diesem Kontext befindet. Das folgende Befehlsformat bestimmt beispielsweise den Stammkontext für Dialoge und Fenster als den Kontext einer Tastenbelegung:
<keyBinding commandId="org.eclipse.ui.edit.cut" contextId="org.eclipse.ui.contexts.dialogAndWindow" keySequence="M1+X" keyConfigurationId="org.eclipse.ui.defaultAcceleratorConfiguration"> </keyBinding>
Die Kontextunterstützung der Workbench enthält API, über die nicht nur Kontexte sondern auch Kriterien definiert werden können, unter denen ein bestimmter Kontext aktiviert werden soll. Für die meisten Plug-ins ist diese API nicht von Bedeutung. Sie ist allerdings sehr nützlich, wenn spezielle Sichten oder Editoren definiert werden, die wiederum neue Kontexte definieren.
Der Ausgangspunkt für die Arbeit mit Kontexten in der Workbench ist IWorkbenchContextSupport. Plug-ins können ein Exemplar der Kontextunterstützung der Workbench abrufen.
IWorkbenchContextSupport workbenchContextSupport = PlatformUI.getWorkbench().getContextSupport();Über die Kontextunterstützungs-API der Workbench kann EnabledSubmission hinzugefügt oder entfernt werden, worüber Kriterien beschrieben werden, die die Aktivierung eines bestimmten Kontextes auslösen sollten. Zu diesen Kriterien gehören Informationen wie die aktive Komponente oder die aktive Shell. Die Unterstützung der Workbench bietet auch Zugriff auf einen IContextManager.
IContextManager contextManager = workbenchContextSupport.getContextManager();
IContextManager definiert ein Protokoll, über das alle definierten oder aktivierten Kontext-IDs abgerufen werden können, ebenso wie der zugeordnete IContext einer bestimmten ID. Diese Objekte können für die Traversierung der Definition eines Kontextes in API verwendet werden, wie z.B. Abruf von ID, Name oder ID des übergeordneten Kontextes. Listener-Funktionen können mit der Kontextverwaltungsfunktion oder den Kontexten selbst registriert werden, um Änderungen an der Definition eines bestimmten Kontextes oder an der Kontextverwaltungsfunktion selbst zu aufzuspüren. Weitere Informationen hierzu finden Sie im Paket org.eclipse.ui.contexts.