Kontexter

En kontext kan användas till att påverka vilka kommandon som är tillgängliga för användaren vid en given tidpunkt. Kontexter är mycket mer dynamiska än aktiviteter. Medan en aktivitet betecknar en bred uppsättning funktioner som är tillgängliga för användaren den mesta av tiden, beskriver kontexter ett fokus för användaren vid en viss tidpunkt. Ett exempel: de kommandon som är tillgängliga för en användare när han eller hon redigerar text kan skilja sig från dem som är tillgängliga vid redigering av Java-text eller bläddring i paket i paketutforskaren.

Definiera en kontext

Kontexter deklareras i utökningspunkten org.eclipse.ui.contexts. Granska följande kontext som har definierats för redigering av text:

<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>
Kontexter tilldelas ett namn och en beskrivning som används vid visning av information om kontexten för användaren. ID:t för kontexten används vid bindning av UI-bidrag som kommandon till en viss kontext.

Kontexthierarkier

Kontexter är hierarkiska av naturen. När en kontext är aktiv är även kommandona i kontexten och i dess överordnade kontexter tillgängliga. Detta är användbart för definiering av nivåer med kontexter som rör sig från väldigt allmänna situationer ned till mer specifika kontexter. I kontextdefinitionen ovan kan man se att det finns ett id för en överordnad kontext tilldelad i kontexten:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
Den överordnade kontexten definierar den mer allmänna kontexten för arbete i ett fönster. Dess överordnade kontext definierar en ännu mer allmän kontext för arbete i ett fönster eller en dialogruta.
<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>

Associera ett bidrag med en kontext

Hittills är allt vi gjort att definiera en hierarki av kontexter. Kontexten blir användbar när den hänvisas till i beskrivningen av ett annat UI-bidrag. Den vanligaste användningen av kontexter är i nyckelbindningar. När en kontext associeras till en nyckelbindning, blir nyckelbindningen bara aktiv när användaren befinner sig i den kontexten. Ett exempel: följande kod specificerar rotdialogrutan och fönsterkontexten som kontext för en nyckelbindning:

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

Använda kontext-API

Arbetsmiljöns kontextstöd innefattar ett API för arbete med de definierade kontexterna och definiering av kriterier under vilka en viss kontext ska aktiveras. De flesta insticksmoduler behöver inte bekymra sig om detta API, men det är användbart vid definiering av specialiserade vyer eller redigerare som definierar nya kontexter.

Startpunkten för arbete med kontexter i arbetsmiljön är IContextService. Insticksprogram kan erhålla den globala kontextstödsförekomsten från arbetsmiljön.

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

Tjänster som IContextService, IHandlerService, och IBindingService kan hämtas med hjälp av en IServiceLocator. IWorkbench, IWorkbenchWindow, och IWorkbenchSite är alla IServiceLocator.

IContextService definierar protokoll för hämtning av alla definierade eller aktiverade kontext-ID:n och för hämtning av den associerade kontexten för ett visst ID. Dessa objekt kan användas till att gå igenom definitionen för en kontext i API:t, t.ex. att hämta ID:t, namnet eller ID:t för den överordnade kontexten. Lyssnare kan registreras i kontexthanteraren eller i själva kontexterna och upptäcker ändringar i definitionen av en viss kontext eller i själva kontexthanteraren. Mer information finns i paketet org.eclipse.core.commands.contexts.

Kontexter kan aktiveras programmatiskt:

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

IContextActivation är ett token som kan användas till att avaktivera en aktiv kontext. Se till att du endast aktiverar definierade kontexter.

Om du aktiverar en mer specifik kontext inom din del (antingen vyn eller redigeraren) kan du använda delplatssökfunktionen till att aktivera din kontext. IContextService för delen aktiverar eller avaktiverar kontexten när din del aktiveras elleravaktiveras. Den tar också bort kontexten när delen tas bort.