• Aucun résultat trouvé

Exemples d’´ ev´ enements virtuels

Pour qu’une liaison d’´ev´enement virtuel se d´eclenche, deux conditions doivent se produire :

– l’´ev´enement virtuel doit ˆetre d´efini avec la commande event add ;

– une liaison doit ˆetre cr´e´ee pour l’´ev´enement virtuel avec la commande bind. Consid´erons les d´efinitions d’´ev´enements virtuels suivantes :

event add <<Paste>> <Contr^ole-y> event add <<Paste>> <Button-2>

event add <<Save>> <Contr^ole-X><Contr^ole-S> event add <<Save>> <Shift-F12>

Par la commande bind, un ´ev´enement virtuel peut ˆetre li´e `a n’importe quel autre type d’´ev´enement de base, comme ceci :

bind Entry <<Paste>> {\%W insert [selection get]}

Les doubles crochets angulaires sont utilis´es pour sp´ecifier qu’un ´ev´enement virtuel est li´e. Si l’utilisateur tape Contrˆole-y ou enfonce le second bouton de la souris, ou si un ´ev´enement virtuel Paste est fabriqu´e avec event generate, alors la liaison Paste sera invoqu´ee.

Si une liaison virtuelle a exactement la mˆeme s´equence qu’une certaine liaison physique, la liaison physique sera consid´er´ee prioritairement. Consid´erons l’exemple suivant :

event add <<Paste>> <Contr^ole-y> <M´eta-Contr^ole-y> bind Entry <Contr^ole-y> {puts Contr^ole-y}

bind Entry <<Paste>> {puts Paste}

Lorsque l’utilisateur tape Contrˆole-y la liaison <Contr^ole-y>est invoqu´ee, parce qu’un ´ev´enement physique est consid´er´e comme plus important qu’un ´ev´enement virtuel. N´eanmoins, quand l’utilisateur tape M´eta-Contrˆole-y c’est la liaison Paste qui est invoqu´ee, car le modificateur M´eta dans le motif physique associ´e `a l’´ev´ene- ment virtuel est plus sp´ecifique que la s´equence <Contr^ole-y>pour l’´ev´enement physique.

Des liaisons `a un ´ev´enement virtuel peuvent ˆetre cr´e´ees avant que l’´ev´enement virtuel n’existe. En effet, l’´ev´enement virtuel n’aura jamais besoin d’ˆetre effective- ment d´efini, par exemple, sur des plates-formes sur lesquelles l’´ev´enement virtuel sp´ecifique n’aurait pas de signification ou serait impossible `a g´en´erer.

Si la d´efinition d’un ´ev´enement virtuel change en cours d’ex´ecution, toutes les fenˆetres r´epondront imm´ediatement `a la nouvelle d´efinition. Dans l’exemple qui pr´ec`ede, si le code suivant est ex´ecut´e:

bind <Entry> <Contr^ole-y> {event} event add <<Paste>> <Key-F6>

le comportement sera modifi´e sur deux points :

– la liaison dissimul´ee se r´ev´elera; taper Contrˆole-y n’invoquera plus la liaison <Contr^ole-y>, mais plutˆot l’´ev´enement virtuel Paste.

focus

G`ere la focalisation.

Syntaxe

focus focus fenˆetre

focus sous-commande?arg arg ...?

Description

La commande focus est utilis´ee pour g´erer la focalisation des composants par Tk. `A un moment donn´e, une fenˆetre est d´esign´ee sur chaque moniteur comme fenˆetre focalis´ee : cela signifie que tous les ´ev´enements de clavier (touche enfonc´ee ou touche relˆach´ee) sont adress´es `a cette fenˆetre et pas `a une autre. C’est en principe, le gestionnaire de fenˆetrage qui g`ere la focalisation parmi les fenˆetres de premier niveau sur le moniteur. Sur certains syst`emes par exemple, ce gestionnaire focalise automatiquement la fenˆetre qui se trouve sous le pointeur de la souris, qu’elle soit active ou non, tandis que sur d’autres syst`emes, la fenˆetre ne re¸coit la focalisation que lorsque l’utilisateur clique dessus pour l’activer. Le gestionnaire de fenˆetres ne g`ere que les fenˆetres de niveau sup´erieur et laisse le soin `a l’application de g´erer la focalisation parmi tous les descendants d’une fenˆetre de niveau sup´erieur.

Tk m´emorise, pour chaque fenˆetre de niveau sup´erieur, une seule focalisa- tion : lorsque le gestionnaire de fenˆetres du syst`eme place la focalisation sur une fenˆetre particuli`ere, Tk redirige cette focalisation sur le widget de la fenˆetre qu’il a m´emoris´e. Avec Tk, de simples d´eplacements de la souris ne modifient pas la foca- lisation : celle-ci ne change que lorsqu’un composant r´eclame explicitement d’ˆetre focalis´e ou parce que l’utilisateur a press´e une touche qui conduit `a d´eplacer la fo- calisation (comme par exemple la touche de tabulation qui permet de passer d’un champ de saisie `a un autre).

La proc´edure Tcl appel´ee Tk focusFollowsMouse peut ˆetre appel´ee pour cr´eer un mod`ele implicite de focalisation : elle reconfigure Tk de telle sorte qu’une fenˆetre re¸coive la focalisation d`es que le curseur de la souris se trouve au-dessus. Les proc´edures Tcl Tk focusNext et Tk focusPrev permettent de contrˆoler l’ordre de focalisation parmi les fenˆetres de premier niveau (cf. 85). Elles sont associ´ees par d´efaut aux touches Tabulation et Majuscule-Tabulation.

La commande focus peut prendre une des formes suivantes : focus

Renvoie le nom de chemin de la fenˆetre focalis´ee sur l’´ecran qui contient la fenˆetre principale de l’application, ou une chaˆıne vide si aucune fenˆetre de l’application n’est focalis´ee. En cas d’ambigu¨ıt´e, on peut sp´ecifier l’´ecran explicitement au moyen de l’option -displayof.

focus fenˆetre

Si l’application d´etient actuellement la focalisation sur l’´ecran de la fenˆetre d´esign´ee par l’argument fenˆetre, cette commande r´eassigne la focalisation `a cette fenˆetre et renvoie une chaˆıne vide. Si l’application elle-mˆeme ne d´etient pas la focalisation sur cet ´ecran, la fenˆetre fenˆetre sera simplement m´emoris´ee comme objet focalis´e pour sa fenˆetre de premier niveau : la prochaine fois que la fenˆetre de premier niveau recevra la focalisation, Tk la transmettra directement `a la sous-fenˆetre fenˆetre. Si l’argument fenˆetre est une chaˆıne vide, la commande est sans effet.

focus -displayof fenˆetre

Renvoie le nom de la fenˆetre focalis´ee sur l’´ecran contenant la fenˆetre d´esign´ee par l’argument fenˆetre. Si la fenˆetre focalis´ee sur cet ´ecran n’appartient pas `a l’application, la valeur de retour est une chaˆıne vide.

focus -force fenˆetre ´

Etablit la focalisation sur la fenˆetre d´esign´ee par l’argument fenˆetre, mˆeme si l’application ne d´etient pas la focalisation pour cet ´ecran. Cette commande n’est pas orthodoxe : normalement, une application ne doit pas r´eclamer elle- mˆeme la focalisation mais plutˆot attendre que le gestionnaire de fenˆetres la lui assigne. Si l’argument fenˆetre est une chaˆıne vide, la commande est sans effet.

focus -lastfor fenˆetre

Renvoie le nom du plus r´ecent widget focalis´e parmi tous les widgets appar- tenant `a la mˆeme fenˆetre de premier niveau que fenˆetre. Si aucun widget `a ce niveau n’a encore ´et´e focalis´e, ou si le plus r´ecent a ´et´e d´etruit entre-temps, c’est le nom de la fenˆetre de premier niveau qui est renvoy´e. La valeur de re- tour est le widget qui sera focalis´e la prochaine fois que le serveur de fenˆetres assignera la focalisation `a la fenˆetre de premier niveau.