расширяет возможности GtkWindow и облегчает вставку меню, панелей инструментов и строки состояния вдоль нижнего края окна. Поскольку он потомок
GtkWindow
, вы можете применять к виджету
GnomeApp
любую функцию виджета
GtkWindow
. Далее вы познакомитесь с созданием меню и добавите строку состояния в ваш финальный пример.
Примечание
Вы можете использовать комплект инструментов GTK+ для создания меню, но среда GNOME предоставляет полезные структуры и макросы, которые существенно облегчают эту задачу. В интерактивной документации описывается, как создавать меню средствами GTK+.
Меню GNOME
Создание строки раскрывающихся меню в среде GNOME на удивление просто. Каждый пункт в строке меню представляется как массив структур
GNOMEUIInfo
, причем каждый элемент массива соответствует одному пункту меню. Например, если у вас есть меню File (Файл), Edit (Правка) и View (Вид), то у вас будут три массива, описывающих содержимое каждого меню.
После определения отдельных меню создается строка меню как таковая с помощью ссылок на эти массивы в еще одном массиве структур
GNOMEUIInfo
.
Структура
GNOMEUIInfo
немного сложна и нуждается в дополнительных пояснениях.
typedef struct {
GnomeUIInfoType type;
gchar const *label;
gchar const *hint;
gpointer moreinfо;
gpointer user_data;
gpointer unused_data;
GnomeUIPixmapType pixmap_type;
gconstpointer pixmap_info;
guint accelerator_key;
GdkModifierType ac_mods;
GtkWidget *widget;
} GnomeUIInfo;
Первый элемент в структуре,
type
, определяет тип элемента меню, который описывается далее. Он может быть одним из 11 типов
GnomeUIInfоТуре
, определяемых средой GNOME и приведенных в табл. 16.3.
Таблица 16.3
Типы
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.
Упражнение 16.9. Меню GNOME
Вы сможете опробовать меню с помощью данной короткой программы. Назовите ее menu1.с.
#include <gnome.h>
void closeApp(GtkWidget *window, gpointer data) {
gtk_main_quit;
}
1. Определите для пунктов меню функцию обратного вызова, названную