Contextos

Um contexto pode ser utilizado para influenciar quais comandos estão disponíveis para o usuário a qualquer momento. Os contextos são muito mais dinâmicos que as atividades. Enquanto uma atividade representa um amplo conjunto de funções que está disponível para o usuário a maior parte do tempo, os contextos descrevem um foco do usuário em um momento específico. Por exemplo, os comandos disponíveis para um usuário ao editar texto podem ser diferentes dos que estão disponíveis para um usuário ao editar texto Java ou procurar pacotes no explorador de pacotes.

Definindo um Contexto

Os contextos são declarados no ponto de extensão org.eclipse.ui.contexts. Considere o seguinte contexto que é definido para edição de texto:

<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>
Os contextos recebem um nome e descrição que são utilizados ao mostrar informações sobre o contexto para o usuário. O id do contexto é utilizado ao ligar contribuições de UI como comandos a um contexto específico.

Hierarquias de Contexto

Os contextos são hierárquicos por natureza. Quando um contexto está ativo, os comandos disponíveis no contexto e nos contextos pais também estão disponíveis. Isso é útil para definir níveis de contextos que movem de situações muito gerais para contextos mais específicos. Na definição de contexto acima, observe que há um id de um pai designado para o contexto:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
O contexto pai define o contexto mai geral de trabalhar em uma janela. Seu pai define um contexto ainda mais geral de trabalhar em uma janela ou um diálogo.
<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>

Associando uma Constribuição a um Contexto

Até agora, tudo que temos feito é definir uma hierarquia de contextos. O contexto se torna útil quando é utilizado como referência na descrição de outra contribuição de UI. O uso mais comum de contextos está nas ligações de tecla. Quando um contexto está associado a uma ligação de tecla, a ligação de tecla estará ativa somente quando o usuário estiver naquele contexto. Por exemplo, a seguinte marcação especifica o diálogo de raiz e o contexto de janela como o contexto para uma ligação de tecla:

<keyBinding
	commandId="org.eclipse.ui.edit.cut"
	contextId="org.eclipse.ui.contexts.dialogAndWindow"
	keySequence="M1+X"
	keyConfigurationId="org.eclipse.ui.defaultAcceleratorConfiguration">
</keyBinding>

Utilizando a API de Contexto

O suporte de contexto do workbench inclui uma API para trabalhar com os contextos definidos e definir critérios sob os quais um contexto específico deve ser ativado. A maioria dos plug-ins não precisa se preocupar com essa API, mas é útil ao definir visualizações ou editores especializados que definem novos contextos.

O ponto de partida para trabalhar com contextos no workbench é IWorkbenchContextSupport. Os plug-ins podem obter a instância de suporte de contexto a partir do workbench.

IWorkbenchContextSupport workbenchContextSupport = PlatformUI.getWorkbench().getContextSupport();
A API de suporte do wrokbench pode ser utilizada para incluir ou remover um EnabledSubmission, que descreve os critérios que devem fazer com que um contexto específico seja ativado. Os critérios incluem informações como a parte ativa ou o shell ativo. O suporte do workbench também fornece acesso a um IContextManager.
IContextManager contextManager = workbenchContextSupport.getContextManager();

O IContextManager define protocolo para obter todos os ids de contexto definidos ou ativados e para obter o IContext associado para um id específico. Esses objetos podem ser utilizados para atravessar a definição para um contexto em API, como obter o id, nome ou id do contexto pai. Os listeners podem ser registrados no gerenciador de contexto ou nos próprios contextos para detectar alterações na definição de um contexto específico ou no próprio gerenciador de contexto. Consulte o pacoteorg.eclipse.ui.contexts para obter informações adicionais.