Spec-Zone.ru › GTK 3.20

GtkTreeModel

GtkTreeModel — Деревовидный интерфейс, используемый GtkTreeView

Функции

gboolean (*GtkTreeModelForeachFunc) ()
GtkTreePath * gtk_tree_path_new ()
GtkTreePath * gtk_tree_path_new_from_string ()
GtkTreePath * gtk_tree_path_new_from_indices ()
GtkTreePath * gtk_tree_path_new_from_indicesv ()
gchar * gtk_tree_path_to_string ()
GtkTreePath * gtk_tree_path_new_first ()
void gtk_tree_path_append_index ()
void gtk_tree_path_prepend_index ()
gint gtk_tree_path_get_depth ()
gint * gtk_tree_path_get_indices ()
gint * gtk_tree_path_get_indices_with_depth ()
void gtk_tree_path_free ()
GtkTreePath * gtk_tree_path_copy ()
gint gtk_tree_path_compare ()
void gtk_tree_path_next ()
gboolean gtk_tree_path_prev ()
gboolean gtk_tree_path_up ()
void gtk_tree_path_down ()
gboolean gtk_tree_path_is_ancestor ()
gboolean gtk_tree_path_is_descendant ()
GtkTreeRowReference * gtk_tree_row_reference_new ()
GtkTreeRowReference * gtk_tree_row_reference_new_proxy ()
GtkTreeModel * gtk_tree_row_reference_get_model ()
GtkTreePath * gtk_tree_row_reference_get_path ()
gboolean gtk_tree_row_reference_valid ()
void gtk_tree_row_reference_free ()
GtkTreeRowReference * gtk_tree_row_reference_copy ()
void gtk_tree_row_reference_inserted ()
void gtk_tree_row_reference_deleted ()
void gtk_tree_row_reference_reordered ()
GtkTreeIter * gtk_tree_iter_copy ()
void gtk_tree_iter_free ()
GtkTreeModelFlags gtk_tree_model_get_flags ()
gint gtk_tree_model_get_n_columns ()
GType gtk_tree_model_get_column_type ()
gboolean gtk_tree_model_get_iter ()
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

Переданные пользователем данные в gtk_tree_model_foreach().

[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

длина массива indices

Возвращаемое значение

Созданный GtkTreePath

С: 3.12

gtk_tree_path_to_string ()

gchar *
gtk_tree_path_to_string (GtkTreePath *path);

Генерирует строковое представление пути.

Эта строка — это список чисел, разделённых двоеточием. Например, “4:10:0:3” — это допустимое значение для этой строки.

Параметры

path

A GtkTreePath

Возвращаемое значение

Выделенная строка. Должна быть освобождена с помощью 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

a GtkTreePath

index_

индекс

gtk_tree_path_prepend_index ()

void
gtk_tree_path_prepend_index (GtkTreePath *path,
                             gint index_);

Добавляет новый индекс в начало пути.

В результате глубина пути увеличивается.

Параметры

path

a GtkTreePath

index_

индекс

gtk_tree_path_get_depth ()

gint
gtk_tree_path_get_depth (GtkTreePath *path);

Возвращает текущую глубину path.

Параметры

path

a GtkTreePath

Возвращаемое значение

Глубина path

gtk_tree_path_get_indices ()

gint *
gtk_tree_path_get_indices (GtkTreePath *path);

Возвращает текущие индексы path.

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

Длина массива может быть получена с помощью gtk_tree_path_get_depth().

[skip]

Параметры

path

a GtkTreePath

Возвращаемое значение

Текущие индексы или 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

a GtkTreePath

depth

место возврата для количества элементов, возвращаемых в массиве целых чисел, или NULL.

[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

a GtkTreePath

Возвращает

новый GtkTreePath

gtk_tree_path_compare ()

gint
gtk_tree_path_compare (const GtkTreePath *a,
                       const GtkTreePath *b);

Сравнивает два пути.

Если a предшествует b в дереве, то возвращается -1. Если b предшествует a, то возвращается 1. Если два узла равны, то возвращается 0.

Параметры

a

a GtkTreePath

b

a GtkTreePath для сравнения

Возвращает

относительные позиции a и b

gtk_tree_path_next ()

void
gtk_tree_path_next (GtkTreePath *path);

Перемещает path для указания на следующий узел на текущей глубине.

Параметры

path

a GtkTreePath

gtk_tree_path_prev ()

gboolean
gtk_tree_path_prev (GtkTreePath *path);

Перемещает path для указания на предыдущий узел на текущей глубине, если он существует.

Параметры

path

a GtkTreePath

Возвращает

TRUE если path имеет предыдущий узел, и перемещение было выполнено

gtk_tree_path_up ()

gboolean
gtk_tree_path_up (GtkTreePath *path);

Перемещает path для указания на его родительский узел, если у него есть родитель.

Параметры

path

a GtkTreePath

Возвращает

TRUE если path имеет родителя, и перемещение было выполнено

gtk_tree_path_down ()

void
gtk_tree_path_down (GtkTreePath *path);

Перемещает path для указания на первого потомка текущего пути.

Параметры

path

a GtkTreePath

gtk_tree_path_is_ancestor ()

gboolean
gtk_tree_path_is_ancestor (GtkTreePath *path,
                           GtkTreePath *descendant);

Возвращает TRUE если descendant является потомком path.

Параметры

path

a GtkTreePath

descendant

еще один GtkTreePath

Возвращает

TRUE если descendant содержится внутри path

gtk_tree_path_is_descendant ()

gboolean
gtk_tree_path_is_descendant (GtkTreePath *path,
                             GtkTreePath *ancestor);

Возвращает TRUE если path является потомком ancestor.

Параметры

path

a GtkTreePath

ancestor

еще один 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

a GtkTreeModel

path

действительный GtkTreePath для отслеживания

Возвращаемое значение

вновь выделенная 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

a proxy GObject

model

a GtkTreeModel

path

действительный GtkTreePath для отслеживания

Возвращаемое значение

вновь выделенная GtkTreeRowReference, или NULL

gtk_tree_row_reference_get_model ()

GtkTreeModel *
gtk_tree_row_reference_get_model (GtkTreeRowReference *reference);

Возвращает модель, которую отслеживает ссылка на строку.

Параметры

reference

a GtkTreeRowReference

Возвращаемое значение

модель.

[transfer none]

С: 2.8

gtk_tree_row_reference_get_path ()

GtkTreePath *
gtk_tree_row_reference_get_path (GtkTreeRowReference *reference);

Возвращает текущий путь, на который указывает ссылка на строку, или NULL, если путь, на который она указывает, больше недействителен.

Параметры

reference

a GtkTreeRowReference

Возвращаемое значение

текущий путь, или NULL.

[nullable][transfer full]

gtk_tree-row-reference-valid ()

gboolean
gtk_tree_row_reference_valid (GtkTreeRowReference *reference);

Возвращает TRUE, если reference не NULL и ссылается на текущий действительный путь.

Параметры

reference

a GtkTreeRowReference, или NULL.

[allow-none]

Возвращаемое значение

TRUE, если reference указывает на действительный путь

gtk_tree_row_reference_free ()

void
gtk_tree_row_reference_free (GtkTreeRowReference *reference);

Освобождает reference. reference может быть NULL

Параметры

reference

a GtkTreeRowReference, или NULL.

[allow-none]

gtk_tree_row_reference_copy ()

GtkTreeRowReference *
gtk_tree_row_reference_copy (GtkTreeRowReference *reference);

Копирует GtkTreeRowReference.

Параметры

reference

a GtkTreeRowReference

Возвращаемое значение

копию reference

С: 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

объект 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

объект GObject

path

родительский путь переупорядоченного элемента

iter

итератор, указывающий на родителя переупорядоченного элемента

new_order

новый порядок строк.

[array]

gtk_tree_iter_copy ()

GtkTreeIter *
gtk_tree_iter_copy (GtkTreeIter *iter);

Создаёт динамически выделенный итератор дерева как копию iter .

Эта функция не предназначена для использования в приложениях, так как вы можете просто скопировать структуры по значению (GtkTreeIter new_iter = iter;). Вы должны освободить этот итератор с помощью gtk_tree_iter_free().

Параметры

iter

объект GtkTreeIter

Возвращает

новую копию 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

объект GtkTreeModel

Возвращает

поддерживаемые флаги

gtk_tree_model_get_n_columns ()

gint
gtk_tree_model_get_n_columns (GtkTreeModel *tree_model);

Возвращает количество столбцов, поддерживаемых tree_model .

Параметры

tree_model

объект GtkTreeModel

Возвращает

количество столбцов

gtk_tree_model_get_column_type ()

GType
gtk_tree_model_get_column_type (GtkTreeModel *tree_model,
                                gint index_);

Возвращает тип столбца.

Параметры

tree_model

объект GtkTreeModel

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

объект GtkTreeModel

iter

неинициализированный GtkTreeIter.

[out]

path

объект 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

объект GtkTreeModel

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

a GtkTreeModel

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

a GtkTreeModel

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

a GtkTreeModel

iter

the 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

a GtkTreeModel

iter

the 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

a GtkTreeModel

iter

the 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

a GtkTreeModel

iter

новый GtkTreeIter, который нужно установить на потомка.

[out]

parent

the GtkTreeIter, или NULL.

[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

a 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

a GtkTreeModel

iter

индекс GtkTreeIter, или NULL.

[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

a GtkTreeModel

iter

индекс GtkTreeIter для установки в n-ый дочерний элемент.

[out]

parent

индекс GtkTreeIter для получения дочернего элемента, или NULL.

[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

a GtkTreeModel

iter

новый GtkTreeIter для установки в родительский элемент.

[out]

child

индекс 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

a GtkTreeModel

iter

индекс GtkTreeIter

Возвращает

новую строку, которую нужно освободить с помощью g_free().

Since: 2.2

gtk_tree_model_ref_node ()

void
gtk_tree_model_ref_node (GtkTreeModel *tree_model,
                         GtkTreeIter *iter);

Позволяет дереву сохранить ссылку на узел.

Это необязательный метод для моделей. Модели могут игнорировать этот вызов, так как он существует в первую очередь для повышения производительности.

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

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

Параметры

tree_model

a GtkTreeModel

iter

индекс GtkTreeIter

gtk_tree_model_unref_node ()

void
gtk_tree_model_unref_node (GtkTreeModel *tree_model,
                           GtkTreeIter *iter);

Разрешает дереву удалить ссылку на узел.

Это необязательный метод для реализации моделями. Более конкретно, модели могут игнорировать этот вызов, поскольку он существует в первую очередь для повышения производительности. Для получения более подробной информации об этом см. gtk_tree_model_ref_node().

Обратите внимание, что удаленные узлы не освобождаются от ссылок.

Параметры

tree_model

a GtkTreeModel

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

a GtkTreeModel

iter

строка в tree_model

...

пары номера столбца и места возврата значения, завершаемые -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

a GtkTreeModel

iter

строка в tree_model

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

a GtkTreeModel

func

функция, которая должна вызываться для каждой строки.

[scope call]

user_data

данные пользователя, передаваемые в func

gtk_tree_model_row_changed ()

void
gtk_tree_model_row_changed (GtkTreeModel *tree_model,
                            GtkTreePath *path,
                            GtkTreeIter *iter);

Отправляет сигнал “row-changed” на tree_model.

Параметры

tree_model

a GtkTreeModel

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

a GtkTreeModel

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

a GtkTreeModel

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

a GtkTreeModel

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

a GtkTreeModel

path

a GtkTreePath указывающий на узел дерева, чьи дочерние элементы были переупорядочены

iter

a valid GtkTreeIter указывающий на узел, чьи дочерние элементы были переупорядочены, или NULL, если глубина path равна 0

new_order

массив целых чисел, сопоставляющий текущую позицию каждого дочернего элемента со старой позицией перед переупорядочением, т.е. new_order [newpos] = oldpos

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

a GtkTreeModel

path

a GtkTreePath указывающий на узел дерева, чьи дочерние элементы были переупорядочены

iter

a valid GtkTreeIter указывающий на узел, чьи дочерние элементы были переупорядочены, или NULL, если глубина path равна 0.

[allow-none]

new_order

массив целых чисел, сопоставляющий текущую позицию каждого дочернего элемента со старой позицией перед переупорядочением, т.е. new_order [newpos] = oldpos.

[array length=length]

length

длина массива new_order

С: 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 stamp;

уникальный маркер для отслеживания невалидных итераторов

gpointer user_data;

данные, специфичные для модели

gpointer user_data2;

данные, специфичные для модели

gpointer user_data3;

данные, специфичные для модели

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);
};

Члены

row_changed ()

Сигнал, генерируемый при изменении строки в модели.

row_inserted ()

Сигнал, генерируемый при добавлении новой строки в модель.

row_has_child_toggled ()

Сигнал, генерируемый при появлении первого дочернего элемента или исчезновении последнего дочернего элемента строки.

row_deleted ()

Сигнал, генерируемый при удалении строки.

rows_reordered ()

Сигнал, генерируемый при переупорядочении дочерних элементов узла в GtkTreeModel.

get_flags ()

Получить GtkTreeModelFlags, поддерживаемые этим интерфейсом.

get_n_columns ()

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

get_column_type ()

Получить тип столбца.

get_iter ()

Устанавливает iter на допустимый итератор, указывающий на путь.

get_path ()

Получает новый GtkTreePath, на который ссылается iter.

get_value ()

Инициализирует и устанавливает значение в столбце.

iter_next ()

Устанавливает iter на узел, следующий за текущим на текущем уровне.

iter_previous ()

Устанавливает iter на предыдущий узел на текущем уровне.

iter_children ()

Устанавливает iter на первый дочерний узел parent.

iter_has_child ()

TRUE, если у iter есть дочерние узлы, FALSE в противном случае.

iter_n_children ()

Возвращает количество дочерних элементов у iter.

iter_nth_child ()

Устанавливает iter на дочерний узел parent с заданным индексом.

iter_parent ()

Устанавливает iter на родителя child.

ref_node ()

Позволяет дереву ссылаться на узел.

unref_node ()

Позволяет дереву отменить ссылку на узел.

Перечисление 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

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Выполнить последним

Сигнал “row-deleted”

void
user_function (GtkTreeModel *tree_model,
               GtkTreePath  *path,
               gpointer      user_data)

Этот сигнал генерируется, когда строка была удалена.

Обратите внимание, что обработчику сигнала не передаётся итератор, так как строка уже удалена.

Этот метод должен вызываться моделями после удаления строки. Место, на которое указывает path, должно соответствовать местоположению строки до удаления. Оно может быть уже недоступным.

Параметры

tree_model

модель GtkTreeModel, в которой был удалён ряд

path

путь GtkTreePath, идентифицирующий строку

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Выполнить первым

Сигнал “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

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Выполнить последним

Сигнал “row-inserted”

void
user_function (GtkTreeModel *tree_model,
               GtkTreePath  *path,
               GtkTreeIter  *iter,
               gpointer      user_data)

Этот сигнал генерируется, когда в модель была вставлена новая строка.

Обратите внимание, что строка может быть пустой на этом этапе, так как распространённый подход — сначала вставить пустую строку, а затем заполнить её нужными значениями.

Параметры

tree_model

модель GtkTreeModel, в которой была вставлена строка

path

путь GtkTreePath, идентифицирующий новую строку

iter

действительная итерация GtkTreeIter, указывающая на новую строку

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Выполнить первым

Сигнал “rows-reordered”

void
user_function (GtkTreeModel *tree_model,
               GtkTreePath  *path,
               GtkTreeIter  *iter,
               gpointer      new_order,
               gpointer      user_data)

Этот сигнал генерируется, когда дочерние элементы узла в GtkTreeModel были переупорядочены.

Обратите внимание, что этот сигнал не генерируется при переупорядочении строк с помощью перетаскивания, так как это реализуется удалением и повторной вставкой строки.

[skip]

Параметры

tree_model

модель GtkTreeModel, в которой произошло переупорядочение

path

путь GtkTreePath, идентифицирующий узел дерева, чьи дочерние элементы были переупорядочены

iter

действительная итерация GtkTreeIter, указывающая на узел, чьи дочерние элементы были переупорядочены, или NULL, если глубина path равна 0

new_order

массив целых чисел, сопоставляющий текущую позицию каждого дочернего элемента с его старой позицией до переупорядочения, т.е. new_order [newpos] = oldpos

user_data

данные пользователя, установленные при подключении обработчика сигнала.

Флаги: Выполнить первым

См. также

GtkTreeView, GtkTreeStore, GtkListStore, перетаскивание в GtkTreeView GtkTreeSortable

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.20/GtkTreeModel.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API