[Squeak-fr] Re: positionner le curseur

Jean-françois Mathieu jean-francois.mathieu at inrs.fr
Mar 10 Mai 09:49:09 CEST 2005


Merci beaucoup pour ces précisions.
Cordialement.
Mathieu.

-----Message d'origine-----
De : squeak-fr-bounces at lists.squeakfoundation.org
[mailto:squeak-fr-bounces at lists.squeakfoundation.org]De la part de Dominique
Dutoit
Envoyé : vendredi 6 mai 2005 15:46
À : squeak-fr at lists.squeakfoundation.org
Objet : [Squeak-fr] Re: positionner le curseur

> 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