Bonjour Paul (et les autres) et merci pour ta réponse.
D'ailleurs, depuis quelques temps, les accents de tes messages sont
tronqués et ne s'affichent pas sur mon navigateur :-), problème
d'encodage !!!
Pour revenir au module. Je suis d'accord avec toi sur le fait que le
"look and feel" des interfaces graphiques dépend du système
d'exploitation qui l'exécute. Un programme Perl/Tk aura un rendu
différent sous Win2000, XP, Vista, Mac ou sous Linux. L'aspect de la
fenêtre change. Je ne compte pas changer cela n'ayant de toute façon
pas la possibilité.
Mais une chose possible est de permettre un gain de temps considérable
dans la configuration de l'habillage des programmes via ce système de
thèmes. Nous somme bien d'accord, le plus important
dans l'application est son utilité et absolument pas son aspect visuel
ou graphique qui importe très peu.
J'ai déjà avancé dans le module, si ce n'est fini (d'un point de vu
fonctionnel) car j'utilisais déjà ce principe pour mes développements
et je voulais avoir vos avis.
Le module pour l'instant se nomme Tk::Dressing (pour le nom, j'avoue
ne pas avoir encore réfléchi, je verrais plus tard). Il contient 4
méthodes :
- load_theme_file : qui permet de charger un fichier ini (un thème)
contenant la configuration souhaitée.
- get_theme_file : qui permet de créer un fichier ini à partir d'un
thème défini dans le script ou interne au module.
- get_all_theme : qui permet de lister les thèmes connus par le
module.
- design_widget : qui permet d'appliquer le thème au widget voulu et
ses enfants.
Le module s'utilise de la sorte :
use Tk::Dressing;
my $TkDressing = new Tk::Dressing;
...
et à la fin de son code TK (où l'on veut), du moins, une fois les
éléments placés sur son widget et/ou affichés, on appelle la méthode
design_widget.
$TkDressing->design_widget(
-widget => $MonWidget,
-theme => 'MongueurTheme',
);
Le thème est de ce fait appliqué au widget. Y a rien d'autre à faire,
c'est simple et rapide. J'ai néanmoins quelques questions car mon but
était :
1) de proposer plusieurs thèmes dans le module histoire que
l'utilisateur du module puisse faire son choix sans avoir à tout
refaire et rien ne lui empêche de le modifier pour l'adapter à ses
besoins via le .ini
2) de donner la possibilité à l'utilisateur de charger son thème
3) de trouver un moyen pour rajouter des thèmes au module au fil des
mises à jour du module sur le CPAN (grâce à la participation des
personnes l'utilisant peut être via le RT du CPAN). Pour l'instant,
les thèmes
par défaut sont en dur dans le .pm.
Pour le 1), c'est ok, j'ai 4 thèmes par défaut, mais il m'en faudrait
plus.
Pour le 2), c'est ok et fonctionnel.
Pour le 3), je ne sais pas comment faire pour qu'au moment où je
package mon module pour le CPAN, qu'il y ait un répertoire où je
pourrais stocker tous ces thèmes.ini car tout mettre dans le .pm,
c'est un peu lourd, non optimum et moche.
J'ai pour habitude dans mes modules CPAN de faire un répertoire demo
dans lequel je mets des programmes d'exemple, mais ces derniers ne
sont accessibles que via le MANIFEST sur le site du CPAN, ou (sur
Linux) dans le répertoire /root/.cpan/build/MONMODULE-xcxf/demo/
prog.pl. Sous Windows (installation via ppm), il est carrément
inexistant. Donc si je décide de faire des .ini pour mes thèmes par
défaut, comment m'y prendre pour y accéder ? Comment font les modules
ayant des fichiers supplémentaires à utiliser pour le fonctionnement
de leur module ?
Voilà, merci d'avance pour vos réponses et remarques. En ce qui
concerne le thème, voici un exemple, on y retrouve essentiellement les
options en rapport avec les couleurs, mais on pourrait envisager d'en
mettre plus.
TOTO.ini
[Balloon]
-background: #FFFFCC
-foreground: black
[BrowseEntry]
-background: #FFFFCC
-foreground: black
-disabledbackground: #FFFFCC
-disabledforeground: red
[Button]
-activebackground: #E3E3E3
-background: #E3E3E3
-foreground: black
-activeforeground: black
[Canvas]
-background: #FFFFCC
[Checkbutton]
-highlightbackground: #FFFF99
-activebackground: #FFFF99
-background: #FFFF99
-foreground: black
-disabledforeground: black
-activeforeground: black
-selectcolor: #FFFFCC
[ColoredButton]
-highlightbackground: #FFFF99
-background: #FFFF99
-autofit: 1
[DirTree]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFF99
[Entry]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-readonlybackground: #FFFFCC
-insertbackground: black
[EntryCheck]
-background: #FFFFCC
-disabledbackground: #FFFFCC
-insertbackground: black
[Frame]
-highlightbackground: #FFFF99
-background: #FFFF99
[HList]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFFCC
[LabEntry]
-background: #FFFF99
-disabledbackground: #FFFFCC
[LabFrame]
-background: #FFFF99
[Label]
-highlightbackground: #FFFF99
-background: #FFFF99
-foreground: black
[Labelframe]
-background: #FFFF99
[Listbox]
-background: #FFFFCC
-foreground: black
[MainWindow]
-highlightbackground: #FFFF99
-background: #FFFF99
-highlightcolor: #FFFF99
[Menu]
-activebackground: #FFFFCC
-background: #FFFFCC
-foreground: black
-selectcolor: #FFFFCC
-activeforeground: black
[Menubutton]
-activebackground: #E3E3E3
-background: #E3E3E3
-foreground: black
-activeforeground: black
[NoteBook]
-focuscolor: #FFFF99
-backpagecolor: #FFFF99
-background: #FFFF99
-foreground: black
-inactivebackground: #FFFFCC
[Optionmenu]
-activebackground: #E3E3E3
-borderwidth: 0
-background: #E3E3E3
-foreground: black
-activeforeground: black
[ProgressBarPlus]
-colors: 0
-colors: #7FA0C0
[ROText]
-background: #FFFFCC
-foreground: black
-insertbackground: black
[Radiobutton]
-highlightbackground: #FFFF99
-activebackground: #FFFF99
-background: #FFFF99
-foreground: black
-disabledforeground: black
-activeforeground: black
-selectcolor: #FFFFCC
[Scale]
-highlightbackground: #FFFF99
-activebackground: #FFFFCC
-background: #FFFF99
-troughcolor: #969696
-foreground: black
[Spinbox]
-background: #FFFFCC
-foreground: black
-readonlybackground: #FFFFCC
-buttonbackground: #E3E3E3
[Text]
-background: #FFFFCC
-foreground: black
-insertbackground: black
[Toplevel]
-highlightbackground: #FFFF99
-background: #FFFF99
-highlightcolor: #FFFF99
[Tree]
-highlightbackground: #FFFF99
-background: #FFFFCC
-foreground: black
-highlightcolor: #FFFF99
-selectforeground: black
-selectbackground: #FFFF99
Djibril