Respeitar o suporte de clique único

As Preferências, separador Geral, permite aos utilizadores especificar se as vistas devem abrir os seus objectos mediante clique único ou duplo.

Preferências gerais "Modo de abertura" com renúncia de responsabilidade em como a preferência poderá não entrar em vigor em todas as vistas

Porquê a renúncia de responsabilidade acerca desta preferência não funcionar em todas as vistas?   Porque as vistas que são contributos de plug-ins devem suportar explicitamente esta preferência na sua implementação.

Lembremos que uma vista pode ser implementada mediante criação de controlos de SWT e composição de código de SWT padrão ou recorrendo a Visualizadores JFace para tratar os detalhes de baixo nível. O respeito da preferência de clique único pode ser feito a qualquer nível.  A maioria das vistas que abre outros objectos apresenta-os numa vista estruturada à semelhança de uma lista.   Ficaremos nesse tipo de vista por agora.  Se a vista apresentar objectos de maneira diferente, é provável que utilize os conceitos de nível de SWT para suportar clique único.

Clique único em visualizadores JFace

Se utilizar um visualizador JFace orientado para listas para apresentar os seus objectos, o suporte de clique único é muito simples.  Em vez de utilizar addDoubleClickListener para desencadear a abertura de artigos na nossa vista, utilize addOpenListener. O ouvinte aberto respeita a actual preferência de área de trabalho, desencadeando o evento de abertura quando ocorrer o evento de rato especificado.

Ainda poderá optar por utilizar addDoubleClickListener para acções alheias a aberturas como, por exemplo, expandir os artigos numa árvore mediante duplo clique.

Clique único em controlos SWT

O JFace faculta uma classe de utilitários, OpenStrategy, para tratar da logística de cliques únicos e duplos a nível dos controlos de SWT.  A OpenStrategy é configurada pelo diálogo Preferências, separador Geral, para respeitar a actual preferência de abertura da área de trabalho. Aliás, os visualizadores JFace utilizam esta classe para implementar o ouvinte de abertura.  

É necessário criar uma OpenStrategy e associá-la ao controlo de SWT.  A OpenStrategy irá ligar via gancho os eventos apropriados e interpretá-los com base nas preferências do utilizador.  O seu trabalho consiste em adicionar um ouvinte de abertura à estratégia que implementa o código para abrir. Desta forma, permanece desconhecedor do evento de widget que desencadeou o evento de abertura.

OpenStrategy openHandler = new OpenStrategy(control);
openHandler.addOpenListener(new IOpenEventListener() {
	public void handleOpen(SelectionEvent e) {
	// código para tratar do evento de abertura.
	...
	}
}

As outras preferências de área de trabalho para abrir (seleccionar à passagem do rato, abrir com teclas de seta) também são tratados pela OpenStrategy.  Significa isto que a "coisa certa" acontece se utilizar visualizadores JFace ou a classe OpenStrategy para implementar comportamento de abertura.

Activar editores na abertura

Ao tratar de um evento de abertura, deve utilizar OpenStrategy.activateOnOpen() para determinar se um editor aberto deve ou não estar activado por predefinição.   Ao activar um editor passará o foco da vista para o editor, o que pode resultar confuso e indesejável em modo de clique único.