28 июля 2009 г.

Вкладки. Часть 1

Для удобного отображения большого количества виджетов, для их группировки и сортировки принято применять так называемые вкладки. Именно о них сегодня и поговорим.


GtkNotebook - это своеобразный контейнер, содержащий переключающиеся вкладки. Он отличается от таких контейнеров, как GtkBox и GtkTable, тем, что в любой момент видна только одна "страница", содержащаяся в нём. Доступ к остальным обеспечивается при переключении соответствующей вкладки.
Для добавления страницы в контейнер используется метод append_page(). Первым параметром указывается содержимое страницы (это может быть любой виджет, но в данном примере используются только ярлыки GtkLabel), вторым - заголовок. Заголовок - это не просто текст, а виджет, т.е. на вкладку можно поместить вместо ярлыка, например, виджет с изображением GtkImage.
$ntb_left->append_page(new GtkLabel('One Left'), new GtkLabel('Первая'));


Как видно на скриншоте, вкладки могут располагаться с любой из четырёх сторон от активной страницы. Для регулирования их размещения необходимо применять метод set_tab_pos(). Он принимает один параметр - сторону размещения (Gtk::POS_LEFT, Gtk::POS_RIGHT, Gtk::POS_TOP, Gtk::POS_BOTTOM).

Полный код программы:

<?php
 
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(350, 200);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
 
$ntb_left = new GtkNotebook();
$ntb_left->set_tab_pos(Gtk::POS_LEFT);
$ntb_left->append_page(new GtkLabel('One Left'), new GtkLabel('Первая'));
$ntb_left->append_page(new GtkLabel('Two Left'), new GtkLabel('Вторая'));
$ntb_left->append_page(new GtkLabel('Three Left'), new GtkLabel('Третья'));
 
$ntb_right = new GtkNotebook();
$ntb_right->set_tab_pos(Gtk::POS_RIGHT);
$ntb_right->append_page(new GtkLabel('One Right'), new GtkLabel('Первая'));
$ntb_right->append_page(new GtkLabel('Two Right'), new GtkLabel('Вторая'));
$ntb_right->append_page(new GtkLabel('Three Right'), new GtkLabel('Третья'));
 
$ntb_top = new GtkNotebook();
$ntb_top->set_tab_pos(Gtk::POS_TOP);
$ntb_top->append_page(new GtkLabel('One Top'), new GtkLabel('Первая'));
$ntb_top->append_page(new GtkLabel('Two Top'), new GtkLabel('Вторая'));
$ntb_top->append_page(new GtkLabel('Three Top'), new GtkLabel('Третья'));
 
$ntb_bottom = new GtkNotebook();
$ntb_bottom->set_tab_pos(Gtk::POS_BOTTOM);
$ntb_bottom->append_page(new GtkLabel('One Bottom'), new GtkLabel('Первая'));
$ntb_bottom->append_page(new GtkLabel('Two Bottom'), new GtkLabel('Вторая'));
$ntb_bottom->append_page(new GtkLabel('Three Bottom'), new GtkLabel('Третья'));
 
$table = new GtkTable();
$table->attach($ntb_left, 0, 1, 0, 1);
$table->attach($ntb_right, 0, 1, 1, 2);
$table->attach($ntb_top, 1, 2, 0, 1);
$table->attach($ntb_bottom, 1, 2, 1, 2);
 
$window->add($table);
$window->show_all();
Gtk::main();
 
?>

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