Contextos

Un contexto puede utilizarse para influir sobre los mandatos que están disponibles para el usuario en un momento determinado. Los contexto son mucho más dinámicos que las actividades. Mientras que una actividad representa un amplio conjunto de funciones disponibles para el usuario la mayor parte del tiempo, los contextos describen un foco del usuario en un momento determinado. Por ejemplo, los mandatos disponibles para el usuario al editar texto pueden ser diferentes de los que están disponibles para el usuario al editar texto Java o examinar paquetes en el explorador de paquetes.

Definir un contexto

Los contextos se declaran en el punto de extensión org.eclipse.ui.contexts. Considere el siguiente contexto, que se define para editar 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>
Los contextos reciben un nombre una descripción utilizados cuando el usuario visualiza información acerca del contexto. El ID del contexto se utiliza al enlazar contribuciones de UI, como por ejemplo mandatos, con un contexto determinado.

Jerarquías de contextos

Los contextos son de naturaleza jerárquica. Cuando un contexto está activo, están disponibles los mandatos del contexto y los de los contextos padre. Esto resulta de utilidad para definir niveles de contextos que van desde situaciones muy generales a contextos más específicos. En la definición de contexto anterior, observe que existe un ID de un padre asignado al contexto:

	<context
		name="%context.editingText.name"
		description="%context.editingText.description"
		id="org.eclipse.ui.textEditorScope"
		parentId="org.eclipse.ui.contexts.window">
	</context>
El contexto padre define el contexto más general de trabajo dentro de una ventana. Su padre define un contexto aún más general de trabajo dentro de una ventana o 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>

Asociar una contribución con un contexto

Hasta ahora, lo único que hemos hecho es definir una jerarquía de contextos. El contexto se convierte en útil cuando se hace referencia a él en la descripción de otra contribución de UI. El uso más común de los contextos tiene lugar en los enlaces de teclas. Cuando un contexto se asocia con un enlace de teclas, éste sólo estará activo cuando el usuario se encuentre en dicho contexto. Por ejemplo, el código siguiente especifica el contexto de ventana y diálogo raíz como contexto de un enlace de teclas:

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

Utilizar la API de contexto

El soporte de contexto del entorno de trabajo incluye una API para trabajar con los contextos definidos y para definir criterios bajo los que debe habilitarse un contexto determinado. La mayoría de conectores no están concernidos por esta API, pero resulta de utilidad al definir vistas o editores especializados que definen contextos nuevos.

El punto de partida para trabajar con contextos en el entorno de trabajo es IWorkbenchContextSupport. Los conectores pueden obtener la instancia de soporte de contexto del entorno de trabajo.

IWorkbenchContextSupport workbenchContextSupport = PlatformUI.getWorkbench().getContextSupport();
Puede utilizarse la API de soporte de contextos del entorno de trabajo para añadir o eliminar una EnabledSubmission, que describe los criterios que deben provocar la habilitación de un contexto determinado. Los criterios incluyen información como, por ejemplo, el componente activo o la shell activa. El soporte del entorno de trabajo también proporciona acceso a un IContextManager.
IContextManager contextManager = workbenchContextSupport.getContextManager();

IContextManager define un protocolo para obtener todos los ID de contexto definidos o habilitados y para obtener el IContext asociado a un ID determinado. Estos objetos pueden utilizarse para cruzar la definición de un contexto en la API, como por ejemplo para obtener el ID, el nombre o el ID del contexto padre. Pueden registrarse escuchas en el gestor de contextos o en los propios contextos para detectar los cambios efectuados en la definición de un contexto determinado o en el propio gestor de contextos. Consulte el paquete org.eclipse.ui.contexts para obtener más información.