v
Las Preferencias del entorno de trabajo permiten a los usuarios especificar si los objetos de las vistas se deben abrir al pulsar una sola vez o al pulsar dos veces.
¿Por qué se advierte de que esta preferencia podría no funcionar en todas las vistas? Porque las vistas suministradas como contribución de los conectores deben dar soporte explícito a esta preferencia en su implementación.
Recuerde que una vista puede implementarse creando controles SWT y escribiendo código SWT estándar, o utilizando visores JFace para manejar los detalles de bajo nivel. El cumplimiento de la preferencia de una sola pulsación puede realizarse a cualquier nivel. La mayoría de las vistas que abren otros objetos los presentan en una vista estructurada a modo de lista. Por ahora, nos centraremos en este tipo de vista. Si su vista visualiza los objetos de forma distinta, probablemente utilizará conceptos a nivel de SWT para dar soporte a la pulsación única.
Si utiliza un visor JFace orientado a listas para presentar los objetos, el soporte de la pulsación única es sencillo. En lugar de utilizar addDoubleClickListener para desencadenar la apertura de los elementos de la vista, utilice addOpenListener. El escuchador de apertura respeta las preferencias del entorno de trabajo actual, disparando el evento de apertura cuando se produce el evento especificado del ratón.
Todavía puede resultarle interesante utilizar el método addDoubleClickListener para las acciones no de apertura, como son las de expandir los elementos de un árbol al pulsar dos veces.
JFace proporciona una clase de utilidades, OpenStrategy, que maneja la logística de una sola pulsación y de doble pulsación a nivel de control de SWT. La estrategia de apertura, OpenStrategy, se configura mediante el diálogo Preferencias del entorno de trabajo para que respete la preferencia de apertura actual del entorno de trabajo. De hecho, los visores de JFace emplean esta clase para implementar el escuchador de apertura.
Debe crear una OpenStrategy y asociarla con el control SWT. La OpenStrategy enganchará los eventos adecuados y los interpretará en función de las preferencias del usuario. El trabajo del usuario consiste en añadir a la estrategia un escuchador de apertura que implemente el código de apertura. De este modo, no le será necesario saber qué evento de widget ha desencadenado el evento de apertura.
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // código para manejar el evento de apertura. ... } }
Las otras preferencias de apertura (seleccionar en menú flotante, abrir mediante las teclas de flecha) del entorno de trabajo también están manejadas por la clase OpenStrategy. Esto quiere decir que sucederá lo "correcto" si utiliza los visores de JFace o la clase OpenStrategy para implementar el comportamiento de la apertura.
Al manejar un evento de apertura, debe utilizar el método OpenStrategy.activateOnOpen() para determinar si un editor abierto se debe activar por omisión. El hecho de activar un editor hace que el foco pase de la vista al editor, lo que puede resultar especialmente confuso y no deseable en la modalidad de una sola pulsación.