Основы программирования в Linux - Мэтью Нейл
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-терминированный список пар "имя/значение".
<b>GnomeProgram* gnome_program_init(const char *app_id,</b>
<b> const char *app_version, const GnomeModuleInfо *module_infо,</b>
<b> int argc, char **argv, const char *first_property_name, ...);</b>
Необязательный список свойств позволяет задать такие характеристики, как, например, каталог для поиска растровой графики.
Выполните упражнение 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:
$ <b>gcc gnome1.с -о gnome1 `pkg-config --cflags --libs libgnome-2.0 libgnomeui-2.0`</b>
Виджет GnomeApp расширяет возможности GtkWindow и облегчает вставку меню, панелей инструментов и строки состояния вдоль нижнего края окна. Поскольку он потомок GtkWindow, вы можете применять к виджету GnomeApp любую функцию виджета GtkWindow. Далее вы познакомитесь с созданием меню и добавите строку состояния в ваш финальный пример.
ПримечаниеВы можете использовать комплект инструментов GTK+ для создания меню, но среда GNOME предоставляет полезные структуры и макросы, которые существенно облегчают эту задачу. В интерактивной документации описывается, как создавать меню средствами GTK+.
Меню GNOME
Создание строки раскрывающихся меню в среде GNOME на удивление просто. Каждый пункт в строке меню представляется как массив структур GNOMEUIInfo, причем каждый элемент массива соответствует одному пункту меню. Например, если у вас есть меню File (Файл), Edit (Правка) и View (Вид), то у вас будут три массива, описывающих содержимое каждого меню.
После определения отдельных меню создается строка меню как таковая с помощью ссылок на эти массивы в еще одном массиве структур GNOMEUIInfo.
Структура GNOMEUIInfo немного сложна и нуждается в дополнительных пояснениях.
<b>typedef struct {</b>
<b> GnomeUIInfoType type;</b>
<b> gchar const *label;</b>
<b> gchar const *hint;</b>
<b> gpointer moreinfо;</b>
<b> gpointer user_data;</b>
<b> gpointer unused_data;</b>
<b> GnomeUIPixmapType pixmap_type;</b>
<b> gconstpointer pixmap_info;</b>
<b> guint accelerator_key;</b>
<b> GdkModifierType ac_mods;</b>
<b> GtkWidget *widget;</b>
<b>} GnomeUIInfo;</b>
Первый элемент в структуре, 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 за исключением того, что пункты включены в текущее меню, а не в подменюОткройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Основы программирования в Linux - Мэтью Нейл, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


