=head1 NOM Tk::bindtags - Déterminer les liaisons appliquées à une fenêtre, ainsi que leur ordre d'évaluation =head1 SYNOPSIS I<$widget>-EB([I]); I<@tags> = I<$widget>-EB; =head1 DESCRIPTION Lorsqu'on crée une liaison avec la commande B, elle est associée soit à une fenêtre particulière telle que I<$widget>, un nom de classe tel que B, le mot-clé B, ou n'importe quelle autre chaîne. Toutes ces formes sont appelées des I (I). Chaque fenêtre a une liste de tags de liaison qui détermine comment seront traités les événements pour cette fenêtre. Lorsqu'un événement se produit dans une fenêtre, il est appliqué à chaque tag de la fenêtre dans l'ordre : pour chaque tag, la liaison la plus spécifique correspondant au tag et à l'événement donnés est exécuté. Voir la documentation de Tk::bind pour des informations supplémentaires sur le processus de correspondance. Par défaut, chaque fenêtre possède quatre tags de liaison qui sont le nom de classe de la fenêtre, le nom de la fenêtre, le nom de la plus proche fenêtre toplevel ancêtre et B, dans cet ordre. Les fenêtres toplevel ont seulement trois tags par défaut, puisque le nom du toplevel est le même que celui de la fenêtre. Notez que cet ordre est I de l'ordre utilisé par Tcl/Tk. Dans l'ordre des liaisons de Tcl/Tk, la fenêtre précède le nom de classe. Ceci parce que Tcl est procédural et non orienté objet et la manière normale d'écraser les liaisons de classe dans les applications Tcl/Tk est d'utiliser une liaison d'instance. Toutefois, dans perl/Tk la manière normale est de dériver une classe. L'ordre perl/Tk oblige les liaisons d'instance à s'exécuter après les liaisons de classe, et ainsi les callbacks de liaison d'instance peuvent utiliser les changements d'état (par exemple un changement de sélection) qu'une liaison de classe aurait pu réaliser. La commande B permet de lire et de modifier les tags de liaison d'une fenêtre. Si on invoque I<$widget>->B sans arguments, l'ensemble actuel de tags de liaison de $widget est renvoyé sous forme de liste. Si l'argument I est spécifié pour B, il doit être une référence à un tableau ; les tags de $widget sont remplacés par les éléments du tableau. (on peut créer une référence un tableau anonyme en mettant les éléments entre crochets B<[ ]>). Les éléments de I peuvent être arbitrairement des chaînes ou des objets widgets, et s'il n'existe pas de fenêtre pour un objet au moment du traitement d'un événement, le tag est ignoré pour cet événement. L'ordre des éléments dans I détermine l'ordre dans lequel les callbacks de liaison sont exécutés en réponse aux événements. Par exemple, la commande : $b->bindtags([$b,ref($b),$b->toplevel,'all']) applique l'ordre de liaison Tcl/Tk pour lequel les callbacks de liaison seront évaluées pour (par exemple) un bouton B<$b> et donc les liaisons d'instance de B<$b> seront invoquées en premier, suivies par les liaisons de classe de B<$b>, suivies par les liaisons pour le toplevel de B<$b>, suivies par les liaisons 'B'. Si I est une liste vide c'est à dire B<[]>, les tags de liaison pour $widget sont renvoyés à l'état par défaut de perl/Tk décrit plus haut. La commande B peut être utilisée pour introduire des tags de liaison additionnels arbitraires pour une fenêtre, ou pour supprimer les tags standard. Par exemple, la commande : $b->bindtags(['TrickyButton',$b->toplevel,'all']) remplace (par exemple) pour B<$b> le tag B par B. Cela signifie que les liaisons de widget par défaut des boutons, qui sont associés au tag B, ne s'appliqueront plus à B<$b>, mais que n'importe quelle liaison associée à B s'appliquera (peut être un nouveau comportement de bouton) =head1 BUGS La forme actuelle de cette méthode, due au comportement 'natif' de Tk, qui consiste à renvoyer une liste mais à accepter seulement une référence de tableau, est presque intuitive. L'interface perl/Tk pourrait être améliorée, mais le renvoi d'une liste étant sensible, on pourrait, de préférence, permettre de passer une liste pour I les liaisons. =head1 VOIR AUSSI Tk::bind Tk::callbacks =head1 MOTS-CLÉS binding, event, tag =head1 TRADUCTION Jean-Pierre Vidal jeanpierre.vidal@free.fr =head1 RELECTURE Aucune relecture pour le moment.