Chapitre 7
Les labels

Ce qui n’a pas changé !

Dans toute cette section, nous verrons les fonctions qui existaient déjà dans GtkPerl, puis dans la section suivante, nous découvrirons les apports de Pango.

Les labels sont très utilisés avec GTK et sont relativement simples. Les labels n’émettent aucun signal puisqu’ils ne sont pas associés à une fenêtre X. Si vous avez besoin d’attraper des signaux, placez les dans une boîte à évènement ou dans un bouton.

Pour créer un nouveau label , utilisez :

$label = Gtk2::Label->new ($string);  
$label = Gtk2::Label->new_with_mnemonic ($string);
Le seul argument est la chaîne que vous voulez afficher.

Pour changer le texte du label après sa création, utilisez la fonction :

$label->set_text($string);
Encore une fois, l’argument est la nouvelle chaîne.

L’espace utilisé pour la nouvelle chaîne sera ajusté automatiquement si nécessaire. Vous pouvez produire des labels multi-lignes en plaçant des caractères de fin de ligne dans la chaîne.

Pour retrouver la chaîne courante, utilisez ;

$label->get();
Le texte du label peut être justifié avec :
$label->set_justify( $jtype );
Les valeurs de $jtype sont :
'left'  
'right'  
'center' (default)  
'fill'
Le widget label est également capable de faire automatiquement les césures du texte en fin de ligne. Cela peut être activé par :
      $label->set_line_wrap( $wrap );
L’argument $wrap est une valeur vraie ou fausse.

Si vous voulez un label souligné, vous pouvez déclarer un patron pour le label :

$label->set_pattern( $pattern );
L’argument pattern indique comment souligner le texte. Cela consiste en une chaîne de caractère _ et d’espace. Le caractère _ indique les caractères du label à souligner. Par exemple , la chaîne "_ _ _ _ _ _" soulignera le premier, le troisième, le cinquième, le septième et le neuvième caractères. Notez toutefois, qu’il ne faut pas confondre ce caractère de soulignement avec celui créé par la fonction new_with_mnemonic.

Exemple

Voici un court exemple qui illustre ces fonctions. Il utilise le widget cadre pour mieux mettre en valeur les styles de labels. Vous pouvez l’ignorer pour le moment car le widget cadre sera expliqué plus tard.

labels

# !/usr/bin/perl -w

use Gtk2 ’-init’ ;

use constant TRUE => 1 ;
use constant FALSE => 0 ;

use strict ;

my $window = Gtk2::Window->new( ”toplevel” ) ;
$window->signal_connect( ”destroy” , sub { Gtk2->main_quit ; } ) ;
$window->set_title( ”Les labels” ) ;
$window->set_border_width( 5 ) ;

my $hbox = Gtk2::HBox->new( FALSE, 5 ) ;
$window->add( $hbox ) ;

my $vbox1 = Gtk2::VBox->new( FALSE, 5 ) ;
$hbox->pack_start( $vbox1, FALSE, FALSE, 0 ) ;

my $label1 = Gtk2::Label->new( ”Ceci est un label normal” ) ;
my $frame1 = Gtk2::Frame->new( ”Label normal” ) ;
$frame1->add( $label1 ) ;
$vbox1->pack_start( $frame1, FALSE, FALSE, 0 ) ;

my $label2 = Gtk2::Label->new( ”Ceci est un label multi-lignes.\n Seconde ligne\n”
. ”Troisième Line” ) ;
my $frame2 = Gtk2::Frame->new( ” Label multi-lignes ” ) ;
$frame2->add( $label2 ) ;
$vbox1->pack_start( $frame2, FALSE, FALSE, 0 ) ;

my $label3 = Gtk2::Label->new( ”Ceci est un label justifié à gauche. \n”
.”Multi-lignes\n”
.”Troisième ligne” ) ;
$label3->set_justify( ’left’ ) ;
my $frame3 = Gtk2::Frame->new( ”Label justifié à gauche” ) ;
$frame3->add( $label3 ) ;
$vbox1->pack_start( $frame3, FALSE, FALSE, 0 ) ;

my $label4 = Gtk2::Label->new( ”Ceci est un label justifié à droite.\n ”
. ”Multi-lignes.\n”
. ”Troisième ligne.” ) ;
$label4->set_justify( ’right’ ) ;
my $frame4 = Gtk2::Frame->new( ”Label justifié à droite” ) ;
$frame4->add( $label4 ) ;
$vbox1->pack_start( $frame4, FALSE, FALSE, 0 ) ;


my $vbox2 = Gtk2::VBox->new( FALSE, 5 ) ;
$hbox->pack_start( $vbox2, FALSE, FALSE, 0 ) ;
my $frame5 = Gtk2::Frame->new( ”Label avec l’option line_wrap” ) ;
my $label5 = Gtk2::Label->new( ”Ceci est un exemple de césure de ligne. ”
. ”Cela ne devrait pas prendre la largeur totale
. ”allouée mais fait passer les mots à la ligne ”
. ”automatiquement.
. Cela supporte correctement plusieurs ”
. ”paragraphes et ajoute également ”
. ”plusieurs espaces. ” ) ;
$label5->set_line_wrap( TRUE ) ;
$frame5->add( $label5 ) ;
$vbox2->pack_start( $frame5, FALSE, FALSE, 0 ) ;

my $frame6 = Gtk2::Frame->new( ”Label avec l’opton line_wrap et fill” ) ;
my $label6 = Gtk2::Label->new( ” Ceci est un exemple de césure de ligne.L’option fill, ”
. ”fait que le texte prend ”
. ”toute la largeur disponible. ”
. ”Voici une phrase qui le prouve. ”
. ”Et en voici une autre. ”
. ”Here comes the sun, do de do de do.\n”
. Ceci est un nouveau paragraphe\n”
. Un autre nouveau , plus long, meilleur. ”
. ”On arrive à la fin, ”
. ”malheureusement.” ) ;
$label6->set_justify( ’fill’ ) ;
$label6->set_line_wrap( TRUE ) ;
$frame6->add( $label6 ) ;
$vbox2->pack_start( $frame6, FALSE, FALSE, 0 ) ;

my $frame7 = Gtk2::Frame->new( ”Label souligné” ) ;
my $label7 = Gtk2::Label->new( ”Voici un label souligné !\n”
. ”Celui-là est souligné à la mode funky ” ) ;
$label7->set_justify( ’left’ ) ;
$label7->set_pattern( ”_______________________”
. ”_______ __ ________ ____ _____ ” ) ;
$frame7->add( $label7 ) ;
$vbox2->pack_start( $frame7, FALSE, FALSE, 0 ) ;

$window->show_all() ;


Gtk2->main ;

L’apport de Pango

La gestion des caractères est, en C, l’œuvre de la bibliothèque Pango. En Perl, à quelques exceptions prêts, nous n’avons pas à nous préoccuper de cette librairie, Gtk2-Perl fait le travail pour nous.

Formatage de texte

Nous allons maintenant voir comment modifier l’apparence de notre texte (police, couleur, ...). Pour notre application test, nous allons afficher une ligne en Courier gras taille 10, une ligne en Times New Roman italique bleu taille 12, et une ligne en Verdana souligné taille 16. Et tout cela centré (bien sûr).

Définition du format

Pour définir le format du texte, il suffit d’insérer des balises à l’intérieur même de notre texte.

Les balises rapides

Les balises rapides servent à mettre le texte en gras, italique ou autre de manière très simple. Voici l’intégralité de ces balises :

Pour utiliser ces balises, il suffit d’encadrer le texte à modifier des balises de formatage. Par exemple, pour mettre le texte en gras, ilfaudra entrer : <b>Gras</b>. Pour que le label prenne en compte la mise en forme vous devez utiliser :

$label->set_markup($texte_avec_balises);

La balise <span>

Cette fois-ci, nous allons étudier la balise <span> en détail. Avec celle-ci, nous allons pouvoir changer la police de caractères, la couleur du texte et bien d’autres choses.

Cette balise s’utilise comme les précédentes si ce n’est qu’elle accepte des paramètres. La liste ci-dessous présente tous les paramètres et les effets sur le texte.

Tous ces paramètres peuvent être mis à l’intérieur d’une seule balise <span>.

labelstyle

# !/usr/bin/perl -w


use strict ;
use Gtk2 ’-init’ ;

# Variables convenables pour vrai et faux
use constant TRUE => 1 ;
use constant FALSE => 0 ;

my $window = Gtk2::Window->new(”toplevel” ) ;
$window->signal_connect( ”destroy” , sub { Gtk2->main_quit ; } ) ;
$window->set_title( ”Les labels avec style” ) ;
$window->set_border_width( 5 ) ;
$window->set_default_size( 320 ,100 ) ;

my $vbox = Gtk2::VBox->new() ;
$window->add($vbox) ;
$vbox->show() ;

my $label1 = Gtk2::Label->new() ;
$label1->set_markup(<span face=’Courier New’><b>Courier New 10 Gras</b></span>\n” ) ;

my $label2 = Gtk2::Label->new() ;
$label2->set_markup(<span font_desc=’Times New Roman italic 12’ foreground=’#0000FF >Times New Roman 12 Italique</span>\n” ) ;

my $label3 = Gtk2::Label->new() ;
$label3->set_markup(<span font_desc=’Sans 16’ foreground=’#00FF00 ><u>Sans 16 Souligné</u></span> ) ;

$vbox->pack_start( $label1, FALSE, FALSE, 0 ) ;
$vbox->pack_start( $label2, FALSE, FALSE, 0 ) ;
$vbox->pack_start( $label3, FALSE, FALSE, 0 ) ;
$label1->show() ;
$label2->show() ;
$label3->show() ;

$window->show() ;

Gtk2->main ;