Chapitre 11
Les barres d’état

Les barres d’état sont de simples widgets utilisés pour afficher un message texte. Ils gardent une pile des messages qu’on leur donne ainsi, quand on enlève le message courant, le message précédent réapparaît.

Afin de permettre aux différentes parties du programme d’utiliser la même barre d’état, le widget barre d’état possède un identificateur de contexte qui, comme son nom l’indique, identifie les utilisateurs. Le message sur le haut de la pile est celui qui est affiché, sans s’occuper de son contexte. Les messages sont gérés dans la pile selon le principe du dernier entré - premier sorti et non en fonction de l’ordre des identificateurs de contexte.

Une barre d’état est créée grâce à l’appel :

$statusbar = Gtk::Statusbar->new();
Un nouvel identificateur de contexte est requis pour utiliser la fonction suivante ainsi qu’une brève description du contexte.
$statusbar->get_context_id( $context_description );
Les trois fonctions suivantes peuvent opérer sur les barres d’état :
$statusbar->push( $context_id, $text );  
$statusbar->pop( $context_id );  
$statusbar->remove( $context_id, $message_id );
La première, push(), est utilisée pour ajouter un nouveau message dans la barre d’état. Elle retourne une identificateur de Message, qui peut être passé plus tard à la fonction $status->remove() pour enlever le message avec le Message donné et l’identificateur de contexte de la pile de la barre d’état.

La fonction pop() enlève le plus haut message de la pile avec l’identificateur de contexte donné.

Exemple

statusbar

# !/usr/bin/perl -w

use strict ;
use Gtk2 ’-init’ ;
use constant TRUE => 1 ;
use constant FALSE => 0 ;

my $count = 1 ;

my $window = Gtk2::Window->new( ”toplevel” ) ;
$window->set_default_size( 200 , 100 ) ;
$window->set_title( ”Barre d’état” ) ;
$window->signal_connect( ”delete_event” , sub { Gtk2->main_quit ; } ) ;

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

my $statusbar = Gtk2::Statusbar->new() ;
$vbox->pack_start( $statusbar, TRUE, TRUE, 0 ) ;
$statusbar->show() ;

my $context_id = $statusbar->get_context_id( ”Exemple de barre d’etat” ) ;

my $button = Gtk2::Button->new( ”Rajouter un élément” ) ;
$button->signal_connect( ”clicked” , \&push_item, $context_id ) ;
$vbox->pack_start( $button, TRUE, TRUE, 2 ) ;
$button->show() ;

my $button2 = Gtk2::Button->new( ”Retirer le dernier élément” ) ;
$button2->signal_connect( ”clicked” , \&pop_item, $context_id ) ;
$vbox->pack_start( $button2, TRUE, TRUE, 2 ) ;
$button2->show() ;

$window->show() ;

Gtk2->main() ;

### Rappels
sub push_item {
my ( $widget, $context_id ) = @_ ;
my $buff = ( ”Elément ” . $count++ ) ;
$statusbar->push( $context_id, $buff ) ;
}

sub pop_item {
my ( $widget, $context_id ) = @_ ;
$statusbar->pop( $context_id ) ;
}