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

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

Жанры

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

 

GtkCellRenderer
— управление отображаемыми ячейками;

 

GtkTreeModel
— представление данных дерева и списка. 

Первые три компонента формируют так называемое Представление, а последний — Модель. Концепция разделения Представления и Модели (часто называемая проектным шаблоном Модель/Представление/Действие (Model/View/Controller) или сокращенно MVC) не свойственна GTK+,

но проектированию уделяется все больше и больше внимания на всех этапах программирования.

Ключевое достоинство проектного шаблона MVC заключается в возможности одновременной визуализации данных в виде разных представлений без ненужного их дублирования. Например, текстовые редакторы могут иметь две разные панели и редактировать разные фрагменты документа без хранения в памяти двух копий документа.

Шаблон MVC также очень популярен в Web-программировании, поскольку облегчает создание Web-сайтов, которые визуализируются в мобильных или WAP-обозревателях не так, как в настольных, просто за счет наличия отдельных компонентов Представление, оптимизированных для Web-обозревателя каждого типа. Вы также можете отделить логику сбора данных, например, запросов к базе данных, от логики пользовательского интерфейса.

Мы начнем с рассмотрения компонента Модель, представленного в GTK+ двумя типами. Объект типа

GtkTreeStore
содержит многоуровневые данные, например иерархию каталогов, а объект
GtkListStore
предназначен для простых данных.

Для создания объекта

GtkTreeStore
в функцию передается количество столбцов, за которым следуют типы всех столбцов:

GtkWidget *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_INT,

 G_TYPE_BOOLEAN);

Чтение, вставка, редактирование и удаление данных из модели выполняется с помощью структур

GtkTreeIter
. Эти структуры итераторов указывают на узлы дерева (или строки списка) и помогают находить фрагменты структур данных потенциально очень большого объема, а также манипулировать ими. Есть несколько вызовов API для получения объекта-итератора для разных точек дерева, но мы рассмотрим простейшую функцию
gtk_tree_store_append
.

Перед тем как вставлять какие-либо данные в модель дерева, вам нужно получить итератор, указывающий на новую строку. Функция

gtk_tree_store_append
заполняет объект
GtkTreeIter
, который представляет новую строку в дереве, как строку верхнего уровня (если вы передаете значение
NULL
в третьем аргументе), так и подчиненную или дочернюю строку (если вы передаете итератор главной или родительской строки):

GtkTreeIter iter;

gtk_tree_store_append(store, &iter, NULL);

Получив итератор, вы можете заполнять строку с помощью функции

gtk_tree_store_set
:

gtk_tree_store_set(store, &iter,

 0, "Def Leppard",

 1, 1987,

 2, TRUE, -1);

Номер

столбца и данные передаются парами, которые завершаются -1. Позже вы примените тип enum для того, чтобы сделать номера столбцов более информативными.

Для того чтобы добавить ветвь к данной строке (дочернюю строку), вам нужен только итератор для дочерней строки, который вы получаете, вызвав снова функцию

gtk_tree_store_append
и указав на этот раз в качестве параметра строку верхнего уровня:

GtkTreeIter child;

gtk_tree_store_append(store, &child, &iter);

Дополнительную информацию об объектах

GtkTreeStore
и функциях объекта
GtkListStore
см. в документации API, а мы пойдем дальше и рассмотрим компонент Представление типа
GtkTreeView
.

Создание объекта

GtkTreeView
— сама простота: только передайте в конструктор в качестве параметра модель типа
GtkTreeStore
или
GtkListStore
:

GtkWidget* view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

Сейчас самое время настроить виджет для отображения данных именно так, как вы хотите. Для каждого столбца следует определить

GtkCellRenderer
и источник данных. Можно выбрать, например, визуализацию только определенных столбцов данных или изменить порядок вывода столбцов.

GtkCellRenderer
— это объект, отвечающий за прорисовку каждой ячейки на экране, и существует три подкласса, имеющие дело с текстовыми ячейками, ячейками пиксельной графики и ячейками кнопок-выключателей:

GtkCellRendererText
;

GtkCellRendererPixBuf
;

GtkCellRendererToggle
.

В вашем Представлении будет применено текстовое представление ячеек,

GtkCellRendererText
.

GtkCellRenderer* renderer = gtk_cell_renderer_text_new;

gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view),

 "This is the column title", renderer, "text", 0, NULL);

Вы создаете представление ячейки и передаете его в функцию вставки столбца. Эта функция позволяет сразу задать свойства

GtkCellRendererText
, передавая заканчивающиеся значением
NULL
пары "ключ/значение". В качестве параметров указаны представление дерева, номер столбца, заголовок столбца, представление ячейки и его свойства. В приведенном примере вы задаете атрибут "text", передав номер столбца источника данных. Для объекта
GtkCellRendererText
определено несколько других атрибутов, включая подчеркивание, шрифт, размер и т.д.

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

Древесный маг Орловского княжества

Павлов Игорь Васильевич
1. Орловское княжество
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества

Искатель 2

Шиленко Сергей
2. Валинор
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Искатель 2

Древесный маг Орловского княжества 6

Павлов Игорь Васильевич
6. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 6

Тринадцатый

Северский Андрей
Фантастика:
фэнтези
рпг
7.12
рейтинг книги
Тринадцатый

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

Неудержимый. Книга XIV

Боярский Андрей
14. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIV

Хозяин оков II

Матисов Павел
2. Хозяин Оков
Фантастика:
юмористическое фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Хозяин оков II

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

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

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

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

Геном хищника. Книга четвертая

Гарцевич Евгений Александрович
4. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга четвертая

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Неудержимый. Книга XXVIII

Боярский Андрей
28. Неудержимый
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXVIII

Возлюбленная Яра

Шо Ольга
1. Яр и Алиса
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Возлюбленная Яра