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

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

Жанры

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

};

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}

};

3. В функции

main
вы имеете дело с обычной инициализацией и затем создаете ваш виджет
GnomeApp
и задаете все меню:

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

 GtkWidget *app;

 gnome_program_init("gnome1", "0.1", LIBGNOMEUI_MODULE,

argc, argv, GNOME_PARAM_NONE);

 app = gnome_app_new("gnome1", "Menus, menus, menus");

 gtk_window_set_default_size(GTK_WINDOW(app), 300, 200);

 g_signal_connect(GTK_OBJECT(app), "destroy",

GTK_SIGNAL_FUNC(closeApp), NULL);

 gnome_app_create_menus(GNOME_APP(app), menubar);

 gtk_widget_show(app);

 gtk_main;

 return 0;

}

Попробуйте выполнить menu1 и посмотрите в действии строку меню, подменю и меню GNOME обратного вызова, показанные на рис. 16.12.

Рис. 16.12

Структура

GnomeUIInfo
едва ли дружественная по отношению к программисту, если учесть, что она состоит из 11 элементов, большинство из которых обычно равно
NULL
или нулю. При их вводе очень легко допустить ошибку и трудно отличить одно поле от другого в длинном массиве элементов. Для улучшения сложившейся ситуации в среде GNOME определены макросы, устраняющие необходимость определения структур вручную. Эти макросы также вставляют пиктограммы и клавиатурные акселераторы для вас, и все даром. На самом деле редко возникают причины, заставляющие использовать вместо них что-то другое.

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

#include <libgnomeui/libgnameui.h>

#define GNOMEUIINFO_MENU_OPEN_ITEM(cb, data)

#define GNOMEUIINFO_MENU_SAVE_ITEM(cb, data)

#define GNOMEUIINFO_MENU_SAVE_AS_IТЕМ(cb, data)

#define GNOMEUIINFO_MENU_PRINT_ITEM(cb, data)

#define GNOMEUIINFO_MENU_PRINT_SETUP_ITEM(cb, data)

#define GNOMEUIINFO_MENU_CLOSE_IТЕМ(cb, data)

#define GNOMEUIINFO_MENU_EXIT_IТЕМ(cb, data)

#define GNOMEUIINFO_MENU_QUIT_IТЕМ(cb, data)

#define GNOMEUIINFO_MENU_CUT_ITEM(cb, data)

#define GNOMEUIINFO_MENU_COPY_ITEM(cb, data)

#define GNOMEUIINFO_MENU_PASTE_ITEM(cb, data)

#define GNOMEUIINFO_MENU_SELECT_ALL_ITEM(cb, data)

...

Второй набор предназначен для определений верхнего уровня, в него вы просто передаете массив.

#define GNOMEUIINFO_MENU_FILE_TREE (tree)

#define GNOMEUIINFO_MENU_EDIT_TREE (tree)

#define GNOMEUIINFO_MENU_VIEW_TREE (tree)

#define GNOMEUIINFO_MENU_SETTINGS_TREE (tree)

#define GNOMEUIINFO_MENU_FILES_TREE (tree)

#define GNOMEUIINFO_MENU_WINDOWS_TREE (tree)

#define GNOMEUIINFO_MENU_HELP_TREE (tree)

#define GNOMEUIINFO_MENU_GAME_TREE (tree)

Выполните упражнение 16.10.

Упражнение 16.10. Меню с помощью макросов GNOME

В этом примере вы воспользуетесь уже заданными меню и посмотрите, как работают макросы. Внесите следующие изменения в программу menu1.с и назовите новый вариант menu2.c. Для простоты в этом примере для пунктов меню не определены функции обратного вызова. В данном случае наша задача — просто продемонстрировать удобство применения макросов GNOME, формирующих меню.

#include <gnome.h>

static GnomeUIInfo filemenu[] = {

 GNOMEUIINFO_MENU_NEW_ITEM("New", "Menu Hint", NULL, NULL),

 GNOMEUIINFO_MENU_OPEN_ITEM(NULL, NULL),

 GNOMEUIINFO_MENU_SAVE_AS_ITEM(NULL, NULL),

 GNOMEUIINFO_SEPARATOR,

 GNOMEIINFO_MENU_EXIT_ITEM(NULL, NULL),

 GNOMEUUINFO_END

};

static GnomeUUInfo editmenu[] =

 GNOMEUIINFO_MENU_FIND_ITEM(NULL, NULL),

 GNOMEUIINFO_END

};

static GnomeUIInfo menubar[] = {

 GNOMEUIINFO_MENU_FILE_TREE(filemenu),

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

Королевский крест

Панов Вадим Юрьевич
10. Тайный Город
Фантастика:
боевая фантастика
9.09
рейтинг книги
Королевский крест

Шайтан Иван 4

Тен Эдуард
4. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
8.00
рейтинг книги
Шайтан Иван 4

Кромвель

Павлова Татьяна Александровна
611. Жизнь замечательных людей
Проза:
историческая проза
6.00
рейтинг книги
Кромвель

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Милосердие палача

Смирнов Виктор Васильевич
3. Адъютант его превосходительства
Приключения:
исторические приключения
7.38
рейтинг книги
Милосердие палача

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Лев Толстой

Шкловский Виктор Борисович
363. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Лев Толстой

Газлайтер. Том 14

Володин Григорий Григорьевич
14. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
4.75
рейтинг книги
Газлайтер. Том 14

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Смертельный танец

Гамильтон Лорел Кей
6. Анита Блейк
Фантастика:
ужасы и мистика
9.29
рейтинг книги
Смертельный танец

Третий Генерал: Тома I-II

Зот Бакалавр
1. Третий Генерал
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Третий Генерал: Тома I-II

Эпоха Опустошителя. Том II

Павлов Вел
2. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том II

Лейб-хирург

Дроздов Анатолий Федорович
2. Зауряд-врач
Фантастика:
альтернативная история
7.34
рейтинг книги
Лейб-хирург

Око василиска

Кас Маркус
2. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Око василиска