Kontekster

En kontekst kan brukes til å påvirke hvilke kommandoer som er tilgjengelige for brukeren på et gitt tidspunkt. Kontekster er langt mer dynamiske enn aktiviteter. Mens en aktivitet representerer et bredt sett med funksjoner som er tilgjengelig for brukeren det meste av tiden, beskriver kontekster et fokus for brukeren på et bestemt tidspunkt. For eksempel er de kommandoene som er tilgjengelig for brukeren ved redigering av tekst, ikke de samme som de som er tilgjengelig for brukeren ved redigering av Java-tekst eller ved bruk av utforskeren for pakken.

Definere en kontekst

Kontekster deklareres i utvidelsespunktet org.eclipse.ui.contexts. Se på følgende kontekst som defineres for redigering av tekst:

   <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>
Kontekster tildeles et navn og en beskrivelse som brukes til å vise brukeren informasjon om konteksten. Kontekst-IDen brukes når brukergrensesnittbidrag (for eksempel kommandoer) bindes til en bestemt kontekst.

Konteksthierarkier

Kontekster har en hierarkisk oppbygging. Når en kontekst er aktiv, er kommandoene tilgjengelige i konteksten og i tillegg er de overordnede kontekstene også tilgjengelige. Dette er nyttig når du skal definere kontekstnivåer som går fra svært generelle situasjoner til mer spesifikke kontekster. Merk at i kontekstdefinisjonen er en ID for en overordnet kontekst tildelt konteksten:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
Den overordnede konteksten definerer en mer generell kontekst for arbeid i et vindu. Den overordnede konteksten for denne konteksten definerer en enda mer generell kontekst for arbeid i et vindu eller i en dialogboks.
<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>

Knytte et bidrag til en kontekst

Så langt har vi bare definert et hierarki av kontekster. Konteksten er nyttig når det refereres til den i beskrivelsen av et annet brukergrensesnittbidrag. Det vanligste bruksområde for kontekster er i tastbindinger. Når en kontekst tilknyttes en tastbinding, er tastbindingen aktiv så lenge brukeren befinner seg i denne konteksten. For eksempel angir følgende kodetype rotdialogboksen og vinduskonteksten som konteksten for en tastbinding:

   <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>

Bruke programmeringsgrensesnitt for kontekst

Arbeidsbenkkonteksten støtter et programmeringsgrensesnitt for arbeid med definerte kontekster og definering av kriterier for aktivering av en bestemt kontekst. De fleste plugin-moduler trenger ikke tenke på dette programmeringsgrensesnittet, men det er nyttig ved definering av spesialvisninger eller redigeringsprogrammer som definerer nye kontekster.

Startpunktet for arbeid med kontekster i arbeidsbenken, er IContextService. Plugin-moduler kan hente den globale kontekststøtteforekomsten fra arbeidsbenken.

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

Tjenester som IContextService, IHandlerService, og IBindingService kan hentes ved hjelp av en IServiceLocator. IWorkbench, IWorkbenchWindow og IWorkbenchSite er alle IServiceLocator.

IContextService definerer protokoll for henting av alle definerte eller aktiverte kontekst-IDer, og for henting av tilknyttet Context for en bestemt ID. Disse objektene kan brukes til å traversere definisjonen for en kontekst i programmeringsgrensesnittet, for eksempel henting av en ID, et navn eller IDen for den overordnede konteksten. Lyttere kan registreres i kontekststyreren eller i selve kontekstene for å finne endringer i definisjonen av en bestemt kontekst eller i selve kontekststyreren. Du finner mer informasjon i pakken org.eclipse.core.commands.contexts.

Contexts kan aktiveres programmatisk:

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

IContextActivation er et symbol som kan brukes til å deaktivere en aktiv kontekst. Du bør sikre at du bare aktiverer definerte kontekster.

Hvis du aktiverer en mer spesifikk kontekst i delen (enten visning eller redigeringsprogram), kan du bruke tjenesteposisjonsviseren for delstedet til å aktivere konteksten. Delens IContextService vil ta seg av aktivering og deaktivering av konteksten idet delen din aktiveres eller deaktiveres. Den vil også avhende konteksten når delen avhendes.