25 мая 2009 г.

Панель инструментов.

Сегодня мы поговорим о создании панели инструментов. На ней располагаются кнопки для наиболее используемых функций программы. Как правило, это "Вперёд", "Назад", "Открыть", "Сохранить", "Отменить" и т.д. Сегодняшняя статья будет отличаться от всех предыдущих тем, что в ней мы немного оживим программу. Но обо всём по порядку. Для затравки приведу скриншот:



За панель инструментов отвечает класс GtkToolBar():
$toolbar = new GtkToolbar();


Создадим две кнопки следующим способом:
$open = GtkToolButton::new_from_stock(Gtk::STOCK_OPEN);
$close = GtkToolButton::new_from_stock(Gtk::STOCK_CLOSE);

Данному методу передаётся идентификатор изображения. Обратите внимание, что мы не указываем текст, который должен располагаться на кнопке. Этот текст автоматически берётся из файлов локализации Gnome. Это довольно удобно, т.к. на любом компьютере кнопка будет смотреться максимально дефолтно.

Для помещения кнопки на панель используется метод insert():
$toolbar->insert($open, -1);
$toolbar->insert($close, -1);

Первый параметр - это добавляемая кнопка. Второй - позиция, в которой эта кнопка будет располагаться. Ноль означает, что кнопка будет помещена на самую первую позицию перед всеми остальными кнопками. Если параметр отрицателен (как в нашем случае), то, наоборот, кнопка будет помещена после всех остальных.

Теперь сделаем кнопку "Закрыть" по-умолчанию неактивной. Для этого применяется метод set_sensitive(), который принимает один параметр булевого типа. Если он идентичен FALSE, то кнопка будет отображаться как неактивная (см. скриншот).
$close->set_sensitive(FALSE);


Как я и говорил в начале, добавим динамики программе. Мы сделаем так, чтобы при нажатии на кнопку "Открыть" (сигнал 'clicked') она теряла свою активность, а "Закрыть" - приобретала. При нажатии на ставшую активной "Закрыть" кнопки возвращаются в исходное положение.
$open->connect_simple('clicked', 'on_open', $open, $close);
$close->connect_simple('clicked', 'on_close', $open, $close);
 
function on_open($open, $close)
{
$open->set_sensitive(FALSE);
$close->set_sensitive(TRUE);
}
 
function on_close($open, $close)
{
$open->set_sensitive(TRUE);
$close->set_sensitive(FALSE);
}


Полный код программы:
<?php
 
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(360, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox();
 
$toolbar = new GtkToolbar();
$vbox->pack_start($toolbar, FALSE, FALSE);
 
$open = GtkToolButton::new_from_stock(Gtk::STOCK_OPEN);
$close = GtkToolButton::new_from_stock(Gtk::STOCK_CLOSE);
 
$toolbar->insert($open, -1);
$toolbar->insert($close, -1);
 
$close->set_sensitive(FALSE);
 
$open->connect_simple('clicked', 'on_open', $open, $close);
$close->connect_simple('clicked', 'on_close', $open, $close);
 
function on_open($open, $close)
{
$open->set_sensitive(FALSE);
$close->set_sensitive(TRUE);
}
 
function on_close($open, $close)
{
$open->set_sensitive(TRUE);
$close->set_sensitive(FALSE);
}
 
$window->add($vbox);
$window->show_all();
Gtk::main();
 
?>

Комментариев нет: