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.
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.
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>
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:
<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>
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 plug-ins 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 IContextService. Los plug-ins pueden obtener la instancia de soporte de contexto global desde el entorno de trabajo.
IContextService contextService = (IContextService)PlatformUI.getWorkbench() .getService(IContextService.class);
Servicios como IContextService, IHandlerService y IBindingService pueden recuperarse mediante un IServiceLocator. IWorkbench, IWorkbenchWindow y IWorkbenchSite son todos IServiceLocator.
IContextService define un protocolo para obtener todos los ID de contexto definidos o habilitados y para obtener el Context 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.core.commands.contexts para obtener más información.
Los contextos pueden habilitarse por programa:
IContextActivation activation = contextService.activateContext("org.eclipse.ui.textEditorScope");
IContextActivation es un símbolo que puede utilizarse para desactivar un contexto activo. Debe asegurarse de activar sólo los contextos definidos.
Si está activando un contexto más específico dentro del componente (vista o editor), puede utilizar el localizador de servicio de sitio del componente para activar el contexto. El IContextService del componente se encargará de activar y desactivar el contexto cuando se active o desactive el componente. También eliminará el contexto cuando se elimine el componente.