=head1 NOM Tk::bind - Invoquer des callbacks à partir d'événements X =head1 SYNOPSIS Récupérer des liaisons : I<$widget>-EB I<$widget>-EB(I) I<$widget>-EB(I) I<$widget>-EB(I,I) Créer et détruire des liaisons : I<$widget>-EB(I,I) I<$widget>-EB(I,I,I) =head1 DESCRIPTION La méthode B associe les callbacks avec les événements X. Si I est spécifié, B fera en sorte que I sera évalué chaque fois que le ou les événements décrits par I se produiront dans la (ou les) fenêtre(s) identifiée(s) par I<$widget> ou I. Si I est une chaîne vide alors la liaison courante pour I est détruite, laissant I sans lien. Dans tous les cas où un argument I est fourni, B renvoie une chaîne vide. Si I est spécifiée sans I, alors le callback lié actuellement à I est renvoyé, ou bien B s'il n'y a pas de liaison pour I. Si I et I ne sont pas spécifiées, alors la valeur de retour est une liste dont les éléments sont toutes les séquences pour lesquelles il existe des liaisons pour I. Si aucun I n'est spécifié alors B se réfère à I<$widget>. Si I est spécifié il s'agit typiquement d'un nom de classe et B se réfère à toutes les instances de classe associées à I<$widget> sur B. (I peut être un autre "objet widget" mais cette pratique est désapprouvée). La méthode de Perl B(I<$object>) est là pour retrouver le nom de classe de n'importe quel objet. Chaque fenêtre a une liste de tags associée, et une liaison s'applique à une fenêtre particulière si ses tag font partie de ceux spécifiés pour la fenêtre. Bien que la méthode B puisse être utilisée pour assigner un ensemble arbitraire de tags de liaison à une fenêtre, les tags de liaison par défaut fournissent le comportement suivant : 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 fenêtre toplevel la liaison s'applique à la fenêtre toplevel et à toutes ses fenêtres internes ; Si le tag est le nom d'une classe de widgets, comme B, la liaison s'applique à tous les widgets de cette classe ; Si I a la valeur B, la liaison s'applique à toutes les fenêtres descendantes de la MainWindow de l'application. =head1 MOTIFS D'ÉVÉNEMENTS L'argument I spécifie une séquence de un ou plusieurs motifs d'événement, avec des caractères 'espace' optionnels entre les motifs. Chaque motif d'événement peut prendre trois formes. Le cas le plus simple est un simple caractère ASCII, tel que B ou B<[>. Ce caractère ne peut pas être l'espace ni le caractère B>. Cette forme de motif relie un événement B à ce caractère particulier. La deuxième forme est plus longue mais plus générale. Elle a la syntaxe suivante : '' Le motif d'événement est encadré par '<' et '>', et doit normalement être entre quotes, car '<' et '>' sont des caractères spéciaux de perl. Entre '<' et '>' on trouve zéro modificateurs ou davantage, un type d'événement, et une information supplémentaire (I) qui identifie un bouton particulier ou un code symbolique de touche. N'importe quel champ peut être omis, pouvu qu'au moins I ou I soit présent. Les champs doivent être séparés par des espaces ou des tirets. La troisième forme de motif est utilisée pour spécifier un événement virtuel nommé défini par l'utilisateur ; voir Tk::event pour les détails. Il a la syntaxe suivante : <> Le motif d'événement virtuel est écrit entre 'EE' et 'EE'. Entre 'EE' et 'EE' se trouve le nom (défini par l'utilisateur) de l'événement virtuel. Les modificateurs, tels que B ou B, ne doivent pas être combinés avec un événement virtuel pour le modifier. Les liaisons sur un événement virtuel doivent être créées avant que l'événement virtuel soit défini, et si la définition de l'événement virtuel change dynamiquement, toutes les fenêtres liées à cet événement virtuel répondent immédiatement à la nouvelle définition. =head1 MODIFICATEURS Les modificateurs sont énumérés ci-après : 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 Lorsque plusieurs valeurs sont listées, séparées par une virgule, les valeurs sont équivalentes. La plupart des modificateurs ont une signification X évidente. Par exemple, B demande à ce que le bouton 1 soit enfoncé pour que l'événement se produise. Pour qu'une liaison corresponde à un événement donné, les modificateurs de l'événement doivent inclure tous ceux spécifiés dans le motif d'événement. Un événement peut contenir des modificateurs additionnels non spécifiés dans la liaison. Par exemple, si le bouton 1 est pressé alors que les touches shift et control sont enfoncées, le motif BControl-Button-1E> correspondra à l'événement, mais BMod1-Button-1E> ne correspondra pas. Si aucun modificateur n'est spécifié, alors n'importe quelle combinaison de modificateurs peut être présente dans l'événement. B et B se réfèrent à n'importe quel modificateur depuis B jusqu'à B, associé à une (ou plusieurs) touche(s) meta du clavier (codes symboliques de touche B et B). S'il n'y a pas de touche meta, ou si elles ne sont pas associées à un modificateur, B et B ne correspondront à aucun événement. De manière similaire, le modificateur B se réfère à tout modificateur associé à la touche alt du clavier (codes symboliques de touche B and B). Les modificateurs B, B et B sont une commodité pour spécifier les double click souris ainsi que d'autre événements répétés. Ils font en sorte qu'un motif d'événement doit être répété 2,3 ou 4 fois, et imposent aussi une contrainte de temps et d'espace dans le séquence : pour qu'une séquence d'événements correspondent à un motif B, B ou B, tous les événements doivent être proches dans le temps et sans déplacement excessif de la souris entre eux. Par exemple, BDouble-Button-1E> est équivalent à BButton-1EEButton-1E> avec une contrainte supplémentaire de temps et d'espace. =head1 TYPES D'ÉVÉNEMENT Le champ I peut être l'un quelconque des types d'événement X standard, avec quelques abréviations supplémentaires. Ci-dessous une liste de tous le types valides ; lorsque deux noms apparaissent ensemble, séparés par une virgule, ils sont synonymes. Activate Destroy Map ButtonPress, Button Enter MapRequest ButtonRelease Expose Motion Circulate FocusIn MouseWheel CirculateRequest FocusOut Property Colormap Gravity Reparent Configure KeyPress, Key ResizeRequest ConfigureRequest KeyRelease Unmap Create Leave Visibility Deactivate La plupart de ces événements ont les mêmes champs et signification que les événements du système de fenêtre X. Vous trouverez une description plus détaillée de ces événements dans tous les livres de programmation X Window. Deux de ces événements représentent une extension du système d'événement X afin de répondre aux fonctionnalités des plate-formes Macintosh et Windows. Voici quelques détails supplémentaires sur ces événements. Il s'agit de : Activate Deactivate Ces deux événements sont envoyés à toutes les fenêtres filles d'une toplevel lorsque leur état change. Outre la notion de "de fenêtre ayant le focus", les plate-formes Macintosh et Windows ont la notion de "fenêtre active" (qui a, le plus souvent, le focus, mais ce n'est pas requis). Sur le Macintosh, les widgets de la fenêtre active ont une apparence différente des widgets des fenêtres désactivées. L'événement Activate est envoyé à toute fenêtre fille d'un toplevel lorsque son état passe d'inactif à actif. De la même manière, l'événement Deactivate est envoyé lorsque la fenêtre passe de l'état activée à l'état désactivée. [There are no use- ful percent substitutions you would make when binding to these events.] MouseWheel Les souris des plate-formes Windows comportent souvent une roulette utilisée pour faire défiler les documents sans utiliser les barres de défilement. Lorsqu'on utilise cette roulette, le système génère des événements MouseWheel que l'application peut utiliser pour faire défiler les documents. Tout comme les événements clavier, cet événement est toujours redirigé vers la fenêtre qui a actuellement le focus. Lorsque vous recevez l'événement vous pouvez utiliser la substitution B<%D> pour obtenir le champ déplacement (delta) de l'événement qui est une valeur entière de la distance dont la roulette de la souris s'est déplacée. La plus petite valeur que le système puisse rapporter est définie par l'OS. Sur les machines Windows 95 & 98 cette valeur doit être au moins de 120 avant qu'elle soit rapportée. Toutefois, des périphériques de plus haute résolution seront sans doute disponibles dans le futur. Le signe de la valeur détermine la direction dans laquelle votre widget doit se déplacer. Les valeurs positives sont associées à des déplacements vers le haut et les valeurs négatives à des déplacements vers le bas. La dernière partie de la spécification d'un long événement est I. Dans le cas d'un événement B ou B, c'est le numéro du bouton (1-5). Si un numéro de bouton est fourni, seul un événement sur ce bouton particulier correspondra ; si aucun numéro de bouton n'est fourni, un événement correspondra sur n'importe quel bouton. Note : donner un numéro de bouton spécifique est différent de spécifier un modificateur de bouton ; dans le premier cas, on se réfère au bouton pressé ou relâché, dans le deuxième on se réfère à n'importe quel autre bouton qui est encore pressé lorsque survient l'événement en correspondance. Si un numéro de bouton est fourni I peut être omis : ce sera B par défaut. Par exemple, le spécificateur B1E> est équivalent à BButtonPress-1E>. Si le type d'événement est B ou B, alors I doit être spécifié dans la forme d'un code symbolique de touche X. Les codes symboliques de touche sont des spécifications textuelles de touches particulières du clavier ; elles comprennent tous les caractères alphanumériques ASCII (par exemple ``a'' est le code symbolique du caractère ASCII ``a''), plus des descriptions pour les caractères non-alphanumériques (``comma'' est le code symbolique du caractère ``virgule''), plus des descriptions pour toutes les touches non-ASCII du clavier (``Shift_L'' est le code symbolique de la touche shift gauche, et ``F1'' est le code symbolique de la touche de fonction F1, si elle existe). La liste complète des codes symboliques n'est pas présentée ici ; elle est disponible dans d'autres documentations X et peut varier d'un système à l'autre. Si nécessaire, vous pouvez utiliser la notation B<'K'> décrite ci-dessous pour imprimer le nom de code symbolique d'une touche particulière. Si I est fourni pour un code symbolique de touche, le champ I peut être omis ; sa valeur par défaut sera B. Par exemple, BControl-commaE> est équivalent à BControl-KeyPress-commaE>. =head1 LIAISON DES CALLBACKS ET SUBSTITUTIONS L'argument I de B est un callback perl/Tk qui sera exécuté chaque fois que la séquence donnée se présentera. (Voir Tk::callbacks pour une description des formes possibles). I sera associé à la même B associée au I<$widget> utilisé pour invoquer la méthode B, et sera exécuté comme si l'appel provenait de B. Si I contient n'importe quel appel B(I<%>), chaque "callback imbriqué" B(I<%>) sera évalué lors de l'occurrence de l'événement pour former les arguments à passer au I principal. Le remplacement dépend du caractère I<%>, comme défini dans la liste ci-dessous. Sauf indication contraire, la chaîne de remplacement est la valeur numérique (décimale) du champ considéré pour l'événement courant. Perl/Tk a mis un peu en valeur ce mécanisme, en comparaison du mécanisme semblable de Tcl/Tk. Les mises en valeur ne sont pas toutes reflétées dans la liste ci-dessous. Quelques substitutions sont valides uniquement pour certains types d'événement ; si on les utilise pour d'autres types d'événement la valeur substituée est indéfinie (ce qui n'est pas la même chose que B !). =over 4 =item B<'#'> Le numéro de la dernière requête client traitée par le serveur (le champ I de l'événement). Valide pour tous les types d'événement. =item B<'a'> Le champ I de l'événement, formaté comme un nombre hexadécimal. Valide uniquement pour les événements B. =item B<'b'> Le nombre de boutons pressés ou relâchés. Valide seulement pour les événements B et B. =item B<'c'> Le champ I de l'événement. Valide uniquement pour les événements B. =item B<'d'> Le champ I de l'événement. Le B<'d'> est remplacé par une chaîne identifiant le détail. Pour les événements B, B, B et B, la chaîne sera l'une de celles-ci : NotifyAncestor NotifyNonlinearVirtual NotifyDetailNone NotifyPointer NotifyInferior NotifyPointerRoot NotifyNonlinear NotifyVirtual Pour les événements B, la chaîne sera l'une parmi : Above Opposite Below None BottomIf TopIf Pour les événements autres que ceux-là, la chaîne substituée est indéfinie. (Notez que ceci I la même chose que la partie Detail de la séquence utilisée pour spécifier l'événement.) =item B<'f'> Le champ I de l'événement (B<0> ou B<1>). Valide seulement pour les événements B et B. =item B<'h'> Le champ I de l'événement. Valide seulement pour les événements B, B, B, B, et B. =item B<'k'> Le champ I de l'événement. Valide seulement pour les événements B et B. =item B<'m'> Le champ I de l'événement. La chaîne de substitution est une de celles-ci : B, B, B ou B. Valide uniquement pour les événements B, B, B et B. =item B<'o'> Le champ I de l'événement. Valide seulement pour les événements B, B et B. =item B<'p'> Le champ I de l'événement, substitué par une des chaînes B ou B. Valide seulement pour les événements B et B. =item B<'s'> Le champ I de l'événement. Pour les événements B, B, B, B, B, B et B, une chaîne décimale est substituée. Pour B, une des chaînes B, B ou B est substituée. =item B<'t'> Le champ I, un Keyrelease de la touche B, l'appui de la touche B et un appui de la touche B : presser sur B est ignoré parce qu'il s'agit d'une touche modificatrice. Finalement, si plusieurs événements B arrivent à la suite les uns de autres, seul le dernier sera considéré pour établir la correspondance des séquences de liaison. =head1 ERREURS Si une erreur se produit lorsqu'on exécute le calback d'une liaison le mécanisme B est utilisé pour rapporter l'erreur. Le mécanisme B sera exécuté au même niveau d'appel, et associé avec la même B qui a invoqué le callback. =head1 AVERTISSEMENTS Notez que pour le widget B, l'appel de B doit être pleinement qualifié. Ceci parce qu'il existe toujours une méthode de liaison pour le widget B, qui lie individuellement chaque tag du canevas. I<$canvas>-EB =head1 VOIR AUSSI Tk::Error Tk::callbacks Tk::bindtags =head1 MOTS-CLÉS Event, binding =head1 TRADUCTION Jean-Pierre Vidal jeanpierre.vidal@free.fr =head1 RELECTURE Aucune relecture pour le moment.