Вход/Регистрация
Основы программирования в 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
— это объект, отвечающий за прорисовку каждой ячейки на экране, и существует три подкласса, имеющие дело с текстовыми ячейками, ячейками пиксельной графики и ячейками кнопок-выключателей:

  • Читать дальше
  • 1
  • ...
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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