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

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

Жанры

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

В упражнении 16.7, выполнив необходимые шаги, вы увидите, как это работает на практике.

Упражнение 16.7. Использование виджета
GtkTreeView

Введите следующий программный код и назовите файл tree.с.

1. Примените тип

enum
для обозначения столбцов, чтобы можно было ссылаться на них по именам. Общее количество столбцов удобно обозначить как
N_COLUMNS
:

#include <gtk/gtk.h>

enum {

 COLUMN_TITLE, COLUMN_ARTIST, COLUMN_CATALOGUE, N_COLUMNS

};

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit;

}

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

 GtkWidget *window;

 GtkTreeStore *store;

 GtkWidget *view;

 GtkTreeIter parent_iter, child_iter;

 GtkCellRenderer *renderer;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

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

 g_signal_connect(GTK_OBJECT(window), "destroy",

GTK_SIGNAL_FUNC(сloseApp), NULL);

2. Далее

вы создаете модель дерева, передавая количество столбцов и тип каждого из них:

 store = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING,

G_TYPE_STRING);

3. Следующий этап — вставка родительской и дочерней строк в дерево:

 gtk_tree_store_append(store, &parent_iter, NULL);

 gtk_tree_store_set(store, &parent_iter,

COLUMN_TITLE, "Dark Side of the Moon",

COLUMN_ARTIST, "Pink Floyd",

COLUMN_CATALOGUE, "B000024D4P", -1);

 gtk_tree_store_append(store, &child_iter, &parent_iter);

 gtk_tree_store_set (store, &child_iter,

COLUMN_TITLE, "Speak to Me", -1);

 view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

4. Наконец, добавьте столбцы в представление, задавая источники данных для них и заголовки:

 renderer = gtk_cell_renderer_text_new;

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

COLUMN_TITLE, "Title", renderer, "text",

COLUMN_TITLE, NULL);

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

COLUMN_ARTIST, "Artist", renderer, "text",

COLUMN_ARTIST, NULL);

 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
Поделиться:
Популярные книги

По прозвищу Святой. Книга первая

Евтушенко Алексей Анатольевич
1. Святой
Фантастика:
попаданцы
альтернативная история
6.40
рейтинг книги
По прозвищу Святой. Книга первая

Войны Наследников

Тарс Элиан
9. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Войны Наследников

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Тринадцатый IX

NikL
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Тринадцатый IX

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

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

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

Адвокат Империи 8

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

Лейтенант. Часть 2. Назад в СССР

Гаусс Максим
9. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Часть 2. Назад в СССР

#Бояръ-Аниме. Газлайтер. Том 36

Володин Григорий Григорьевич
36. История Телепата
Фантастика:
боевая фантастика
аниме
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 36

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Я Гордый часть 6

Машуков Тимур
6. Стальные яйца
Фантастика:
фэнтези
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 6

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки