[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