NOM
bind - associe des scripts Tcl avec les évènements d'interface graphique
SYNTAXE
bind tag
bind tag séquence
bind tag séquence script
bind tag séquence +script
INTRODUCTION
La commande bind lie les scripts Tcl avec les évènements d'interface graphique. Si les trois arguments sont spécifiés, bind préparera script (un script Tcl) a être évalué chaque fois que l'évènement(s) désigné par séquence se produit dans la fenêtre(s) identifiée par tag. Si script est précédé de ``+, alors il est ajouté à toute liaison existante pour séquence; autrement script remplace toute liaison existante. Si script est une chaîne vide alors la liaison courante pour séquence est détruite, et séquence'' n'est pas liée. Dans tous les cas où un argument script est fourni, bindretourne une chaîne vide.
Si séquence est spécifiée sans script, alors le script couramment lié à séquence est renvoyé, ou une chaîne vide est renvoyée s'il n'y a pas de liaison pour séquence. Si ni séquence ni script ne sont spécifiés, alors la valeur de retour est une liste dont les éléments sont toutes les séquences pour lesquelles il existe des liaisons pour tag.
L'argument tag détermine à quelle fenêtre(s) la liaison s'applique. Si tag commence avec un point, comme dans .a.b.c, alors ce doit être le nom de chemin d'une fenêtre; autrement ce peut être une chaîne arbitraire. Chaque fenêtre a une liste de tags associés, et une liaison est appliquée à une fenêtre particulière si son tag est parmi ceux spécifiés pour la fenêtre. Bien que la commande bindtags puisse être employée pour assigner un ensemble arbitraire de tags de liaison à une fenêtre, le tag de liaison par défaut fournit les comportement suivants:
Si un tag est le nom d'une fenêtre interne la liaison s'applique à cette fenêtre.
Si le tag est le nom d'une de premier plan la liaison s'applique à la fenêtre de premier plan et à toutes ses fenêtres internes.
Si le tag est le nom d'un classe de widgets, tel que button, la liaison s'applique à tous les widgets dans cette classe;
Si tag a la valeur all, la liaison s'applique à toutes les fenêtres dans l'application.
MODELES D'EVENEMENTS
L'argument séquence spécifie une séquence d'un ou plusieurs modèles d'évènement, avec un espace optionnel entre les modèles. Chaque modèle d'évènement peut prendre une parmi trois formes. Dans le cas le plus simple c'est un simple caractère ASCII imprimable, tel que a ou [. Le caractère ne peut pas être un espace ou le caractère <. Cette forme de modèle correspond a un évènement KeyPress pour le caractère. La seconde forme de modèle est plus longue mais plus générale. Elle a la syntaxe suivante:
'''<'''''modificateur-modificateur-type-detail'''''>'''
Le modèle d'évènement entier est entouré par des signes inférieur à/supérieur à. Entre les signes on trouve zéro ou plusieurs modificateurs, un type d'évènement, et une information additionelle type, detail) iidentifiant une touche ou un bouton particulier. N'importe quel des champs peut être omis, tant qu'au moins un des type et detail est présent. Les champs doivent être séparés par des espaces ou des tirets.
La troisième forme est utilisée pour spécifier un modèle défini par l'utilisateur, nommé évènement virtuel. Elle a la syntaxe suivante:
'''<<'''''NOM'''''>>'''
Le modèle d'évènement virtuel est entouré par des double signes inférieur à/supérieur à. Entre les signes on trouve le nom de l'évènement virtuel. Les modificateurs, tel que Shift ou Control, , ne peuvent pas être combinés avec un évènement virtuel pour le modificateur. Les liaisons sur un évènement virtuel peuvent être créés avant que l'évènement virtuel soit défini, et si la définition d'un évènement virtuel change dynamiquement, toutes les fenêtres attachées à cet évènement virtuel répondront immédiatement à la nouvelle définition.
MODIFICATEURS
Les modificateurs consistent en n'importe quelle des valeurs suivantes:
'''Control''' '''Mod2, M2''' '''Shift''' '''Mod3, M3''' '''Lock''' '''Mod4, M4''' '''Button1, B1''' '''Mod5, M5''' '''Button2, B2''' '''Meta, M''' '''Button3, B3''' '''Alt''' '''Button4, B4''' '''Double''' '''Button5, B5''' '''Triple''' '''Mod1, M1''' '''Quadruple'''
Si plusieurs valeurs sont listées, séparées par des virgules, les valeurs sont équivalentes. La plupart des modificateurs ont une signification évidente. Par exemple, Button1 exige un appui sur le bouton quand l'évènement se produit. Pour qu'une liaison corresponde à un évènement donné, les modificateurs dans l'évènement doivent inclure tous ceux spécifiés dans le modèle de l'évènement. Un évènement peut aussi contenir des modificateurs supplémentaires non spécifiés dans la liaison. Par exemple, si le bouton 1 est pressé alors que les touches shift et contrôle sont enfoncées, le modèle <Control-Button-1> correspondra à l'évènement, mais <Mod1-Button-1> > non. Si aucuns modificateurs ne sont spécifiés, alors n'importe quelle combinaison de modificateurs peut être présente dans l'évènement.
Meta et M se referent à chacun des modificateurs M1 à M5 associés à la meta touche(s) sur le clavier (touches Meta_R et Meta_L). Si il n'y a pas de meta touches, ou si elles ne sont pas associées à un modificateur, alors Meta et M ne correspondront à aucun évènements. De même, le modificateur Alt se refère à tout modificateur associé à la touche alt sur le clavier (touches Alt_L et Alt_R).
Les modificateurs Double, Triple et Quadruple servent à specifier les double clics et autres évènements répétés. Ils provoquent la répétition d'un modèle d'évènement particulier 2 ou 3 fois, et pose également une condition de temps et d'espace sur la séquence: pour qu'une séquence d'évènements corresponde à un modèle Double, Triple ou Quadruple, tous les évènements doivent se produire dans une durée très courte et sans déplacement de la souris. Par exemple, <Double-Button-1> est équivalent à <Button-1><Button-1> avec la condition supplémentaire de temps et d'espace.
TYPES D'EVENEMENTS
Le champ typepeut être n'importe quel des types standard d'évènement X, avec quelques abréviations. Le champ type admet également plusieurs types d'évènement X qui ont été ajoutés pour mieux supporter les plateformes Macintosh et Windows. Voir ci-dessous une liste de tous les types valides; quand deux noms apparaissent ensemble, ils sont synonymes.
'''Activate Enter Map ButtonPress, Button Expose Motion ButtonRelease FocusIn MouseWheel Circulate FocusOut Property Colormap Gravity Reparent Configure KeyPress, Key Unmap Deactivate KeyRelease Visibility Destroy Leave'''
La plupart des évènements ci-dessus ont les même champs et comportements que les évènements du système X Window. Vous pouvez trouver des descriptions plus détaillées de ces évènements dans n'importe quel livre de programmation X. Plusieurs de ces évènements sont des extensions au système d'évènements X pour supporter des fonctionnalités particulières au plateformes Macintosh et Windows. Nous vous donnons ici un peu plus de détais sur ces évènements. Ils incluent:
Activate
Deactivate Ces deux évènements sont envoyés à chaque sous-fenêtres d'une toplevel quand elles changent d'état. En plus de la fenêtre qui détient le focus, les plateformes Macintosh et Windows ont une notion de fenêtre active (qui souvent mais pas toujours détient le focus). Sur Macintosh, les widgets dans la fenêtre active ont un aspect différent des widgets dans une fenêtre inactive. L'évènement Activate est envoyé à toutes les sous-fenêtres d'une toplevel quand elle devient active. De même, l'évènement Deactive est envoyé quand l'état de la fenêtre passe d'actif à inactif. Vous ne pouvez pas utiliser les substitutions pourcentage quand vous liez à ces évènements.
MouseWheel Certaines souris sous Windows ont une roulette utilisée pour faire défiler les documents sans utiliser les barres de défilement. Quand la roulette tourne, le système génère des évènements MouseWheel que l'application peut utiliser pour scroller. Comme les évènements Key l'évènement est toujours dirigé vers la fenêtre qui détient le focus. Quand l'évènement est reçu vous pouvez utiliser la substitution %D pour obtenir le champ delta de l'évènement qui est la valeur entière du déplacement de la souris. La plus petite valeur que le système rapporte est définie par l'OS. Sur les machines Windows 95 & 98 cette valeur est au moins de 120 avant d'être signalée. Néanmoins, des périphériques avec des résolution supérieures pourraient apparaitre dans le futur. Le signe de la valeur determine la direction du défilement du widget. Les valeurs positives défileront vers le haut, les négatives vers le bas.
La dernière partie de cette longue spécification est detail. Dans le cas d'un évènement ButtonPress ou ButtonRelease , c'est le numéro du bouton(1-5). Si un numéro de bouton est donné, alors seulement un évènement de ce bouton sera affecté; Si aucun numéro de bouton n'est indiqué, alors un évènement sur n'importe quel bouton correspondra. Note: indiquer un numéro de bouton spécifique est différent d'indiquer un modificateur de bouton; dans le premier cas, il se réfère à l'appui ou au relachement d'un bouton, dans le second il se réfère à un autre bouton qui est déja appuyé quand l'évènement correspondant se produit. Si un numéro de bouton est donné alors type peut être omis: il sera par défaut ButtonPress. Par exemple, le spécificateur <1> est équivalent à <ButtonPress-1>.
Si le type d'évènement est KeyPress ou KeyRelease, alors detail peut être spécifié sous la forme d'une keysym X. Les keysyms sont des spécifications textuelles de touches du clavier; elles incluent tous les caractères alphanumériques ASCII (ex. ``a est la keysym du caractère ASCII ``a), plus des descriptions des caractères non-alphanumériques (``comma est la keysym de la virgule ), et des descriptions des touches non-ASCII (``Shift_L est la keysm de la touche shift gauche, et ``F1'' est la keysym de la touche de fonction F1 , si elle existe). La liste complète of keysyms n'est pas exposée ici; elle est disponible dans la documentation X et peut varier d'un système à un autre. Si nécessaire, vous pouvez utiliser la notation %K décrite ci-dessous pour afficher le nom de la keysym d'une touche particulière. Si un detail de keysym est donné, alors le champ type peut être omis; il sera par défaut de KeyPress. Par exemple, <Control-comma> est équivalent à <Control-KeyPress-comma>.
SCRIPTS DE LIAISON ET SUBSTITUTIONS
L'argument script de bind est un script Tcl, qui sera exécuté chaque fois que l'évènement désigné se produit. Command sera exécutée dans le même interpréteur que celui dans lequel la commande bind a été exécutée, et s'exécutera au niveau global (seules les variables globales seront accessibles). Si script contient des caractères% , alors le script ne sera pas exécuté directement. A la place, un nouveau script sera généré en remplacant chaque %, et le caractère suivant, par l'information de l'évènement courant. Le remplacement depend du caractère suivant la %, comme défini dans la liste ci-dessous. A moins qu'autrement indiqué, la chaîne de remplacement est la valeur décimale du champ donné de l'évènement courant. Certaines des substitutions sont seulement valides pour certain types d'évènements; si elles sont utilisées pour d'autres types d'évènements la valeur substituée est indéfinie.
%% Remplacée par un seul signe pourcentage.
%# Le numéro de la dernière requête client traitée par le serveur (le champ serial de l'évènement). Valide pour tout types d'évènements.
%a Le champ above de l'évènement, formaté en nombre hexadécimal. Valide seulement pour les évènementsConfigure .
%b Le numéro du bouton pressé ou relaché. Valide seulement pour les évènementsButtonPress et ButtonRelease .
%c Le champ count de l'évènement. Valide seulement pour les évènements Expose .
%d Le champ detail de l'évènement. Le %d est remplacé par une chaîne identifiant le détail. Pour les évènementsEnter, Leave, FocusIn, et FocusOut , la chaîne sera une des suivantes:
'''NotifyAncestor NotifyNonlinearVirtual NotifyDetailNone NotifyPointer NotifyInferior NotifyPointerRoot NotifyNonlinear NotifyVirtual'''
Pour les évènements autre que ceux-ci, la chaîne substituée est indéfinie.
%f Le champ focus de l'évènement (0 ou 1). Valide seulement pour les évènementsEnter et Leave .
%h Le champ height de l'évènement. Valide pour les évènementsConfigure et Expose .
%k Le champ keycode de l'évènement. Valide seulement pour les évènementsKeyPress et KeyRelease .
%m Le champ mode de l'évènement. La chaîne substituée est une de NotifyNormal, NotifyGrab, NotifyUngrab, ou NotifyWhileGrabbed. Valide seulement pour les évènementsEnter, FocusIn, FocusOut, et Leave .
%o Le champ override_redirect de l'évènement. Valide seulement pour les évènements Map, Reparent, et Configure .
%p Le champ place de l'évènement, substituée comme une des chaînes PlaceOnTop ou PlaceOnBottom. Valide seulement pour les évènementsCirculate .
%s Le champ state de l'évènement. Pour les évènementsButtonPress, ButtonRelease, Enter, KeyPress, KeyRelease, Leave, et Motion , une chaîne décimale est substituée. Pour Visibility, une des chaînes VisibilityUnobscured, VisibilityPartiallyObscured, et VisibilityFullyObscured est substituée.
%t Le champ time de l'évènement. Valide seulement pour les évènements qui contiennent un champtime .
%w Le champ width de l'évènement. Valide seulement pour les évènements Configure et Expose .
%x Le champ x de l'évènement. Valide seulement pour les évènements contenant un champx .
%y Le champ y de l'évènement. Valide seulement pour les évènements contenant un champy .
%A Substitue le caractère ASCII correspondant à l'évènement, ou la chaîne vide si l'évènement ne correspond pas à un caractère ASCII (ex. la touche shift a été appuyée). XLookupString accomplit tout le travail de traduction de l'évènement en caractère ASCII . Valide seulement pour les évènementsKeyPress et KeyRelease .
%B Le champ border_width from l'évènement. Valide seulement pour les évènements Configure .
%D Ceci renvoie la valeur delta d'un évènementMouseWheel. La valeur delta represente les unités de rotation dont la souris à roulette a été déplacée. Sur Windows 95 & 98 la plus petite valeur de delta est 120. Des systèmes futurs pourront supporter des résolution plus èlevées pour delta. Le signe de la valeur represente la direction dans laquelle la roulette a tourné.
%E Le champ send_event de l'évènement. Valide pour tous types d'évènement.
%K La keysym correspondant à l'évènement, substituée en chaîne textuelle. Valide seulement pour les évènements KeyPress et KeyRelease .
%N La keysym correspondant à l'évènement, substituée en nombre décimal. Valide seulement pour les évènementsKeyPress et KeyRelease .
%R L'identificateur de fenêtre root de l'évènement. Valide seulement pour évènements contenant un champroot .
%S L'identificateur de fenêtre subwindow de l'évènement, formaté comme nombre hexadécimal. Valide seulement pour évènements contenant un champ subwindow .
%T Le champ type de l'évènement. Valide pour tout types d'évènement.
%W Le nom de chemin de fenêtre auquel l'évènement se rapporte (le champ fenêtre de l'évènement). Valide pour tout types d'évènement.
%X Le champ x_root de l'évènement. Si un gestionnaire de fenêtres virtuel-root est utilisé alors la valeur substituée est la coordonnée x correspondante dans la virtuel root. Valide seulement pour les évènements ButtonPress, ButtonRelease, KeyPress, KeyRelease, et Motion .
%Y le champ y_root de l'évènement. Si un gestionnaire de fenêtres virtuel-root est utilisé alors la valeur substituée est la coordonnée y correspondante dans la virtuel root. Valide seulement pour les évènements 'ButtonPressJL