Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Давайте рассмотрим программу, применяющую средства GNOME, в которой выполняется GNOME-замещение объекта

GtkWindow
виджетом
GnomeApp
.

Введите эту программу и назовите ее gnome1.c:

#include <gnome.h>

int main(int argc, char* argv[]) {

 GtkWidget *app;

 gnome_program_init("gnome1", "1.0", MODULE, argc, argv, NULL);

 app = gnome_app_new("gnome1", "The Window Title");

 gtk_widget_show(app);

 gtk_main;

 return 0;

}

Для компиляции

вам необходимо включить заголовочные файлы GNOME, поэтому передайте библиотеки libgnomeui и libgnome в команду
pkg-config
:

$ gcc gnome1.с -о gnome1 `pkg-config --cflags --libs libgnome-2.0 libgnomeui-2.0`

Виджет

GnomeApp
расширяет возможности 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. Определите для пунктов меню функцию обратного вызова, названную

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}

Поделиться:
Популярные книги

Мечников. Избранник бога

Алмазов Игорь
5. Жизнь Лекаря с нуля
Фантастика:
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Мечников. Избранник бога

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Японский городовой

Зот Бакалавр
7. Героями не становятся, ими умирают
Фантастика:
фэнтези
попаданцы
5.80
рейтинг книги
Японский городовой

Мусорщик

Поселягин Владимир Геннадьевич
3. Наемник
Фантастика:
боевая фантастика
космическая фантастика
8.55
рейтинг книги
Мусорщик

Черный Маг Императора 19

Герда Александр
19. Черный маг императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 19

Старый, но крепкий

Крынов Макс
1. Культивация без насилия
Фантастика:
рпг
уся
попаданцы
5.00
рейтинг книги
Старый, но крепкий

Кодекс Охотника. Книга VIII

Винокуров Юрий
8. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VIII

Последний Паладин. Том 10

Саваровский Роман
10. Путь Паладина
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Последний Паладин. Том 10

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Deus vult

Зот Бакалавр
9. Герой Империи
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Deus vult

Черная метка

Лисина Александра
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черная метка

Симфония теней

Злобин Михаил
3. Хроники геноцида
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Симфония теней

Ветер перемен

Ланцов Михаил Алексеевич
5. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ветер перемен