6 июня 2009 г.

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

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



GtkFileChooserButton() - представляет из себя кнопку, на которой написано имя выбранного файла. При нажатии на неё автоматически открывается диалоговое окно GtkFileChooserDialog(), которое будет рассмотрено позже. Первым параметром указывается имя создаваемого диалога, а вторым - что необходимо выбрать: файл (Gtk::FILE_CHOOSER_ACTION_OPEN) или папку (Gtk::FILE_CHOOSER_SELECT_FOLDER). При выборе файла издаётся сигнал 'selection-changed'.
$file_button = new GtkFileChooserButton(
'Выбрать файл',
Gtk::FILE_CHOOSER_ACTION_OPEN
);
$file_button->connect('selection-changed', 'on_selection');
function on_selection($button)
{
echo "Выбран файл: '".$button->get_filename()."'\n";
}


GtkFileChooserDialog() - диалоговое окно для выбора файлов. Данный класс, в первую очередь, предназначен для использования с командами "Открыть" или "Сохранить", т.е. его можно вызвать, например, при нажатии на обыкновенную кнопку или при выборе пункта меню. Обращаться с GtkFileChoserDialog() необходимо также, как и с обычным диалогом, описываемым в статье Диалоговые окна.

Полный код программы:
<?php
 
$window = new GtkWindow();
$window->set_size_request(400, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
 
$vbox = new GtkVBox();
$hbox = new GtkHBox();
 
$file_button = new GtkFileChooserButton(
'Выбрать файл',
Gtk::FILE_CHOOSER_ACTION_OPEN
);
$file_button->connect('selection-changed', 'on_selection');
function on_selection($button)
{
echo "Выбран файл: '".$button->get_filename()."'\n";
}
$hbox->pack_start(new GtkLabel(' Выберите файл:'), FALSE, FALSE);
$hbox->pack_start($file_button);
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
$vbox->pack_start($hbox, FALSE, FALSE);
 
$button = new GtkButton('Открыть диалог выбора файлов');
$button->connect_simple('clicked', 'open_dialog');
function open_dialog()
{
$dialog = new GtkFileChooserDialog(
'Выбрать файл',
NULL,
Gtk::FILE_CHOOSER_ACTION_OPEN,
array(
Gtk::STOCK_CANCEL, Gtk::RESPONSE_CANCEL,
Gtk::STOCK_OK, Gtk::RESPONSE_OK
)
);
$dialog->show_all();
$result = $dialog->run();
if ($result == Gtk::RESPONSE_OK)
{
echo "Выбран файл: ".$dialog->get_filename()."\n";
}
$dialog->destroy();
}
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
$vbox->pack_start($button, FALSE, TRUE);
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
 
$window->add($vbox);
$window->show_all();
Gtk::main();
?>

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