As Preferências Gerais permitem que os usuários especifiquem se as visualizações devem abrir seus objetos com um ou dois cliques.
Por que a rejeição a esta preferência não funciona para todas as exibições? Porque as exibições que recebem contribuição dos plug-ins devem suportar explicitamente esta preferência em sua implementação.
Lembre-se que uma exibição pode ser implementada pela criação de controles SWT e gravação de código SWT padrão, ou utilizando visualizadores JFace para tratar os detalhes de nível inferior. O acatamento da preferência de único clique pode ser feita em qualquer nível. A maioria das exibições que abrem outros objetos apresenta-os em uma exibição estruturada na forma de uma lista. Por enquanto nos concentraremos nesse tipo de exibição. Se sua exibição mostrar objetos de uma maneira diferente, você utilizará os conceitos de nível do SWT para suportar um único clique.
Se você estiver utilizando um visualizador orientado a lista do JFace para apresentar seus objetos, o suporte ao clique único será direto. Em vez de utilizar addDoubleClickListener para acionar a abertura de itens em sua exibição, utilize addOpenListener. O atendente aberto aceita a preferência atual do workbench, ativando o evento aberto quando ocorre o evento de mouse especificado.
Talvez você ainda queira utilizar addDoubleClickListener para ações não abertas, tal como expandir os itens em uma árvore no clique duplo.
O JFace fornece uma classe de utilitário, OpenStrategy, para tratar da logística do clique único e do clique duplo no nível de controle do SWT. A OpenStrategy é configurada pelo diálogo Preferências Gerais de forma que aceite a preferência de abertura do workbench atual. Realmente, os visualizadores do JFace utilizam esta classe para implementar o atendente aberto.
É preciso criar um OpenStrategy e associá-lo a seu controle SWT. O OpenStrategy conectará os eventos apropriados e os interpretará com base nas preferências do usuário. Seu trabalho é adicionar um atendente aberto à estratégia que implementa o código para abertura. Dessa maneira, você é protegido do conhecimento sobre qual evento de widget acionou o evento de abertura.
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // código para tratar do evento aberto. ... } }
As outras preferências de abertura do workbench (selecionar suspenso, abrir utilizando teclas de seta) também são tratadas por OpenStrategy. Isso significa que a "coisa certa" acontecerá se você utilizar os visualizadores do JFace ou a classe OpenStrategy para implementar o comportamento de abertura.
Ao tratar de um evento aberto, você deve utilizar OpenStrategy.activateOnOpen() para determinar se um editor aberto deve ser ativado por padrão. Ativar um editor muda o foco da exibição para o editor, que pode ser particularmente confuso e indesejável no modo de clique único.