Um contexto pode ser usado para influenciar os comandos que estão disponíveis ao utilizador em dado momento. Os contextos são mais dinâmicos que as actividades. Porquanto uma actividade represente um conjunto alargado de funcionalidades disponíveis ao utilizador na maior parte do tempo, os contextos descrevem um foco do utilizador em determinado ponto no tempo. Por exemplo, os comandos disponíveis a um utilizador ao editar texto poderão ser diferentes dos disponíveis a um utilizador ao editar texto Java ou procurar pacotes no explorador de pacotes.
Os contextos são declarados no ponto de extensão org.eclipse.debug.ui.contexts. Considere o seguinte contexto que está 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>São atribuídos nome e descrição aos contextos que são usados para mostrar informações sobre o contexto ao utilizador. O ID do contexto é utilizado ao associar contributos de UI como, por exemplo, comandos a determinado contexto.
Os contextos são hierárquicos por natureza. Quando um contexto está activo, os comandos disponíveis no contexto e nos seus contextos ascendentes também ficam disponíveis. Isto é útil para definir níveis de contextos que passam de situações muito genéricas para contextos mais específicos. Na definição de contexto supra, repare que há um ID de um ascendente atribuído ao contexto:
<context name="%context.editingText.name" description="%context.editingText.description" id="org.eclipse.ui.textEditorScope" parentId="org.eclipse.ui.contexts.window"> </context>O contexto ascendente define o contexto mais geral do trabalho numa janela. O respectivo contexto ascendente define um contexto ainda mais geral do trabalho numa janela ou numa caixa de 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>
Até agora, só definimos uma hierarquia de contextos. O contexto torna-se útil quando é referenciado na descrição de outro contributo de UI. A utilização mais comum dos contextos é em associações de teclas. Quando um contexto é associado a uma associação de teclas, esta só ficará activa quando o utilizador estiver nesse contexto. Por exemplo, a marcação seguinte especifica a caixa de diálogo raiz e o contexto de janela como contexto para uma associação de teclas:
<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>
O suporte de contextos da área de trabalho inclui uma API para trabalhar com os contextos definidos e critérios de definição com os quais determinado contexto deve ficar activado. A maioria dos plug-ins não tem que se preocupar com esta API, mas é útil quando se definem vistas ou editores especializados que definam novos contextos.
O ponto de partida para trabalhar com contextos na área de trabalho é IContextService. Os plug-ins podem obter instâncias de suporte de contexto global a partir da área de trabalho.
IContextService contextService = (IContextService)PlatformUI.getWorkbench() .getService(IContextService.class);
Os serviços como IContextService, IHandlerService e IBindingService podem ser obtidos através da utilização de IServiceLocator. A IWorkbench, a IWorkbenchWindow e o IWorkbenchSite são IServiceLocator.
O IContextService define o protocolo para obter todos os IDs de contexto definidos ou activados e para obter o Context associado para um determinado id. Estes objectos podem ser usados para atravessar a definição de uma contexto na API como, por exemplo, obter ID, nome ou ID do contexto ascendente. Podem ser registados ouvintes no gestor de contextos ou nos próprios contextos a fim de detectar alterações na definição de dado contexto ou no próprio gestor de contextos. Para mais informações, consulte o pacote org.eclipse.core.commands.contexts.
Os Contexts podem ser activados programaticamente:
IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");
A IContextActivation é um sinal que pode ser utilizado para desactivar um contexto activo. Deverá certificar-se que apenas activa os Context definidos.
Se estiver a activar um Context mais específico no seu componente (Vista ou Editor), pode utilizar o localizador de serviços do sítio do componente para activar o Context. O IContextService do componente irá activar e desactivar o Context há medida que o componente for activado ou desactivado. Irá também eliminar o Context quando o componente for desactivado.