Типы GnomeUIInfоТуре | Описание |
---|---|
GNOME_APP_UI_ENDOFINFO | Означает, что этот элемент — последний пункт меню в массиве |
GNOME_APP_UI_ITEM | Обычный пункт меню или переключатель, если ему предшествует элемент GNOME_APP_UI_RADIOITEMS |
GNOME_APP_UI_TOGGLEITEM | Пункт меню в виде кнопки-переключателя или кнопки-флажка |
GNOME_APP_UI_RADIOITEMS | Группа переключателей или зависимых переключателей |
GNOME_APP_UI_SUBTREE | Означает, что данный элемент представляет собой подменю. Задайте moreinfo для указания на массив подменю |
GNOME_APP_UI_SEPARATOR | Вставляет разделительную линию в меню |
GNOME_APP_UI_HELP | Создает список тем справки для использования в меню Help (Справка) |
GNOME_APP_UI_BUILDER_DATA | Задает данные построения (builder data) для следующих элементов |
GNOME_APP_UI_ITEM_CONFIGURABLE | Настраиваемый пункт меню |
GNOME_APP_UI_SUBTREE_STOCK | Такой же, как GNOME_APP_UI_SUBTREE за исключением того, что надписи следует искать в каталоге gnome-libs |
GNOME_APP_UI_INCLUDE | Такой же, как GNOME_APP_UI_SUBTREE за исключением того, что пункты включены в текущее меню, а не в подменю |
Второй и третий элементы структуры определяют текст пункта меню и всплывающей подсказки. (Подсказка выводится в строке состояния, у нижнего края окна.)
Назначение элемента moreinfo
зависит от типа. В случае ITEM
и TOGGLEITEM
он указывает на функцию обратного вызова, которую следует вызвать при активации пункта меню. Для RADIOITEMS
он указывает на массив структур GnomeUIInfo
, в которых группируются переключатели.
user_data
— произвольный указатель, передаваемый в функцию обратного вызова. Элементы pixmap_type
и pixmap_info
позволяют добавить к пункту меню растровую пиктограмму, a accelerator_key
и ac_mods
помогут определить клавиатурный эквивалент пункта меню.
И наконец, элемент widget
применяется для внутреннего хранения указателя на виджет пункта меню функцией создания меню.
Выполните упражнение 16.9.
Вы сможете опробовать меню с помощью данной короткой программы. Назовите ее menu1.с.
#include
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
1. Определите для пунктов меню функцию обратного вызова, названную item_clicked
:
void item clicked(GtkWidget *widget, gpointer user_data) {
printf("Item Clicked!\n");
}
2. Далее следуют определения меню. У вас есть подменю, меню верхнего уровня и массив строки меню:
static GnomeUIInfo submenu[] = {
{GNOME_APP_UI_ITEM, "SubMenu", "SubMenu Hint",
GTK_SIGNAL_FUNC(item_clicked), NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_ENDOFINFO, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0,
NULL}
};
static GnomeUIInfo menu[] = {
{GNOME_APP_UI_ITEM, "Menu Item 1", "Menu Hint",
NULL, NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_SUBTREE, "Menu Item 2", "Menu Hint",
submenu, NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_ENDOFINFO, NULL, NULL, null,
NULL, NULL, 0, NULL, 0, 0, NULL}
};
static GnomeUIInfo menubar[] = {
{GNOME_APP_UI_SUBTREE, "Toplevel Item", NULL,
menu, NULL, NULL, 0, NULL, 0, 0, NULL},
{GNOME_APP_UI_ENDOFINFO, NULL, NULL, NULL,
NULL, NULL, 0, NULL, 0, 0, NULL}
};