2 июня 2009 г.

Диалоговые окна. Выбор шрифтов.

PHP-GTK помимо простых диалоговых окон поддерживает и более сложные, генерируемые автоматически и практически не требующие от программиста каких-либо действий. Сегодня мы поговорим о диалоге выбора шрифтов.



С первого взгляда представленное на скриншоте окно имеет сложную структуру, но на самом деле процесс его создания очень прост. Для этого существует специальный класс GtkFontSelectionDialog(), который в качестве единственного параметра принимает строку, которая будет заголовком окна:
$dialog = new GtkFontSelectionDialog('Выбор шрифта');


По умолчанию в поле "Образец" вписан текст "абвгде АБВГДЕ abcde ABCDE", который зачастую не даёт полного представления о выбранном шрифте. Для изменения этого текста существует метод set_preview_text():
$dialog->set_preview_text('Текст предварительного просмотра');


Для того, чтобы явно указать выбранный изначально шрифт применяется set_font_name(), иначе выбирается системный шрифт. Если указанного шрифта найти не удалось, то, так же, выбирается системный:
$dialog->set_font_name('Sans 14');


Как видите, в самом низу имеется три кнопки. Повесим определённые действия на нажатие на них:
$dialog->apply_button->connect_simple('clicked', 'on_apply');
$dialog->cancel_button->connect_simple('clicked', 'on_cancel');
$dialog->ok_button->connect_simple('clicked', 'on_ok', $dialog);
 
function on_apply()
{
echo "Нажата кнопка 'Применить'\n";
}
function on_cancel()
{
echo "Нажата кнопка 'Отменить'\n";
}
function on_ok($dialog)
{
echo "Выбран шрифт '".$dialog->get_font_name()."'\n";
}

Функция on_ok() с помощью метода get_font_name() печатает выбранный шрифт, это значение в последствие можно подставить в set_font_name().

Замечание: если вам не нужна кнопка "Применить", то для отображения диалога вместо show_all() применяйте show(), так как эта кнопка по умолчанию скрыта, а show_all() не обращая на это внимания отображает все имеющиеся в окне виджеты.

Полный код программы:
<?php
 
$dialog = new GtkFontSelectionDialog('Выбор шрифта');
$dialog->set_position(Gtk::WIN_POS_CENTER);
$dialog->connect_simple('destroy', 'Gtk::main_quit');
$dialog->set_preview_text('Текст предварительного просмотра');
$dialog->set_font_name('Sans 14');
 
$dialog->apply_button->connect_simple('clicked', 'on_apply');
$dialog->cancel_button->connect_simple('clicked', 'on_cancel');
$dialog->ok_button->connect_simple('clicked', 'on_ok', $dialog);
 
function on_apply()
{
echo "Нажата кнопка 'Применить'\n";
}
function on_cancel()
{
echo "Нажата кнопка 'Отменить'\n";
}
function on_ok($dialog)
{
echo "Выбран шрифт '".$dialog->get_font_name()."'\n";
}
 
$dialog->show_all();
Gtk::main();
?>

1 комментарий:

Unknown комментирует...

Прикольно, с нетерпением жду следующих статей. Автор, спасибо тебе