Konteksty

Kontekst umożliwia sterowanie dostępnością komend w danym momencie. Konteksty są znacznie bardziej dynamiczne niż działania. O ile działanie reprezentuje szeroki zbiór funkcji, do których użytkownik ma dostęp w dłuższym okresie, konteksty opisują przedmiot działań użytkownika w konkretnym momencie. Na przykład komendy dostępne podczas edytowania tekstu mogą być inne niż podczas edytowania kodu źródłowego w języku Java lub przeglądania pakietów w eksploratorze pakietów.

Definiowanie kontekstu

Konteksty deklaruje się w punkcie rozszerzenia org.eclipse.ui.contexts. Poniższy kontekst został zdefiniowany na potrzeby edytowania tekstu:

   <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>
Kontekstom przypisuje się nazwę i opis, które są używane do prezentowania użytkownikowi informacji o kontekście. Identyfikator kontekstu jest używany do wiązania elementów wnoszonych interfejsu użytkownika z konkretnym kontekstem.

Hierarchie kontekstów

Konteksty mają naturę hierarchiczną. W aktywnym kontekście dostępne są komendy danego kontekstu oraz komendy jego kontekstów nadrzędnych. Przydaje się to do definiowania poziomów kontekstów, począwszy od bardzo ogólnych sytuacji, aż do konkretniejszych kontekstów. W definicji kontekstu powyżej znajduje się identyfikator kontekstu nadrzędnego przypisany do kontekstu:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
Kontekst nadrzędny definiuje bardziej ogólny kontekst pracy w oknie. Z kolei jego kontekst nadrzędny definiuje jeszcze ogólniejszy kontekst pracy w oknie lub w oknie dialogowym.
<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>

Powiązanie elementu wnoszonego z kontekstem

Wynikiem dotychczasowej pracy jest zdefiniowana hierarchia kontekstów. Kontekst staje się przydatny, gdy odwołuje się do niego inny element wnoszony interfejsu użytkownika. Typowym zastosowaniem kontekstów jest przypisanie klawiszy. Gdy kontekst jest powiązany z przypisaniem klawiszy, powiązanie to będzie aktywne tylko wtedy, gdy użytkownik pracuje w tym kontekście. Na przykład poniższy kod w języku znaczników określa główny kontekst okna dialogowego i okna jako kontekst przypisania klawiszy:

<keyBinding
	commandId="org.eclipse.ui.edit.cut"
	contextId="org.eclipse.ui.contexts.dialogAndWindow"
	keySequence="M1+X"
	keyConfigurationId="org.eclipse.ui.defaultAcceleratorConfiguration">
</keyBinding>

Korzystanie z interfejsu API kontekstów

Obsługa kontekstów w środowisku roboczym obejmuje interfejs API przeznaczony do pracy ze zdefiniowanymi kontekstami oraz do definiowania kryteriów warunkujących włączenie konkretnego kontekstu. Interfejs ten nie dotyczy większości modułów, ale przydaje się podczas definiowana wyspecjalizowanych widoków lub edytorów, które definiują nowe konteksty.

Punktem wyjścia podczas pracy z kontekstami w środowisku roboczym jest interfejs IWorkbenchContextSupport. Moduły dodatkowe mogą uzyskać instancję obsługi kontekstów ze środowiska roboczego.

IWorkbenchContextSupport workbenchContextSupport = PlatformUI.getWorkbench().getContextSupport();
Przy użyciu interfejsu API obsługi kontekstów w środowisku roboczym można dodawać lub usuwać klasę EnabledSubmission, opisującą kryteria, których spełnienie powinno powodować włączenie konkretnego kontekstu. Kryteria te obejmują takie informacje, jak aktywna część lub aktywna powłoka. Obsługa kontekstów w środowisku roboczym zapewnia także dostęp do interfejsu IContextManager.
IContextManager contextManager = workbenchContextSupport.getContextManager();

Interfejs IContextManager definiuje protokół uzyskiwania identyfikatorów wszystkich zdefiniowanych lub włączonych kontekstów oraz powiązanego interfejsu IContext dla konkretnego identyfikatora. Przy użyciu tych obiektów można przechodzić definicję kontekstu w interfejsie API, na przykład uzyskiwać identyfikator, nazwę lub identyfikator kontekstu nadrzędnego. Funkcje nasłuchiwania można rejestrować w menedżerze kontekstów lub w samych kontekstach, aby wykrywać zmiany w definicji konkretnego kontekstu lub w menedżerze kontekstów. Więcej informacji na ten temat zawiera pakiet org.eclipse.ui.contexts.