Описание Gtk-Perl | ||
---|---|---|
Предыдущая | Следующая |
Object
+--- Widget
+--- Container
+--- Box
+--- HBox
+--- Statusbar
Статус бары это простые виджеты, которые используются для отображения текстовых сообщений. Они сохраняют стек сообщений, которые помещены в них, так что попытка повторного вызова верхнего сообщения стека (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() удаляет верхнее сообщение стека указанного Идентификатора Контекста.
Следующий пример создает статус бар и две кнопки: одна помещает сообщения на статус бар, а другая вызывает их на статус барз из стека.
#!/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 ); } # Конец примера
Скриншот
Предыдущая | На главную | Следующая |
Диалог выбора шрифта | Вверх | Передвигаемые окна с виджетами |