Contesti

Un contesto può essere utilizzato per influenzare i comandi disponibili all'utente in un determinato momento. I contesti sono molto più dinamici delle attività. Mentre un'attività rappresenta un grande insieme di funzioni spesso disponibili all'utente, i contesti descrivono un punto di interesse dell'utente in un determinato momento. Ad esempio, i comandi disponibili per un utente durante la modifica del testo possono essere diversi da quelli disponibili per un utente durante la modifica del testo Java o l'esplorazione dei pacchetti in Esplora pacchetti.

Definizione di un contesto

I contesti sono definiti nel punto di estensione org.eclipse.ui.contexts. Si consideri il seguente contesto definito per la modifica del testo:

<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>
Ai contesti vengono assegnati un nome e una descrizione utilizzati quando le informazioni sul contesto vengono visualizzate dall'utente. L'id del contesto viene utilizzato quando si collegano i contributi UI, ad esempio i comandi, ad un determinato contesto.

Gerarchie di contesti

I contesti sono gerarchici per natura. Quando un contesto è attivo, sono disponibili anche i comandi disponibili nel contesto e nei contesti principali. Ciò è utile per definire i livelli dei contesti che passano da situazioni molto generali a contesti più specifici. Nella definizione di contesto in alto, un id di un elemento principale è stato assegnato al contesto:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
Il contesto principale definisce il contesto più generale di funzionamento all'interno di una finestra. Il relativo elemento principale definisce un contesto ancora più generale di funzionamento all'interno di una finestra o di una finestra di dialogo.
<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>

Associazione di un contributo ad un contesto

È stato illustrato come definire una gerarchia di contesti. Il contesto diventa utile quando si fa riferimento a tale contesto nella descrizione di un altro contributo UI. L'utilizzo più comune dei contesti è nelle associazioni tasti. Quando un contesto è collegato ad un'associazione tasti, tale associazione diventa attiva quando l'utente si trova in quel contesto. Ad esempio, il tag di seguito riportato specifica la finestra di dialogo principale ed il contesto della finestra come contesto per un'associazione tasti:

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

Utilizzo dell'API di contesto

Il supporto contesti del workbench include un'API per la gestione dei contesti definiti e la definizione dei criteri con cui un determinato contesto diventa abilitato. Molti plugin non sono associati a questa API, ma questa API è utile quando si definiscono viste o editor specifici che definiscono nuovi contesti.

The starting point for working with contexts in the workbench is IContextService. Plug-ins can obtain the global context support instance from the workbench.

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

Services like IContextService, IHandlerService, and IBindingService can be retrieved using an IServiceLocator. IWorkbench, IWorkbenchWindow, and IWorkbenchSite are all IServiceLocator.

IContextService defines protocol for getting all defined or enabled context ids, and for getting the associated Context for a particular id. Questi oggetti possono essere utilizzati per trasferire la definizione di un contesto nell'API, ad esempio la visualizzazione dell'id, del nome o dell'id del contesto principale. I listener possono essere registrati nel gestore contesto o nei contesti stessi, per individuare le modifiche nella definizione di un determinato contesto o nel gestore contesti. See the package org.eclipse.core.commands.contexts for more information.

Contexts can be enabled programmatically:

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

The IContextActivation is a token that can be used to deactivate an active context. You should ensure that you only activate defined Contexts.

If you are activating a more specific Context within your part (either View or Editor) you can use the part site service locator to active your Context. The part's IContextService will take care of activating and deactivating the Context as your part is activated or deactivated. It will also dispose the Context when the part is disposed.