Tk::option - Utilisation de la base de données option dans Perl/Tk
$widget->widgetClass(Name=>name, -class=>class);
$widget->PathName;
$widget->optionAdd(pattern=>value ?,priority?);
$widget->optionClear;
$widget->optionGet(name, class);
$widget->optionReadfile(fileName ?,priority?);
La base de données option (connue également sous le nom de resource database ou de application defaults database) est un ensemble de règles destinées à appliquer aux widgets les options par défaut. Les utilisateurs et les administrateurs système peuvent se servir de ces règles pour personnaliser l'apparence des applications sans changer une ligne de code des applications ; par exemple, un utilisateur peut mettre en place des couleurs d'avant et d'arrière-plan personnalisées, ou bien un site peut utiliser des polices associées aux préférences visuelles ou de langage. D'autres gestionnaires de fenêtre (et leur implémentation) ont implémenté cette base de données de manière différente, mais la plupart des gestionnaires de fenêtre basés sur Xt utilisent le fichier .Xdefaults ou l'utilitaire xrdb pour gérer les préférences utilisateur ; certains utilisent les deux, et/ou implémentent un ensemble plus complexe de base de données pour le site, l'utilisateur et les applications. Consultez la documentation de votre site sur ces sujets, ou la propriété RESOURCE_MANAGER de votre gestionnaire de fenêtre.
Etre un bon citoyen
Pour la plupart des applications, la base de données d'option ``fonctionne, tout simplement''. Les méthodes option... sont faites pour les applications qui ont besoin de faire des choses inusitées, comme ajouter de nouvelles règles ou tester la valeur par défaut d'une option. Même dans de tels cas, l'application doit fournir de quoi gérer les préférences des utilisateurs. Ne codez pas d'options de widget ``en dur'' sauf si vous avez une excellente raison. Tous les utilisateurs ont leur propre goût et tous sont différents. Ils choisissent une police d'une taille spéciale et ont souvent dépensé beaucoup de temps pour trouver un ensemble de couleurs qu'ils vont aimer toute leur vie. Si vous respectez leurs choix ils aimeront encore davantage travailler avec vos applications. Ne détruisez jamais le 'look and feel' d'un bureau personnel.
Règles d'option et identification de widget
Tous les widgets d'une application sont identifiés hiérarchiquement par un nom de chemin, partant de MainWindow et passant par chaque widget utilisé pour arriver au point final. Les éléments du chemin sont les noms de widget, un peu comme les éléments d'un chemin de fichier partant du répertoire racine vers un fichier. Dans la base de données d'option, les règles sont des motifs qui sont comparés à un nom de chemin de widget pour déterminer le défaut à appliquer. Lors de la création d'un widget, l'option Name peut être utilisée pour assigner le nom du widget et ainsi créer un chemin distinct pour les widgets de l'application. Si l'option Name n'est pas donnée, Perl/Tk assigne un nom par défaut basé sur le type de widget ; le nom par défaut d'une MainWindow est le nom de l'application. Ces défauts sont corrects pour la plupart des widgets, aussi ne pensez pas que vous devez créer un nom rempli de sens pour chaque widget que vous créez. Un widget doit avoir un nom distinct afin de permettre à l'utilisateur d'adapter ses options indépendamment des autres widgets de l'application. Par exemple, pour créer un widget Text avec des options spéciales propres à lui, donnez-lui un nom tel que :
$text = $mw->Text(Name => 'importantText');
Vous pouvez alors adapter les attributs du widget avec une règle de la base de données d'option telle que :
*importantText*foreground: red
L'attribut de class identifie des groupes de widgets, habituellement à l'intérieur d'une application mais aussi pour grouper des widgets similaires entre différentes applications. Typiquement, on assigne une classe à un TopLevel ou une Frame, ainsi la classe s'appliquera à tous les enfants du widget. Pour étendre l'exemple, nous pouvons être encore plus spécifique à propos du widget importantText en donnant une classe à sa 'frame'
$frame = $mw->Frame(-class => 'Urgent'); $text = $frame->Text(Name => 'importantText');
Alors le motif de ressource peut être spécifié ainsi :
*Urgent*importantText*foreground: red
De la même manière, le motif *Urgent*background: cyan
s'appliquera à tous
les widgets de la 'frame'.
Si plusieurs entrées de la base de données d'option correspondent au nom de chemin du $widget, name, et class, alors la méthode renvoie celui qui a été créé avec le plus haut niveau de priorité. S'il existe plusieurs entrées correspondantes au même niveau de priorité, alors il renvoie l'entrée la plus récente de la base de données d'option. S'il n'y a pas d'entrée en correspondance, alors une chaîne vide est renvoyée.
L'argument priority des méthodes option... est normalement spécifié symboliquement en utilisant une des valeurs suivantes :
Tous les mots-clés ci-dessus peuvent être abrégés. De plus, les priorités peuvent être spécifiées numériquement en utilisant les entiers de 0 à 100, inclusivement. La forme numérique est probablement une mauvaise idée excepté pour une nouvelle priorité autre que celles énumérées ci-dessus.
Le schéma de priorité utilisé par Tk n'est pas identique à celui utilisé par les routines Xlib habituelles. En particulier il suppose que l'ordre des entrées est défini, mais des commandes utilisateur comme xrdb -merge peuvent changer l'ordre.
Tk::Xrm
database, option, priority, retrieve
Jean-Pierre Vidal jeanpierre.vidal@free.fr
Aucune relecture pour le moment.