GtkTreeModel
GtkTreeModel — Деревовидный интерфейс, используемый GtkTreeView
Функции
| gboolean | gtk_tree_model_get_iter_from_string () |
| gboolean | gtk_tree_model_get_iter_first () |
| GtkTreePath * | gtk_tree_model_get_path () |
| void | gtk_tree_model_get_value () |
| gboolean | gtk_tree_model_iter_next () |
| gboolean | gtk_tree_model_iter_previous () |
| gboolean | gtk_tree_model_iter_children () |
| gboolean | gtk_tree_model_iter_has_child () |
| gint | gtk_tree_model_iter_n_children () |
| gboolean | gtk_tree_model_iter_nth_child () |
| gboolean | gtk_tree_model_iter_parent () |
| gchar * | gtk_tree_model_get_string_from_iter () |
| void | gtk_tree_model_ref_node () |
| void | gtk_tree_model_unref_node () |
| void | gtk_tree_model_get () |
| void | gtk_tree_model_get_valist () |
| void | gtk_tree_model_foreach () |
| void | gtk_tree_model_row_changed () |
| void | gtk_tree_model_row_inserted () |
| void | gtk_tree_model_row_has_child_toggled () |
| void | gtk_tree_model_row_deleted () |
| void | gtk_tree_model_rows_reordered () |
| void | gtk_tree_model_rows_reordered_with_length () |
Сигналы
| void | row-changed | Выполнить последним |
| void | row-deleted | Выполнить первым |
| void | row-has-child-toggled | Выполнить последним |
| void | row-inserted | Выполнить первым |
| void | rows-reordered | Выполнить первым |
Типы и значения
| GtkTreeModel | |
| struct | GtkTreeIter |
| GtkTreePath | |
| GtkTreeRowReference | |
| struct | GtkTreeModelIface |
| перечисление | GtkTreeModelFlags |
Иерархия объектов
GBoxed ├── GtkTreeIter ╰── GtkTreePath GInterface ╰── GtkTreeModel
Предварительные требования
GtkTreeModel требует GObject.
Известные производные интерфейсы
GtkTreeModel требуется для GtkTreeSortable.
Известные реализации
GtkTreeModel реализуется GtkListStore, GtkTreeModelFilter, GtkTreeModelSort и GtkTreeStore.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Интерфейс GtkTreeModel определяет общий древовидный интерфейс для использования виджетом GtkTreeView. Это абстрактный интерфейс, предназначенный для работы с любой подходящей структурой данных. Программист должен только реализовать этот интерфейс для своего собственного типа данных, чтобы его можно было отобразить в виджете GtkTreeView.
Модель представляется в виде иерархического дерева данных со строгими типами и столбцами. Другими словами, модель можно рассматривать как дерево, где каждый узел имеет разные значения в зависимости от столбца, который запрашивается. Тип данных в столбце определяется с помощью системы GType (например, G_TYPE_INT, GTK_TYPE_BUTTON, G_TYPE_POINTER и т. д.). Типы однородны по столбцам для всех узлов. Важно отметить, что этот интерфейс предоставляет только способ проверки модели и наблюдения за изменениями. Реализация каждой отдельной модели определяет, как и изменяются ли данные.
Для упрощения работы программистов, которым не нужно создавать собственные специализированные модели, предоставляются две универсальные модели — GtkTreeStore и GtkListStore. Для их использования разработчик просто добавляет данные в эти модели по мере необходимости. Эти модели предоставляют структуру данных и все необходимые древовидные интерфейсы. В результате реализация перетаскивания, сортировки и хранения данных является тривиальной. Для подавляющего большинства деревьев и списков этих двух моделей достаточно.
К моделям обращаются на уровне узлов/столбцов. Можно запросить значение модели в определенном узле и определенном столбце этого узла. Существуют две структуры, используемые для ссылки на конкретный узел в модели. Это GtkTreePath и GtkTreeIter («iter» — сокращение от «итератор»). Большая часть интерфейса состоит из операций с GtkTreeIter.
Путь — это потенциальный узел. Это расположение в модели, которое может или не может соответствовать узлу в конкретной модели. GtkTreePath можно преобразовать в массив целых чисел без знака или в строку. Строковая форма представляет собой список чисел, разделенных двоеточием. Каждое число относится к смещению на этом уровне. Таким образом, путь 0 относится к корневому узлу, а путь 2:4 — к пятому дочернему узлу третьего узла.
В отличие от этого, GtkTreeIter — это ссылка на конкретный узел в конкретной модели. Это универсальная структура с целым числом и тремя универсальными указателями. Эти значения заполняются моделью специфичным для модели способом. Путь можно преобразовать в итератор, вызвав gtk_tree_model_get_iter(). Эти итераторы — основной способ доступа к модели и похожи на итераторы, используемые в GtkTextBuffer. Они обычно статически выделяются в стеке и используются только в течение короткого времени. Интерфейс модели определяет набор операций, использующих их для навигации по модели.
Ожидается, что модели заполнят итератор частными данными. Например, модель GtkListStore, которая внутренне представляет собой простой связанный список, хранит узел списка в одном из указателей. Модель GtkTreeModelSort хранит массив и смещение в двух указателях. Кроме того, есть поле целого типа. Это поле обычно заполняется уникальным значением для каждой модели. Это значение используется для обнаружения ошибок, возникающих при использовании недопустимых итераторов с моделью.
Жизненный цикл итератора на первый взгляд может показаться немного запутанным. Итераторы должны всегда быть валидными, пока модель не изменится (и не сгенерирует сигнал). Модель считается владельцем всех активных итераторов, и с точки зрения пользователя ничего не нужно делать для их освобождения. Кроме того, некоторые модели гарантируют, что итератор остается валидным, пока узел, на который он ссылается, остается валидным (прежде всего, GtkTreeStore и GtkListStore). Хотя в целом это неинтересно, так как всегда нужно учитывать случай, когда итераторы не сохраняются после сигнала, были сделаны некоторые очень важные улучшения производительности в модели сортировки. В результате был добавлен флаг GTK_TREE_MODEL_ITERS_PERSIST для указания этого поведения.
Для демонстрации некоторых распространенных операций модели приведены примеры. Первый пример демонстрирует три способа получения итератора в позиции 3:2:5. Хотя первый показанный метод проще, второй намного более распространён, поскольку вы часто получаете пути от обратных вызовов.
Получение GtkTreeIter
Этот второй пример демонстрирует быстрый способ итерирования по списку и извлечения строки и целого числа из каждой строки. Функция populate_model() , используемая ниже, не показана, так как она специфична для GtkListStore. Сведения о том, как написать такую функцию, см. в документации по GtkListStore.
Чтение данных из GtkTreeModel
// Three ways of getting the iter pointing to the location
GtkTreePath *path;
GtkTreeIter iter;
GtkTreeIter parent_iter;
// get the iterator from a string
gtk_tree_model_get_iter_from_string (model,
&iter,
"3:2:5");
// get the iterator from a path
path = gtk_tree_path_new_from_string ("3:2:5");
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_path_free (path);
// walk the tree to find the iterator
gtk_tree_model_iter_nth_child (model, &iter,
NULL, 3);
parent_iter = iter;
gtk_tree_model_iter_nth_child (model, &iter,
&parent_iter, 2);
parent_iter = iter;
gtk_tree_model_iter_nth_child (model, &iter,
&parent_iter, 5);Интерфейс GtkTreeModel содержит два метода для подсчета ссылок: gtk_tree_model_ref_node() и gtk_tree_model_unref_node(). Эти два метода необязательны для реализации. Подсчёт ссылок предназначен для того, чтобы представления могли сообщать моделям, когда узлы отображаются. GtkTreeView возьмёт ссылку на узел, когда он будет виден, что означает, что узел находится либо на верхнем уровне, либо развёрнут. Отображение узла не означает, что узел в настоящее время непосредственно виден пользователю в области просмотра. Основываясь на этой схеме подсчета ссылок, например, модель кэширования может решить, кэшировать ли узел или нет, в зависимости от количества ссылок. Модель, основанная на файловой системе, не захочет хранить всю иерархию файлов в памяти, а только те папки, которые в данный момент развернуты во всех текущих представлениях.
При работе с подсчетом ссылок необходимо учитывать следующие правила:
Никогда не создавайте ссылку на узел без ссылки на его родителя. Это означает, что все родительские узлы сохраненного узла также должны быть сохранены.
Ссылки на удаленный узел не освобождаются. Это невозможно, поскольку узел уже был удален к тому моменту, когда принимается сигнал о удалении строки.
Модели не обязаны генерировать сигнал для строк, ни один из их потомков которых не сохранен. Другими словами, сигналы требуются только для уровней, на которых узлы сохранены. Однако для корневого уровня сигналы должны генерироваться всегда (хотя корневой уровень всегда сохранен, когда к нему прикреплено любое представление).
Функции
GtkTreeModelForeachFunc ()
gboolean (*GtkTreeModelForeachFunc) (GtkTreeModel *model,GtkTreePath *path,GtkTreeIter *iter,gpointer data);
Тип обратного вызова, передаваемого в gtk_tree_model_foreach() для итерации по строкам в модели дерева.
Параметры
model | итерируемая GtkTreeModel | |
path | текущий GtkTreePath | |
iter | текущий GtkTreeIter | |
data | Данные пользователя, переданные в | [closure] |
Возвращает
TRUE для остановки итерации, FALSE для продолжения
gtk_tree_path_new ()
GtkTreePath *
gtk_tree_path_new (void); Создаёт новый GtkTreePath. Этот объект ссылается на строку.
Возвращает
Созданный GtkTreePath.
gtk_tree_path_new_from_string ()
GtkTreePath *
gtk_tree_path_new_from_string (const gchar *path); Создаёт новый GtkTreePath, инициализированный path .
path ожидается в виде списка чисел, разделённых двоеточиями. Например, строка “10:4:0” создаст путь глубиной 3, указывающий на 11-го потомка корневого узла, 5-го потомка этого 11-го узла и 1-го потомка этого 5-го узла. Если передана некорректная строка пути, возвращается NULL.
Параметры
path | Строковое представление пути |
Возвращает
Созданный GtkTreePath или NULL
gtk_tree_path_new_from_indices ()
GtkTreePath * gtk_tree_path_new_from_indices (gint first_index,...);
Создаёт новый путь с first_index и varargs в качестве индексов.
Параметры
first_index | первое целое число | |
... | список целых чисел, завершаемых -1 |
Возвращает
Созданный GtkTreePath
С: 2.2
gtk_tree_path_new_from_indicesv ()
GtkTreePath * gtk_tree_path_new_from_indicesv (gint *indices,gsize length);
Создаёт новый путь с указанным массивом indices индексов length .
[rename-to gtk_tree_path_new_from_indices]
Параметры
indices | массив индексов. | [array length=length] |
length | длина массива |
Возвращает
Созданный GtkTreePath
С: 3.12
gtk_tree_path_to_string ()
gchar *
gtk_tree_path_to_string (GtkTreePath *path); Генерирует строковое представление пути.
Эта строка представляет собой список чисел, разделённых символом “:”. Например, “4:10:0:3” является допустимым результатом этой функции.
Параметры
path |
Возвращает
Новая выделенная строка. Должна быть освобождена с помощью g_free().
gtk_tree_path_new_first ()
GtkTreePath *
gtk_tree_path_new_first (void); Создаёт новый GtkTreePath.
Строковое представление этого пути равно “0”.
Возвращает
Новый GtkTreePath
gtk_tree_path_append_index ()
void gtk_tree_path_append_index (GtkTreePath *path,gint index_);
Добавляет новый индекс в путь.
В результате глубина пути увеличивается.
Параметры
path | ||
index_ | индекс |
gtk_tree_path_prepend_index ()
void gtk_tree_path_prepend_index (GtkTreePath *path,gint index_);
Добавляет новый индекс в начало пути.
В результате глубина пути увеличивается.
Параметры
path | ||
index_ | индекс |
gtk_tree_path_get_depth ()
gint
gtk_tree_path_get_depth (GtkTreePath *path); Возвращает текущую глубину path .
Параметры
path |
Возвращает
Глубина path
gtk_tree_path_get_indices ()
gint *
gtk_tree_path_get_indices (GtkTreePath *path); Возвращает текущие индексы path .
Это массив целых чисел, каждый из которых представляет узел в дереве. Это значение не должно освобождаться.
Длина массива может быть получена с помощью gtk_tree_path_get_depth().
[skip]
Параметры
path |
Возвращает
Текущие индексы или NULL
gtk_tree_path_get_indices_with_depth ()
gint * gtk_tree_path_get_indices_with_depth (GtkTreePath *path,gint *depth);
Возвращает текущие индексы path.
Это массив целых чисел, каждый из которых представляет узел в дереве. Он также возвращает количество элементов в массиве. Массив не должен освобождаться.
[rename-to gtk_tree_path_get_indices]
Параметры
path | ||
depth | место возврата для количества элементов, возвращаемых в целочисленном массиве, или | [out][allow-none] |
Возвращает
Текущие индексы, или NULL.
[array length=depth][transfer none]
С версии: 3.0
gtk_tree_path_free ()
void
gtk_tree_path_free (GtkTreePath *path); Освобождает path. Если path является NULL, он просто возвращается.
Параметры
path | a GtkTreePath. | [allow-none] |
gtk_tree_path_copy ()
GtkTreePath *
gtk_tree_path_copy (const GtkTreePath *path); Создает новый GtkTreePath как копию path.
Параметры
path |
Возвращает
новый GtkTreePath
gtk_tree_path_compare ()
gint gtk_tree_path_compare (const GtkTreePath *a,const GtkTreePath *b);
Сравнивает два пути.
Если a предшествует b в дереве, то возвращается -1. Если b предшествует a, то возвращается 1. Если два узла равны, то возвращается 0.
Параметры
a | ||
b | a GtkTreePath для сравнения |
Возвращает
относительные позиции a и b
gtk_tree_path_next ()
void
gtk_tree_path_next (GtkTreePath *path); Перемещает path для указания на следующий узел на текущей глубине.
Параметры
path |
gtk_tree_path_prev ()
gboolean
gtk_tree_path_prev (GtkTreePath *path); Перемещает path для указания на предыдущий узел на текущей глубине, если он существует.
Параметры
path |
Возвращает
TRUE если path имеет предыдущий узел, и перемещение было выполнено
gtk_tree_path_up ()
gboolean
gtk_tree_path_up (GtkTreePath *path); Перемещает path для указания на его родительский узел, если он имеет родителя.
Параметры
path |
Возвращает
TRUE если path имеет родителя, и перемещение было выполнено
gtk_tree_path_down ()
void
gtk_tree_path_down (GtkTreePath *path); Перемещает path для указания на первого потомка текущего пути.
Параметры
path |
gtk_tree_path_is_ancestor ()
gboolean gtk_tree_path_is_ancestor (GtkTreePath *path,GtkTreePath *descendant);
Возвращает TRUE если descendant является потомком path.
Параметры
path | ||
descendant | another GtkTreePath |
Возвращает
TRUE если descendant содержится внутри path
gtk_tree_path_is_descendant ()
gboolean gtk_tree_path_is_descendant (GtkTreePath *path,GtkTreePath *ancestor);
Возвращает TRUE если path является потомком ancestor.
Параметры
path | ||
ancestor | another GtkTreePath |
Возвращает
TRUE если ancestor содержит path где-то ниже
gtk_tree_row_reference_new ()
GtkTreeRowReference * gtk_tree_row_reference_new (GtkTreeModel *model,GtkTreePath *path);
Создает ссылку на строку на основе path.
Эта ссылка будет указывать на узел, на который указывает path, пока он существует. Любые изменения, происходящие в model, распространяются, и путь обновляется соответствующим образом. Если path не является допустимым путем в model, то возвращается NULL.
Параметры
model | ||
path | a valid GtkTreePath to monitor |
Возвращает
вновь выделенный GtkTreeRowReference, или NULL
gtk_tree_row_reference_new_proxy ()
GtkTreeRowReference * gtk_tree_row_reference_new_proxy (GObject *proxy,GtkTreeModel *model,GtkTreePath *path);
Вам не нужно использовать эту функцию.
Создаёт ссылку на строку, основанную на path.
Эта ссылка будет продолжать указывать на узел, на который указывает path, пока он существует. Если path не является допустимым путём в model, то возвращается NULL. Однако, в отличие от ссылок, созданных с помощью gtk_tree_row_reference_new(), она не отслеживает изменения в модели. Создатель ссылки на строку должен делать это явно, используя gtk_tree_row_reference_inserted(), gtk_tree_row_reference_deleted(), gtk_tree_row_reference_reordered().
Эти функции должны вызываться ровно один раз на прокси при каждом срабатывании соответствующего сигнала в модели. Это единственный вызов обновляет все ссылки на строки для этого прокси. Поскольку встроенные объекты GTK+, такие как GtkTreeView, уже используют этот механизм внутри, использование их в качестве объекта-прокси приведёт к непредсказуемым результатам. Кроме того, передача одного и того же объекта как model и proxy не работает из-за особенностей внутренней реализации.
Этот тип ссылки на строку предназначен в первую очередь для структур, которым необходимо тщательно отслеживать, когда ссылка на строку обновляется, и обычно не требуется большинству приложений.
Параметры
proxy | прокси GObject | |
model | ||
path | допустимый GtkTreePath для отслеживания |
Возвращаемое значение
только что выделенная ссылка GtkTreeRowReference, или NULL
gtk_tree_row_reference_get_model ()
GtkTreeModel *
gtk_tree_row_reference_get_model (GtkTreeRowReference *reference); Возвращает модель, которую отслеживает ссылка на строку.
Параметры
reference |
Возвращаемое значение
модель.
[transfer none]
Since: 2.8
gtk_tree_row_reference_get_path ()
GtkTreePath *
gtk_tree_row_reference_get_path (GtkTreeRowReference *reference); Возвращает путь, на который в настоящее время указывает ссылка на строку, или NULL если путь, на который она указывает, больше недоступен.
Параметры
reference |
Возвращаемое значение
текущий путь, или NULL.
[nullable][transfer full]
gtk_tree_row_reference_valid ()
gboolean
gtk_tree_row_reference_valid (GtkTreeRowReference *reference); Возвращает TRUE, если reference не NULL и ссылается на текущий допустимый путь.
Параметры
reference | a GtkTreeRowReference, или | [allow-none] |
Возвращаемое значение
TRUE если reference указывает на допустимый путь
gtk_tree_row_reference_free ()
void
gtk_tree_row_reference_free (GtkTreeRowReference *reference); Освобождает reference. reference может быть NULL
Параметры
reference | a GtkTreeRowReference, или | [allow-none] |
gtk_tree_row_reference_copy ()
GtkTreeRowReference *
gtk_tree_row_reference_copy (GtkTreeRowReference *reference); Копирует GtkTreeRowReference.
Параметры
reference |
Возвращаемое значение
копию reference
Since: 2.2
gtk_tree-row-reference-inserted ()
void gtk_tree_row_reference_inserted (GObject *proxy,GtkTreePath *path);
Позволяет набору ссылок на строки, созданных с помощью gtk_tree_row_reference_new_proxy(), узнать, что модель выпустила сигнал “row-inserted”.
Параметры
proxy | a GObject | |
path | позиция строки, которая была вставлена |
gtk_tree-row-reference-deleted ()
void gtk_tree_row_reference_deleted (GObject *proxy,GtkTreePath *path);
Позволяет набору ссылок на строки, созданных с помощью gtk_tree_row_reference_new_proxy(), узнать, что модель выпустила сигнал “row-deleted”.
Параметры
proxy | a GObject | |
path | позиция пути, который был удалён |
gtk_tree-row-reference-reordered ()
void gtk_tree_row_reference_reordered (GObject *proxy,GtkTreePath *path,GtkTreeIter *iter,gint *new_order);
Позволяет набору ссылок на строки, созданных с помощью gtk_tree_row_reference_new_proxy(), узнать, что модель выпустила сигнал “rows-reordered”.
[skip]
Параметры
proxy | a GObject | |
path | родительский путь сигнала reordered | |
iter | итератор, указывающий на родителя reordered | |
new_order | новый порядок строк. | [array] |
gtk_tree_iter_copy ()
GtkTreeIter *
gtk_tree_iter_copy (GtkTreeIter *iter); Создаёт динамически выделенный итератор дерева как копию iter.
Эта функция не предназначена для использования в приложениях, поскольку вы можете просто скопировать структуры по значению (GtkTreeIter new_iter = iter;). Вы должны освободить этот итератор с помощью gtk_tree_iter_free().
Параметры
iter |
Возвращает
новую копию iter
gtk_tree_iter_free ()
void
gtk_tree_iter_free (GtkTreeIter *iter); Освобождает итератор, выделенный функцией gtk_tree_iter_copy().
Эта функция в основном используется для языковых библиотек.
Параметры
iter | динамически выделенный итератор дерева |
gtk_tree_model_get_flags ()
GtkTreeModelFlags
gtk_tree_model_get_flags (GtkTreeModel *tree_model); Возвращает набор флагов, поддерживаемых этим интерфейсом.
Флаги представляют собой битовую комбинацию GtkTreeModelFlags. Поддерживаемые флаги не должны изменяться в течение жизненного цикла tree_model.
Параметры
tree_model |
Возвращает
поддерживаемые флаги
gtk_tree_model_get_n_columns ()
gint
gtk_tree_model_get_n_columns (GtkTreeModel *tree_model); Возвращает количество столбцов, поддерживаемых tree_model.
Параметры
tree_model |
Возвращает
количество столбцов
gtk_tree_model_get_column_type ()
GType gtk_tree_model_get_column_type (GtkTreeModel *tree_model,gint index_);
Возвращает тип столбца.
Параметры
tree_model | ||
index_ | индекс столбца |
Возвращает
тип столбца
gtk_tree_model_get_iter ()
gboolean gtk_tree_model_get_iter (GtkTreeModel *tree_model,GtkTreeIter *iter,GtkTreePath *path);
Устанавливает iter на допустимый итератор, указывающий на path. Если path не существует, iter устанавливается на недопустимый итератор, и возвращается FALSE.
Параметры
tree_model | ||
iter | неинициализированный GtkTreeIter. | [out] |
path | the GtkTreePath |
Возвращает
TRUE, если iter был установлен
gtk_tree_model_get_iter_from_string ()
gboolean gtk_tree_model_get_iter_from_string (GtkTreeModel *tree_model,GtkTreeIter *iter,const gchar *path_string);
Устанавливает iter на допустимый итератор, указывающий на path_string, если он существует. В противном случае, iter остаётся невалидным, и возвращается FALSE.
Параметры
tree_model | ||
iter | неинициализированный GtkTreeIter. | [out] |
path_string | строковое представление GtkTreePath |
Возвращает
TRUE, если iter был установлен
gtk_tree_model_get_iter_first ()
gboolean gtk_tree_model_get_iter_first (GtkTreeModel *tree_model,GtkTreeIter *iter);
Инициализирует iter первым итератором в дереве (тем, что находится по пути "0") и возвращает TRUE. Возвращает FALSE, если дерево пусто.
Параметры
tree_model | ||
iter | неинициализированный GtkTreeIter. | [out] |
Возвращает
TRUE, если iter был установлен
gtk_tree_model_get_path ()
GtkTreePath * gtk_tree_model_get_path (GtkTreeModel *tree_model,GtkTreeIter *iter);
Возвращает новый GtkTreePath, на который ссылается iter.
Этот путь следует освободить с помощью gtk_tree_path_free().
Параметры
tree_model | ||
iter | the GtkTreeIter |
Возвращает
новый GtkTreePath
gtk_tree_model_get_value ()
void gtk_tree_model_get_value (GtkTreeModel *tree_model,GtkTreeIter *iter,gint column,GValue *value);
Инициализирует и устанавливает value в значение по адресу column.
После завершения работы с value, необходимо вызвать g_value_unset(), чтобы освободить выделенную память.
Параметры
tree_model | объект GtkTreeModel | |
iter | итератор GtkTreeIter | |
column | номер столбца для поиска значения | |
value | пустой GValue для установки. | [out][transfer none] |
gtk_tree_model_iter_next ()
gboolean gtk_tree_model_iter_next (GtkTreeModel *tree_model,GtkTreeIter *iter);
Устанавливает iter на узел, следующий за ним на текущем уровне.
Если следующего iter нет, возвращается FALSE, и iter устанавливается в невалидное состояние.
Параметры
tree_model | объект GtkTreeModel | |
iter | итератор GtkTreeIter. | [in] |
Возвращает
TRUE если iter был изменён на следующий узел
gtk_tree_model_iter_previous ()
gboolean gtk_tree_model_iter_previous (GtkTreeModel *tree_model,GtkTreeIter *iter);
Устанавливает iter на предыдущий узел на текущем уровне.
Если предыдущего iter нет, возвращается FALSE, и iter устанавливается в невалидное состояние.
Параметры
tree_model | объект GtkTreeModel | |
iter | итератор GtkTreeIter. | [in] |
Возвращает
TRUE если iter был изменён на предыдущий узел
С версии: 3.0
gtk_tree_model_iter_children ()
gboolean gtk_tree_model_iter_children (GtkTreeModel *tree_model,GtkTreeIter *iter,GtkTreeIter *parent);
Устанавливает iter на первый дочерний узел parent.
Если у parent нет дочерних узлов, возвращается FALSE, и iter устанавливается в невалидное состояние. parent останется валидным узлом после вызова этой функции.
Если parent является NULL, возвращает первый узел, эквивалентно gtk_tree_model_get_iter_first (tree_model, iter);
Параметры
tree_model | объект GtkTreeModel | |
iter | новый итератор GtkTreeIter, который будет установлен на дочерний узел. | [out] |
parent | итератор GtkTreeIter или | [allow-none] |
Возвращает
TRUE, если iter был установлен на первый дочерний узел
gtk_tree_model_iter_has_child ()
gboolean gtk_tree_model_iter_has_child (GtkTreeModel *tree_model,GtkTreeIter *iter);
Возвращает TRUE, если iter имеет дочерние узлы, FALSE в противном случае.
Параметры
tree_model | объект GtkTreeModel | |
iter | итератор GtkTreeIter для проверки наличия дочерних узлов |
Возвращает
TRUE если iter имеет дочерние узлы
gtk_tree_model_iter_n_children ()
gint gtk_tree_model_iter_n_children (GtkTreeModel *tree_model,GtkTreeIter *iter);
Возвращает количество дочерних узлов у iter.
В качестве специального случая, если iter является NULL, возвращается количество узлов верхнего уровня.
Параметры
tree_model | объект GtkTreeModel | |
iter | итератор GtkTreeIter или | [allow-none] |
Возвращает
количество дочерних узлов у iter
gtk_tree_model_iter_nth_child ()
gboolean gtk_tree_model_iter_nth_child (GtkTreeModel *tree_model,GtkTreeIter *iter,GtkTreeIter *parent,gint n);
Устанавливает iter в качестве дочернего элемента parent, используя указанный индекс.
Первый индекс — 0. Если n слишком велик или у parent нет дочерних элементов, iter устанавливается на недействительный итератор, и возвращается FALSE. parent останется действительным узлом после вызова этой функции. В качестве специального случая, если parent равно NULL, устанавливается корневой узел с индексом n.
Параметры
tree_model | ||
iter | the GtkTreeIter для установки n-го дочернего элемента. | [out] |
parent | the GtkTreeIter для получения дочернего элемента, или | [allow-none] |
n | индекс искомого дочернего элемента |
Возвращает
TRUE, если у parent есть n-й дочерний элемент
gtk_tree_model_iter_parent ()
gboolean gtk_tree_model_iter_parent (GtkTreeModel *tree_model,GtkTreeIter *iter,GtkTreeIter *child);
Устанавливает iter в качестве родительского элемента child.
Если child находится на верхнем уровне и не имеет родительского элемента, то iter устанавливается на недействительный итератор и возвращается FALSE. child останется действительным узлом после вызова этой функции.
iter будет инициализирован до выполнения поиска, поэтому child и iter не могут указывать на одну и ту же область памяти.
Параметры
tree_model | ||
iter | новый GtkTreeIter для установки родительского элемента. | [out] |
child | the GtkTreeIter |
Возвращает
TRUE, если iter установлен как родитель child
gtk_tree_model_get_string_from_iter ()
gchar * gtk_tree_model_get_string_from_iter (GtkTreeModel *tree_model,GtkTreeIter *iter);
Генерирует строковое представление итератора.
Эта строка представляет собой список чисел, разделённых двоеточиями. Например, «4:10:0:3» — допустимое значение для этой строки.
Параметры
tree_model | ||
iter |
Возвращает
динамически выделенную строку. Должна быть освобождена с помощью g_free().
Since: 2.2
gtk_tree_model_ref_node ()
void gtk_tree_model_ref_node (GtkTreeModel *tree_model,GtkTreeIter *iter);
Позволяет дереву ссылаться на узел.
Это необязательный метод для моделей. Модели могут игнорировать этот вызов, так как он существует в первую очередь для повышения производительности.
Функция предназначена в первую очередь для того, чтобы представления могли сообщать кэширующим моделям о отображении узлов (и, следовательно, о том, нужно ли кэшировать этот узел). Отображение означает, что узел находится в раскрытом ветвлении, независимо от того, виден ли узел в данный момент в области просмотра. Например, модель на основе файловой системы не хочет хранить всю файловую иерархию в памяти, только те разделы, которые в данный момент отображаются каждым текущим представлением.
Модель должна быть в состоянии получить итератор независимо от его состояния ссылок.
Параметры
tree_model | ||
iter | the GtkTreeIter |
gtk_tree_model_unref_node ()
void gtk_tree_model_unref_node (GtkTreeModel *tree_model,GtkTreeIter *iter);
Позволяет дереву прекратить ссылку на узел.
Это необязательный метод для моделей. Модели могут игнорировать этот вызов, так как он существует в первую очередь для повышения производительности. Более подробная информация об этом содержится в gtk_tree_model_ref_node().
Обратите внимание, что удалённые узлы не освобождаются.
Параметры
tree_model | ||
iter | the GtkTreeIter |
gtk_tree_model_get ()
void gtk_tree_model_get (GtkTreeModel *tree_model,GtkTreeIter *iter,...);
Получает значения одной или нескольких ячеек в строке, на которую ссылается iter. Список аргументов должен содержать целочисленные номера столбцов, каждый номер столбца, за которым следует место для хранения получаемого значения. Список завершается -1. Например, чтобы получить значение из столбца 0 с типом G_TYPE_STRING, вы напишите: gtk_tree_model_get (model, iter, 0, &place_string_here, -1), где place_string_here — gchararray для заполнения строкой.
Значения с типом G_TYPE_OBJECT должны быть освобождены, значения с типом G_TYPE_STRING или G_TYPE_BOXED должны быть освобождены. Другие значения передаются по значению.
Параметры
tree_model | ||
iter | строка в | |
... | пары номер столбца/место возврата значения, завершающиеся -1 |
gtk_tree_model_get_valist ()
void gtk_tree_model_get_valist (GtkTreeModel *tree_model,GtkTreeIter *iter,va_list var_args);
См. gtk_tree_model_get(), этот вариант принимает va_list для использования языковыми связками.
Параметры
tree_model | ||
iter | строка в | |
var_args | va_list пар столбец/место возврата значения |
gtk_tree_model_foreach ()
void gtk_tree_model_foreach (GtkTreeModel *model,GtkTreeModelForeachFunc func,gpointer user_data);
Вызывает функцию func для каждого узла в модели в порядке обхода в глубину.
Если func возвращает TRUE, то обход дерева прекращается, и gtk_tree_model_foreach() возвращает значение.
Параметры
model | ||
func | функция, которая будет вызываться для каждой строки. | [scope call] |
user_data | данные пользователя, передаваемые в |
gtk_tree_model_row_changed ()
void gtk_tree_model_row_changed (GtkTreeModel *tree_model,GtkTreePath *path,GtkTreeIter *iter);
Вызывает сигнал “row-changed” для tree_model.
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на изменённую строку | |
iter | корректный GtkTreeIter, указывающий на изменённую строку |
gtk_tree_model_row_inserted ()
void gtk_tree_model_row_inserted (GtkTreeModel *tree_model,GtkTreePath *path,GtkTreeIter *iter);
Вызывает сигнал “row-inserted” для tree_model.
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на вставленную строку | |
iter | корректный GtkTreeIter, указывающий на вставленную строку |
gtk_tree_model_row_has_child_toggled ()
void gtk_tree_model_row_has_child_toggled (GtkTreeModel *tree_model,GtkTreePath *path,GtkTreeIter *iter);
Вызывает сигнал “row-has-child-toggled” для tree_model. Модели должны вызывать его после изменения состояния дочернего узла.
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на изменённую строку | |
iter | корректный GtkTreeIter, указывающий на изменённую строку |
gtk_tree_model_row_deleted ()
void gtk_tree_model_row_deleted (GtkTreeModel *tree_model,GtkTreePath *path);
Вызывает сигнал “row-deleted” для tree_model.
Модели должны вызывать его после удаления строки. Указанное местоположение path должно быть местоположением, где строка была ранее. Оно может быть больше недоступным.
Удалённые узлы не освобождаются, это означает, что все имеющиеся ссылки на удалённый узел не должны быть освобождены.
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на предыдущее местоположение удалённой строки |
gtk_tree_model_rows_reordered ()
void gtk_tree_model_rows_reordered (GtkTreeModel *tree_model,GtkTreePath *path,GtkTreeIter *iter,gint *new_order);
Вызывает сигнал “rows-reordered” для tree_model.
Модели должны вызывать его при переупорядочении строк.
[skip]
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на узел дерева, чьи дочерние элементы были переупорядочены | |
iter | корректный GtkTreeIter, указывающий на узел, чьи дочерние элементы были переупорядочены, или | |
new_order | массив целых чисел, отображающий текущее положение каждого дочернего элемента в его старом положении до переупорядочения, т. е. |
gtk_tree_model_rows_reordered_with_length ()
void gtk_tree_model_rows_reordered_with_length (GtkTreeModel *tree_model,GtkTreePath *path,GtkTreeIter *iter,gint *new_order,gint length);
Вызывает сигнал “rows-reordered” для tree_model.
Модели должны вызывать его при переупорядочении строк.
[rename-to gtk_tree_model_rows_reordered]
Параметры
tree_model | ||
path | a GtkTreePath, указывающий на узел дерева, чьи дочерние элементы были переупорядочены | |
iter | корректный GtkTreeIter, указывающий на узел, чьи дочерние элементы были переупорядочены, или | [allow-none] |
new_order | массив целых чисел, отображающий текущее положение каждого дочернего элемента в его старом положении до переупорядочения, т. е. | [array length=length] |
length | длина массива |
Since: 3.10
Типы и значения
GtkTreeModel
typedef struct _GtkTreeModel GtkTreeModel;
Структура GtkTreeIter
struct GtkTreeIter {
gint stamp;
gpointer user_data;
gpointer user_data2;
gpointer user_data3;
};
Структура GtkTreeIter — основная для доступа к GtkTreeModel. Модели должны помещать уникальное целое число в член stamp и данные, специфичные для модели, в три члена user_data.
Члены
gint | уникальный отметка для выявления недействительных итераторов | |
gpointer | данные, специфичные для модели | |
gpointer | данные, специфичные для модели | |
gpointer | данные, специфичные для модели |
GtkTreePath
typedef struct _GtkTreePath GtkTreePath;
GtkTreeRowReference
typedef struct _GtkTreeRowReference GtkTreeRowReference;
GtkTreeRowReference отслеживает изменения модели, чтобы всегда ссылаться на одну и ту же строку (GtkTreePath ссылается на позицию, а не на фиксированную строку). Создайте новый GtkTreeRowReference с помощью gtk_tree_row_reference_new().
Структура GtkTreeModelIface
struct GtkTreeModelIface {
/* Signals */
void (* row_changed) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_inserted) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_has_child_toggled) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter);
void (* row_deleted) (GtkTreeModel *tree_model,
GtkTreePath *path);
void (* rows_reordered) (GtkTreeModel *tree_model,
GtkTreePath *path,
GtkTreeIter *iter,
gint *new_order);
/* Virtual Table */
GtkTreeModelFlags (* get_flags) (GtkTreeModel *tree_model);
gint (* get_n_columns) (GtkTreeModel *tree_model);
GType (* get_column_type) (GtkTreeModel *tree_model,
gint index_);
gboolean (* get_iter) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreePath *path);
GtkTreePath *(* get_path) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void (* get_value) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
gint column,
GValue *value);
gboolean (* iter_next) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean (* iter_previous) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean (* iter_children) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent);
gboolean (* iter_has_child) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gint (* iter_n_children) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
gboolean (* iter_nth_child) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *parent,
gint n);
gboolean (* iter_parent) (GtkTreeModel *tree_model,
GtkTreeIter *iter,
GtkTreeIter *child);
void (* ref_node) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
void (* unref_node) (GtkTreeModel *tree_model,
GtkTreeIter *iter);
};
Члены
| Сигнал, генерируемый при изменении строки в модели. | |
| Сигнал, генерируемый при вставке новой строки в модель. | |
| Сигнал, генерируемый при получении строки первым дочерним элементом или потере последнего дочернего элемента. | |
| Сигнал, генерируемый при удалении строки. | |
| Сигнал, генерируемый при переупорядочивании дочерних элементов узла в GtkTreeModel. | |
| Получение GtkTreeModelFlags, поддерживаемых этим интерфейсом. | |
| Получение количества столбцов, поддерживаемых моделью. | |
| Получение типа столбца. | |
| Устанавливает iter на действительный итератор, указывающий на путь. | |
| Получение нового GtkTreePath, ссылающегося на iter. | |
| Инициализирует и устанавливает value для столбца. | |
| Устанавливает iter на узел, следующий за ним на текущем уровне. | |
| Устанавливает iter на предыдущий узел на текущем уровне. | |
| Устанавливает iter на первый дочерний элемент родителя. | |
|
| |
| Получение количества дочерних элементов, имеемых iter. | |
| Устанавливает iter на дочерний элемент родителя, используя заданный индекс. | |
| Устанавливает iter на родителя child. | |
| Разрешает дереву ссылаться на узел. | |
| Разрешает дереву удалить ссылку на узел. |
Перечисление GtkTreeModelFlags
Эти флаги указывают различные свойства GtkTreeModel.
Они возвращаются функцией gtk_tree_model_get_flags() и должны быть статическими в течение всего времени существования объекта. Более подробное описание GTK_TREE_MODEL_ITERS_PERSIST можно найти в обзоре этого раздела.
Члены
GTK_TREE_MODEL_ITERS_PERSIST | итераторы сохраняются при всех сигналах, генерируемых деревом | |
GTK_TREE_MODEL_LIST_ONLY | модель представляет только список и никогда не имеет дочерних элементов |
Подробности сигналов
Сигнал “row-changed”
void user_function (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
Этот сигнал излучается, когда строка в модели изменена.
Параметры
tree_model | модель GtkTreeModel, на которой излучается сигнал | |
path | GtkTreePath, определяющий изменённую строку | |
iter | действительный GtkTreeIter, указывающий на изменённую строку | |
user_data | пользовательские данные, установленные при подключении обработчика сигналов. |
Флаги: Run Last
Сигнал “row-deleted”
void user_function (GtkTreeModel *tree_model, GtkTreePath *path, gpointer user_data)
Этот сигнал излучается, когда строка была удалена.
Обратите внимание, что итератор не передаётся обработчику сигналов, так как строка уже удалена.
Этот метод должен вызываться моделями после удаления строки. Позиция, на которую указывает path, должна быть позицией, где строка находилась ранее. Она может больше не быть действительной.
Параметры
tree_model | модель GtkTreeModel, на которой излучается сигнал | |
path | GtkTreePath, определяющий строку | |
user_data | пользовательские данные, установленные при подключении обработчика сигналов. |
Флаги: Run First
Сигнал “row-has-child-toggled”
void user_function (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
Этот сигнал излучается, когда строка получила первую дочернюю строку или потеряла последнюю дочернюю строку.
Параметры
tree_model | модель GtkTreeModel, на которой излучается сигнал | |
path | GtkTreePath, определяющий строку | |
iter | действительный GtkTreeIter, указывающий на строку | |
user_data | пользовательские данные, установленные при подключении обработчика сигналов. |
Флаги: Run Last
Сигнал “row-inserted”
void user_function (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data)
Этот сигнал излучается, когда новая строка была вставлена в модель.
Обратите внимание, что строка может быть ещё пустой на этом этапе, так как распространённым способом является сначала вставка пустой строки, а затем заполнение её желаемыми значениями.
Параметры
tree_model | модель GtkTreeModel, на которой излучается сигнал | |
path | GtkTreePath, определяющий новую строку | |
iter | действительный GtkTreeIter, указывающий на новую строку | |
user_data | пользовательские данные, установленные при подключении обработчика сигналов. |
Флаги: Run First
Сигнал “rows-reordered”
void user_function (GtkTreeModel *tree_model, GtkTreePath *path, GtkTreeIter *iter, gpointer new_order, gpointer user_data)
Этот сигнал излучается, когда дети узла в GtkTreeModel были переупорядочены.
Обратите внимание, что этот сигнал не излучается при переупорядочении строк с помощью DND, так как это реализуется путём удаления и повторной вставки строки.
[skip]
Параметры
tree_model | модель GtkTreeModel, на которой излучается сигнал | |
path | GtkTreePath, определяющий узел дерева, чьи дети были переупорядочены | |
iter | действительный GtkTreeIter, указывающий на узел, чьи дети были переупорядочены, или | |
new_order | массив целых чисел, отображающий текущую позицию каждого ребёнка на его старую позицию до переупорядочения, т.е. | |
user_data | пользовательские данные, установленные при подключении обработчика сигналов. |
Флаги: Run First
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.24/GtkTreeModel.html