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 = new Gtk::Statusbar();
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é.
L'exemple suivant crée une barre d'état avec deux boutons, un pour pousser les éléments dans la barre d'état, l'autre pour enlever le dernier élément placé dans la pile.
#!/usr/bin/perl -wuse Gtk;
use strict;
init Gtk;
my $false = 0;
my $true = 1;
my $window;
my $vbox;
my $button;
my $statusbar;
my $context_id;
my $count = 1;
$window = new Gtk::Window( "toplevel" );
$window->set_usize( 200, 100 );
$window->set_title( "GTK Statusbar Example" );
$window->signal_connect( "delete_event", sub { Gtk->exit( 0 ); } );
$vbox = new Gtk::VBox( $false, 1 );
$window->add( $vbox );
$vbox->show();
$statusbar = new Gtk::Statusbar();
$vbox->pack_start( $statusbar, $true, $true, 0 );
$statusbar->show();
$context_id = $statusbar->get_context_id( "Statusbar Example" );
$button = new Gtk::Button( "Push Item" );
$button->signal_connect( "clicked", \&push_item, $context_id );
$vbox->pack_start( $button, $true, $true, 2 );
$button->show();
$button = new Gtk::Button( "Pop Last Item" );
$button->signal_connect( "clicked", \&pop_item, $context_id );
$vbox->pack_start( $button, $true, $true, 2 );
$button->show();
$window->show();
main Gtk;
exit( 0 );
### Routines
sub push_item { my ( $widget, $context_id ) = @_; my $buff = ( "Item " . $count++ ); $statusbar->push( $context_id, $buff ); }
sub pop_item { my ( $widget, $context_id ) = @_; $statusbar->pop( $context_id ); }