Overholde støtte for enkeltklikk

Via de generelle preferansene kan brukere angi om visninger skal åpne objektene med et enkelt- eller dobbeltklikk.

Generelle preferanser for "åpnemodus" med reservasjon om at preferansen ikke alltid gjelder i alle visninger

Hvorfor en reservasjon om at denne preferansen ikke fungerer i alle visninger?  Fordi visninger fra plugin-moduler eksplisitt må støtte denne preferansen i implementeringen.

Du husker kanskje at en visning kan implementeres ved å opprette SWT-kontroller og skrive standard SWT-kode, eller ved å bruke JFace-visningsprogrammer til å håndtere detaljer på lavere nivåer. Overholdelse av preferansen for enkeltklikk kan gjøres på alle nivåer. De fleste visningene som åpner andre objekter, presenterer dem i en strukturert listelignende visning. Vi skal foreløpig konsentrere oss om denne typen visning. Hvis visningen viser objekter på en annen måte, vil du sannsynligvis bruke SWT-nivåbegrepene for å støtte enkeltklikk.

Enkeltklikk i JFace-visningsprogrammer

Hvis du presenterer objektene med et JFace-listeorientert visningsprogram, er støtte for enkeltklikk enkelt. I stedet for å bruke addDoubleClickListener til å utløse åpningen av elementene i visningen, bruker du addOpenListener. Åpningslytteren tar hensyn til gjeldende arbeidsbenkpreferanse og starter åpningshendelsen når den oppgitte musehendelsen utføres.

Du kan fortsatt bruke addDoubleClickListener for handlinger som ikke er åpningshandlinger, for eksempel utvide elementene i et tre ved dobbeltklikk.

Enkeltklikk i SWT-kontroller

JFace har en funksjonsklasse, OpenStrategy, som håndterer logistikken for enkelt- og dobbeltklikk på SWT-kontrollnivå.  OpenStrategy konfigureres av dialogboksen for generelle preferanser slik at det tas hensyn til den aktuelle åpningspreferansen i arbeidsbenken. Faktum er at JFace-visningsprogrammer bruker denne klassen til å implementere åpningslytteren. 

Du må opprette en OpenStrategy og knytte den til SWT-kontrollen.  OpenStrategy binder de aktuelle hendelsene og tolker dem på bakgrunn av brukerpreferansene. Din jobb består i å legge til en åpningslytter i strategien som implementerer åpningskoden.  På denne måten skjermes du mot kunnskap om hvilken widget-hendelse som utløste åpningshendelen.

OpenStrategy openHandler = new OpenStrategy(control);
openHandler.addOpenListener(new IOpenEventListener() {
	public void handleOpen(SelectionEvent e) {
	// code to handle the open event.
	...
	}
}

Den andre arbeidsbenkpreferansen for åpning (velg ved peking, åpnes ved hjelp av piltaster) håndteres også av OpenStrategy.  Dette betyr at det vil gå "riktig" for seg hvis du bruker JFace-visningsprogrammer eller OpenStrategy-klassen, til å implementere åpningsfunksjonalitet.

Aktivere redigeringsprogrammer ved åpning

Når du håndterer en åpningshendelse, må du bruke OpenStrategy.activateOnOpen() for å angi om et åpnet redigeringsprogram skal aktiveres som standard. Hvis du aktiverer et redigeringsprogram, flyttes fokuset fra visningen til redigeringsprogrammet, noe som kan være forvirrende og ikke er ønskelig i modus for enkeltklikk.