Часть 43. Статус бар

Содержание
43.1. О статус барах
43.2. Пример использования статус бара.

Иерархия наследования

Object
   +--- Widget
         +--- Container
               +--- Box
                     +--- HBox
                           +--- Statusbar
         

43.1. О статус барах.

Статус бары это простые виджеты, которые используются для отображения текстовых сообщений. Они сохраняют стек сообщений, которые помещены в них, так что попытка повторного вызова верхнего сообщения стека (popping) вызовет отображение _предыдущего_ текстового сообщения.

Чтобы позволить различным блокам приложения использовать один статус бар для отображения сообщений, окно статус бара использует Идентификаторы Контекста вызова (Context Identifiers), которые в дальнейшем применяются для для идентификации различных "пользователей". Отображаемое сообщение находитя всегда на верху стека, в независимости от контекста вызова. Вообще, сообщения упорядочены в стеке по методу LIFO: последний-вошел-первый-вышел, без какой-либо зависимости от контекста.

Создаем статус бар командой:

$statusbar = new Gtk::Statusbar();

Новый Идентификатор Контекста можно получить методом get_context_id, передав в качестве аргумента короткое описание создаваемого контекста.

$statusbar->get_context_id( $context_description );

Есть три функции для работы со статус барами:

$statusbar->push( $context_id, $text );

$statusbar->pop( $context_id );

$statusbar->remove( $context_id, $message_id );

Первая, push(), используется для добавления новых сообщений в статус бар. Она возвращает идентификатор сообщения, который позволяет удалять их функцией gtk_statusbar_remove из стека статус бара.

Функция pop() удаляет верхнее сообщение стека указанного Идентификатора Контекста.

43.2. Пример использования статус бара.

Следующий пример создает статус бар и две кнопки: одна помещает сообщения на статус бар, а другая вызывает их на статус барз из стека.

Status Bar Program Source

      
#!/usr/bin/perl -w

use 
Gtk
;
use 
strict
;

set_locale Gtk;
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" );

# Cоздаем кнопку добавления сообщений
$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 );



### Функции


# Помещаем сообщение в стек. И увеличиваем значение счетчика.


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 );
}


# Конец примера
      
   

Скриншот