27 июня 2009 г.

Отображение списков. Часть 2

Отображение списков. Часть 1

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

Для того, чтобы изменить шрифт заголовка необходимо в него поместить виджет GtkLabel вместо простого текст. Для этого оставляем первый параметр GtkTreeViewColumn пустым, а ниже создаём ярлык с настройками шрифта (modify_font()) и цвета (modify_fg()), обязательно делаем виджет видимым с помощью метода show() и упаковываем его в заголовок колонки (set_widget()).
$view->append_column($column1 = new GtkTreeViewColumn('', $render, 'text', 0));
$label = new GtkLabel('Колонка 1');
$label->modify_font(new PangoFontDescription('Italic Bold'));
$label->show();
$column1->set_widget($label);
 
$view->append_column($column2 = new GtkTreeViewColumn('', $render, 'text', 1));
$label = new GtkLabel('Колонка 2');
$label->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse('#FF0000'));
$label->show();
$column2->set_widget($label);

Здесь для того, чтобы указать шрифт используется класс PangoFontDescription, которому передаётся строка с указанием шрифта. Если шрифт указан не полностью, как в нашем случае, то остальные настройки (имя и размер) берутся из системной темы.

Теперь займёмся выравниванием. Чтобы выровнять заголовок колонки применяется метод set_alignment(). Он принимает параметр типа double, имеющий значение от 0.0 (левое выравнивание) до 1.0 (правое). Выравнивания содержимого колонки устанавливается методом set_property() класса GtkCellRendererText. Первым параметром указывается изменяемое свойство (в данном случае - 'xalign'), вторым - новое значение. Этим же методом укажем и шрифт - свойство 'font'.
$render = new GtkCellRendererText;
$render->set_property('xalign', 1.0);
$view->append_column($column1 = new GtkTreeViewColumn('', $render, 'text', 0));
$column1->set_alignment(1.0);
 
$render = new GtkCellRendererText;
$render->set_property('xalign', 0.5);
$render->set_property('font', 'Italic');
$view->append_column($column2 = new GtkTreeViewColumn('', $render, 'text', 1));


Полный код программы:
<?php
 
$window = new GtkWindow;
$window->set_size_request(200, 100);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
 
$store = new GtkListStore(GObject::TYPE_STRING, GObject::TYPE_STRING);
$store->append(array('1.1', '1.2'));
$store->append(array('2.1', '2.2'));
$store->append(array('3.1', '3.2'));
 
$view = new GtkTreeView($store);
 
$render = new GtkCellRendererText;
$render->set_property('xalign', 1.0);
$view->append_column($column1 = new GtkTreeViewColumn('', $render, 'text', 0));
$column1->set_alignment(1.0);
$render = new GtkCellRendererText;
$render->set_property('xalign', 0.5);
$render->set_property('font', 'Italic');
$view->append_column($column2 = new GtkTreeViewColumn('', $render, 'text', 1));
 
$label = new GtkLabel('Колонка 1');
$label->modify_font(new PangoFontDescription('Italic Bold'));
$label->show();
$column1->set_widget($label);
$label = new GtkLabel('Колонка 2');
$label->modify_fg(Gtk::STATE_NORMAL, GdkColor::parse('#FF0000'));
$label->show();
$column2->set_widget($label);
 
$scroll = new GtkScrolledWindow();
$scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
$scroll->add($view);
 
$window->add($scroll);
$window->show_all();
Gtk::main();
 
?>

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