На представленном ниже скриншоте область с возможностью прокрутки располагается в правой верхней панели. В данный момент виден только вертикальный скролл, т.к. в программе установлено появление полос только при необходимости, т.е. когда содержимое выходит за пределы области виджета.
В PHP-GTK за полосы прокрутки отвечает специальный класс - GtkScrolledWindow.
$scroll = new GtkScrolledWindow;
С помощью метода set_policy() указываются правила появления полос прокрутки. Первым параметром назначаются правила для горизонтального скролла, вторым - для вертикального. Оба параметра являются обязательными. Они могут принимать любое из трёх значений:
- Gtk::POLICY_ALWAYS - полоса прокрутки видна всегда;
- Gtk::POLICY_NEVER - полоса прокрутки никогда не показывается;
- Gtk::POLICY_AUTOMATIC - полоса прокрутки появляется автоматически при необходимости.
$scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
Для добавления содержимого в область прокрутки имеется два метода:
- add() - используется в том случае, если у добавляемого виджета имеется встроенная поддержка прокручивания. К таким виджетам относится GtkTreeView, который будет рассматриваться в дальнейшем.
- add_with_viewport() - используется, если виджет не поддерживает прокрутку. Это такие виджеты, как GtkLabel, GtkButton и т.д..
$vbox = new GtkVBox;
for ($i = 1; $i<= 10; $i++)
{
$vbox->pack_start(new GtkButton('Кнопка '.$i));
}
$scroll->add_with_viewport($vbox);
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_size_request(400, 200);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$hpaned = new GtkHPaned;
$vpaned = new GtkVPaned;
$left = new GtkFrame;
$left->set_shadow_type(Gtk::SHADOW_IN);
$left->add(new GtkLabel('Левая панель'));
$right_top = new GtkFrame;
$right_top->set_shadow_type(Gtk::SHADOW_IN);
$vbox = new GtkVBox;
for ($i = 1; $i<= 10; $i++)
{
$vbox->pack_start(new GtkButton('Кнопка '.$i));
}
$scroll = new GtkScrolledWindow;
$scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
$scroll->add_with_viewport($vbox);
$right_top->add($scroll);
$right_bottom = new GtkFrame;
$right_bottom->set_shadow_type(Gtk::SHADOW_IN);
$right_bottom->add(new GtkLabel('Правая нижняя панель'));
$vpaned->add1($right_top);
$vpaned->add2($right_bottom);
$hpaned->add1($left);
$hpaned->add2($vpaned);
$window->add($hpaned);
$window->show_all();
Gtk::main();
?>
Комментариев нет:
Отправить комментарий