Основы программирования в Linux - Страница 291

Изменить размер шрифта:

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

  COLUMN_CATALOGUE, "Catalogue", renderer, "text",

  COLUMN_CATALOGUE, NULL);

 gtk_container_add(GTK_CONTAINER(window), view);

 gtk_widget_show_all(window); gtk_main();

 return 0;

}

Вы будете применять

GtkTreeView
как основной объект вашего приложения для работы с компакт-дисками, когда будете модифицировать содержимое
GtkTreeView
в соответствии с запросами к базе данных компакт-дисков.

Мы завершили обзор виджетов GTK+ и теперь обратим наше внимание на другую половину: среду GNOME. Вы увидите, как вставлять меню в ваше приложение с помощью библиотек GNOME и как виджеты GNOME облегчают программирование для рабочего стола GNOME.

Виджеты GNOME

Комплект GTK+ спроектирован как нейтральный по отношению к рабочему столу, т.е. GTK+ не делает никаких допущений о том, что он выполняется в среде GNOME или даже в системе Linux. Причина заключается в том, что комплект инструментов GTK+ можно с относительной легкостью перенести для выполнения в ОС Windows или любой другой оконной системе. В результате GTK+ не хватает средств для связывания программы с рабочим столом, таких как средства сохранения настройки программы, отображение файлов помощи или программные апплеты (апплеты — это небольшие утилиты, выполняющиеся на краевых панелях (edge panels)).

Библиотеки среды включают виджеты GNOME, расширяющие комплект GTK+ и замещающие его части более легкими в применении виджетами. В этом разделе мы расскажем, как программировать с помощью виджетов GNOME.

Перед использованием библиотек GNOME их следует инициализировать при запуске ваших программ точно так же, как вы поступали с библиотеками GTK+. Вы вызываете функцию

gnome_program_init
также, как вы вызывали функцию
gtk_init
в чистых программах GTK+.

Эта функция принимает параметры

app_id
и
арр_version
, применяемые для описания вашей программы в среде GNOME,
module_info
, сообщающий GNOME о том, какой библиотечный модуль инициализировать, параметры командной строки и свойства приложения, заданные как NULL-терминированный список пар "имя/значение".

GnomeProgram* gnome_program_init(const char *app_id,

 const char *app_version, const GnomeModuleInfо *module_infо,

 int argc, char **argv, const char *first_property_name, ...);

Необязательный список свойств позволяет задать такие характеристики, как, например, каталог для поиска растровой графики.

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

Упражнение 16.8. Окно GNOME

Давайте рассмотрим программу, применяющую средства 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
за исключением того, что пункты включены в текущее меню, а не в подменю
Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com