23 мая 2009 г.

Создаём меню окна. Часть 2.

Создаём меню окна. Часть 1.

Сегодня мы поговорим о том, как добавить к пункту меню изображение, как сделать пункт-флажок и радио-кнопку. В конце у нас получится следущее:


  1. Для создания пункта с изображением используется класс GtkImageMenuItem() вместо GtkMenuItem(). Ему в качестве единственного параметра передаётся идентификатор изображения. Все возможные изображения можно найти здесь.

  2. Флажки создаются классом GtkCheckMenuItem. При изменении состояния флажка издаётся сигнал 'toggled'.

  3. Для визуального разделения пунктов меню друг от друга используется разделитель GtkSeparatorMenuItem().

  4. В меню также можно поместить радио-кнопки GtkRadioMenuItem(). Их использование аналогично обычным радио-кнопкам, описанным в статье Базовые элементы интерфейса. Часть 2., поэтому я не буду повторно на них останавливаться.


Полный код программы:
<?php
 
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(200, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
 
$vbox = new GtkVBox();
 
$menubar = new GtkMenuBar();
$vbox->pack_start($menubar, FALSE, FALSE, 0);
 
$file = new GtkMenuItem('_Файл');
$edit = new GtkMenuItem('_Правка');
$help = new GtkMenuItem('_Справка');
 
$menubar->append($file);
$menubar->append($edit);
$menubar->append($help);
 
$sub_file = new GtkMenu();
$file->set_submenu($sub_file);
$sub_edit = new GtkMenu();
$edit->set_submenu($sub_edit);
$sub_help = new GtkMenu();
$help->set_submenu($sub_help);
 
$quit = new GtkImageMenuItem(Gtk::STOCK_CLOSE);
$quit->connect_simple('activate', array('Gtk', 'main_quit'));
$sub_file->append($quit);
 
$check1 = new GtkCheckMenuItem('_Флажок');
$check1->connect('toggled', 'on_toggled');
$sub_edit->append($check1);
 
$sub_edit->append(new GtkSeparatorMenuItem());
 
$radio1 = new GtkRadioMenuItem(NULL, 'Радио-кнопка _1');
$radio1->connect('toggled', 'on_toggled');
$sub_edit->append($radio1);
 
$radio2 = new GtkRadioMenuItem($radio1, 'Радио-кнопка _2');
$radio2->connect('toggled', 'on_toggled');
$sub_edit->append($radio2);
 
$sub_edit->append(new GtkSeparatorMenuItem());
 
$options = new GtkImageMenuItem(Gtk::STOCK_PREFERENCES);
$options->connect('activate', 'on_activate');
$sub_edit->append($options);
 
$about = new GtkImageMenuItem(Gtk::STOCK_ABOUT);
$about->connect('activate', 'on_activate');
$sub_help->append($about);
 
function on_activate($menu)
{
echo $menu->child->get_label()."\n";
}
 
function on_toggled($menu)
{
echo $menu->child->get_label()." - ".$menu->get_active()."\n";
}
 
$window->add($vbox);
$window->show_all();
Gtk::main();
 
?>

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