=head1 NOM Tk::mega - support perl/Tk pour écrire des widgets en Perl pur =head1 SYNOPSIS Définir le nom de la nouvelle classe de widget : BI; Pour les classes de widgets composites : B; # où B est une I ou une B Pour les classes de widgets dérivées : B; Installer le nouveau widget dans l'espace de noms de Tk et créer les constructeurs d'instance : B I<'MyNewWidget'>; B { my (I<$self>, $args) = @_; I<...> } B { my (I<$self>, $args) = @_; I<...> } =head1 DESCRIPTION Le but du support pour les mega widgets de perl/Tk est de faciliter l'écriture de mega widgets qui suivront le même protocole et auront la même interface que les widgets du coeur de Tk. Pour un exemple de code de mega-widget, vous devriez essayer le programme de démonstration I, et aussi lire la section Exemples de Mega-Widgets Perl. Il existe deux types de mega widgets : =over 4 =item Les widgets composites Un widget composite est constitué d'un ou plusieurs widgets existant(s). Un widget composite se comporte du point de vue de l'utilisateur comme un widget unique. La boîte de sélection de fichier en est un exemple bien connu. =item Les widgets dérivés Un widget dérivé ajoute/modifie/supprime des propriétés et des méthodes à un seul widget (ce widget pouvant être lui-même un mega widget). =back =head1 LE SUPPORT DES MEGA WIDGETS =over 4 =item B Donne au subwidget un nom symbolique. Utilisation : I<$cw>-EB(B=EI<$widget>); Donne au subwidget I<$widget> du widget composite I<$cw> le nom B. On peut retrouver la référence d'un subwidget 'nommé' (advertised) avec la méthode Subwidget. B réalisateurs de mega widgets, merci de documenter les widgets 'nommés' destinés à une utilisation I. S'il n'en existe pas, documentez ce fait, par exemple : =head1 ADVERTISED WIDGETS None. =item B Invoque un callback spécifié pour une option. Utilisation : I<$self>-EB(I<-option> ?,I ...?); B exécute le callback défini avec I<$mega>-EB(I<-option>, [B, ...]) ; si les I existent ils sont passés au callback. Si I<-option> n'est pas défini il ne se passe rien. =item B Initialisation de la classe du mega widget. Utilisation : B { my (I<$class, $mw>) = @_I<;> ... } B est appelé une fois pour I MainWindow juste avant que la première instance de la classe du widget soit créée dans l'arbre des widgets de B. B est souvent utilisé pour définir les liens (bindings) et/ou d'autres ressources partagées par toutes les instances, par exemple les images. Exemples : $mw->bind($class,"", sub { my $w = shift; $w->Insert("\t"); $w->focus; $w->break; }); $mw->bind($class,"", ['Insert',"\n"]); $mw->bind($class,"",'Delete'); Remarquez que I<$class> est le nom de classe (par exemple B) et I<$mw> est la fenêtre principale. N'oubliez pas d'appeler I<$class>-EB dans B. =item B Fonction pratique pour créer des subwidgets. Utilisation : $cw->Component('Whatever', 'AdvertisedName', -delegate => ['method1', 'method2', ...], ... options du widget Whatever ..., ); B effectue pour vous plusieurs choses dans un seul appel : =over 8 =item * Créer le widget =item * Le 'nommer' avec un nom donné (écrasé par l'option 'Name') =item * Déléguer un ensemble de méthodes à ce widget (optionnel) =back Exemple : $cw->Component('Button', 'quitButton', -command => sub{ $mw->'destroy' }); =item B Définir les options et leur traitement : Utilisation : $cw->ConfigSpecs( -option => [ where, dbname, dbclass, default], ..., DEFAULT => [where], ); Définit les options d'un mega widget ainsi que les actions qui sont déclenchées par un configure/cget sur une option (voir Tk::ConfigSpecs et Tk::Derived pour les détails). =item B Rend le nouveau mega widget connu de B. Utilisation : B I B<'Name'>; B déclare une nouvelle classe de widget, ainsi votre mega widget se comporte comme les widgets standard de Perl/Tk. Exemples : B I<'Whatever'>; B I<'MyItem'>; Le premier exemple permet l'utilisation de I<$widget>-EB pour créer un nouveau widget B. Le deuxième exemple restreint l'usage de la méthode de constructeur B à des widgets dérivées de B : I<$isamenu>->I. =item B Traite les options avant la création de tout widget B { my (I<$package>, $parent, $args) = @_; I<...>; I @newargs; } I<$package> est le package du mega widget (par exemple, B, I<$parent> le parent du widget à créer et $args la référence au hash des options spécifiées lors de l'appel du constructeur du widget. N'oubliez pas d'appeler I<$package>-EB(I<$parent>, I<$args>) dans B. =item B Redirige une méthode du mega widget vers un subwidget du widget composite. Utilisation : $cw->Delegates( 'method1' => $subwidget1, 'method2' => 'advertised_name', ..., 'Construct' => $subwidget2, 'DEFAULT' => $subwidget3, ); La délégation B<'Construct'> a une signification spéciale. Après que 'Construct' soit délégué tous les constructeurs de widget sont redirigés. Par exemple après I<$self>-EB(B<'Construct'>=>I<$subframe>); un I<$self>-EB