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:

   <extension
         point="org.eclipse.ui.bindings">
<key
            sequence="M1+X"
	contextId="org.eclipse.ui.contexts.dialogAndWindow"
	commandId="org.eclipse.ui.edit.cut"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
    </extension>

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 wtyczek, 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 IContextService. Wtyczki mogą uzyskać globalną instancję obsługi kontekstów ze środowiska roboczego.

IContextService contextService = (IContextService)PlatformUI.getWorkbench()
	.getService(IContextService.class);

Usługi takie jak IContextService, IHandlerService i IBindingService można pobierać za pomocą interfejsu IServiceLocator. IWorkbench, IWorkbenchWindow i IWorkbenchSite to elementy interfejsu IServiceLocator.

Interfejs IContextService służy do definiowania protokołu umożliwiającego uzyskiwanie wszystkich zdefiniowanych lub włączonych identyfikatorów kontekstu oraz powiązanych z nimi elementów Context w odniesieniu do danego 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.core.commands.contexts.

Elementy Context można włączać programowo:

IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");

IContextActivation to element, który może służyć do dezaktywowania aktywnego kontekstu. Należy aktywować wyłącznie zdefiniowane elementy Context.

W przypadku bardziej szczegółowo określonego elementu Context w ramach danej części (widoku lub edytora) do jego aktywowania można wykorzystać lokalizator usług w serwisie. Interfejs IContextService danej części będzie odpowiedzialny za aktywowanie i dezaktywowanie elementu Context wraz z tą częścią. Ponadto pozwala on usunąć element Context w przypadku usunięcia danej części.