[Squeak-fr] Re: positionner le curseur

Dominique Dutoit dominiqued at versateladsl.be
Ven 6 Mai 15:46:07 CEST 2005


> de menu (diaporama) qui me permet de passer facilement d’un sketch à  
> l’autre
> par des raccourcis clavier
> (> : précédent, < : suivant) à condition que le curseur soit sur le  
> sketch.
> Le problème c’est que très vite
> j’en ai eu marre de devoir déplacer la souris, j’aimerais bien pouvoir
> commander ce déplacement directement

Une solution serait de placer la gestion des raccourcis clavier au  
niveau du curseur au lieu du sketch, de cette manière les raccourcis  
fonctionnent quelque soit la position du curseur à l'écran.

ActiveHand est une instance globale de HandMorph et cette classe  
possède quelques crochets (addKeyboardListener:, addMouseListener:) sur  
lesquels on peut greffer son propre gestionnaire d'événements, à  
condition que celui-ci gère le message handleListenEvent:.

Le code ci-dessous est un gestionnaire qui intercepte les touches > et  
< et exécute les commandes qui y sont associées. J'ai utilisé une  
sous-classe d'Object mais cela peut très bien être une sous-classe de  
SketchMorph.

Object subclass: #MyKeyboardListener
	instanceVariableNames: 'commands'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'demo'

MyKeyboardListener>>initialize
	ActiveHand addKeyboardListener: self.
	commands := Dictionary new.
	commands at: $> put: [ Transcript show: 'next slide'; cr. ].
	commands at: $< put: [ Transcript show: 'previous slide'; cr. ].

MyKeyboardListner>>release
	ActiveHand removeKeyboardListener: self

MyKeyboardListener>>handleListenEvent: message
	message isKeyUp ifTrue: [
		commands at: message keyCharacter ifPresent: [:c | c value].
	]

Il faut faire attention à deux choses:
1) on doit relâcher le gestionnaire dès qu'on en a plus besoin.
2) il est assez facile de planter Squeak si handleListenEvent: ne  
fonctionne pas correctement comme toutes les touches du clavier sont  
interceptées, et que dès lors, plus possible de l'utiliser pour éditer  
la méthode.

Il y a un exemple plus complet ici:
http://lists.squeakfoundation.org/pipermail/squeak-dev/2001-October/ 
030185.html


Plus d'informations sur la liste de diffusion Squeak-fr