Contexten

Welke opdrachten voor de gebruiker beschikbaar zijn, wordt beïnvloed door contexten. Contexten zijn veel dynamischer dan activiteiten. Activiteiten omvatten een groot aantal functies die vrijwel altijd beschikbaar zijn voor de gebruiker, terwijl contexten de omgeving van de gebruiker aanduiden op een bepaald tijdstip. De opdrachten die bijvoorbeeld beschikbaar zijn tijdens het bewerken van tekst, kunnen verschillen van de beschikbare opdrachten tijdens het bewerken van Java-code of het bladeren door pakketten in de Pakketverkenner.

Een context definiëren

Contexten worden gedeclareerd in het extensiepunt org.eclipse.ui.contexts. Een voorbeeld van een context voor het bewerken van 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>
Aan contexten worden een naam en een beschrijving toegewezen, die tijdens het afbeelden van gegevens over de context worden gebruikt. Zodra gebruikersinterface-aanleveringen aan een bepaalde context worden gekoppeld, is het context-ID nodig.

Contexthiërarchieën

Een context is hiërarchisch. Wanneer een context actief is, zijn zowel de opdrachten van de context zelf als de opdrachten van de bovenliggende context(en) beschikbaar. Zo kunnen contextniveaus worden gedefinieerd, die van zeer algemeen naar specifiek worden verfijnd. In de bovenstaande contextdefinitie is het ID van een bovenliggende context opgegeven:

<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
De bovenliggende context omvat een algemenere context met betrekking tot het werken in een venster. Het bovenliggende item van deze context omvat zelfs een nog algemenere context met betrekking tot het werken in een (dialoog)venster.
<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>

Een aanlevering aan een context koppelen

Tot dusver hebt u alleen kunnen lezen hoe u een hiërarchie van contexten kunt definiëren. De contexten worden pas nuttig wanneer ernaar wordt verwezen in de beschrijving van andere aanleveringen voor de gebruikersinterface. Contexten worden het meest gebruikt in combinatie met toetskoppelingen. Een toetskoppeling die aan een context is toegewezen, is alleen actief wanneer in de context gewerkt wordt. In de volgende markup ziet u bijvoorbeeld hoe de hoofdcontext voor (dialoog)vensters wordt toegewezen aan een toetskoppeling:

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

Context-API gebruiken

De workbench biedt API voor het werken met gedefinieerde contexten en het definiëren van criteria, zodat een bepaalde context alleen onder bepaalde voorwaarden wordt ingeschakeld. De API speelt in de meeste plugins geen rol, maar komt wel van pas bij het definiëren van gespecialiseerde views of editors waarmee nieuwe contexten worden gemaakt.

Om aan de slag te kunnen gaan met contexten in de workbench, begint u met IContextService. De algemene contextondersteunings-instance kan door de plugins worden opgehaald uit de workbench.

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

Services zoals IContextService, IHandlerService en IBindingService kunnen worden opgehaald met behulp van een IServiceLocator. IWorkbench, IWorkbenchWindow en IWorkbenchSite zijn allemaal IServiceLocator.

IContextService definieert een protocol voor het ophalen van alle gedefinieerde of ingeschakelde context-ID's en voor het ophalen van de Context die aan een bepaald ID is gekoppeld. U kunt deze objecten gebruiken om informatie van een contextdefinitie in API op te vragen, zoals het ophalen van het ID, de naam of het ID van de bovenliggende context. Ook kunt u listeners registreren voor de contextmanager of contexten, zodat op wijzigingen in de definities kan worden gereageerd. Raadpleeg het pakket org.eclipse.core.commands.contexts voor meer informatie.

Contexts kunnen programmatisch worden ingeschakeld:

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

IContextActivation is een token dat kan worden gebruikt om een actieve context uit te schakelen. U moet ervoor zorgen dat u alleen gedefinieerde Contexts kunt activeren.

Als u een specifiekere Context binnen uw onderdeel (View of Editor) wilt activeren, kunt u de servicelocatie van uw onderdeel gebruiken om uw Context te activeren. De IContextService van het onderdeel zorgt voor de activering of deactivering van de Context wanneer uw onderdeel wordt geactiveerd of gedeactiveerd. Het zorgt er ook voor dat de Context wordt verwijderd wanneer het onderdeel wordt verwijderd.