Spec-Zone.ru › GTK 4.0

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 ()
char * gtk_tree_path_to_string ()
GtkTreePath * gtk_tree_path_new_first ()
void gtk_tree_path_append_index ()
void gtk_tree_path_prepend_index ()
int gtk_tree_path_get_depth ()
int * gtk_tree_path_get_indices ()
int * gtk_tree_path_get_indices_with_depth ()
void gtk_tree_path_free ()
GtkTreePath * gtk_tree_path_copy ()
int 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 ()
int 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 ()
int gtk_tree_model_iter_n_children ()
gboolean gtk_tree_model_iter_nth_child ()
gboolean gtk_tree_model_iter_parent ()
char * 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 Run Last
void row-deleted Run First
void row-has-child-toggled Run Last
void row-inserted Run First
void rows-reordered Run First

Типы и значения

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 («итер» — сокращение от «итератор»). Большая часть интерфейса состоит из операций с 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 char *path);

Создает новый GtkTreePath, инициализированный значением path .

path должен представлять собой список чисел, разделенных двоеточиями. Например, строка “10:4:0” создает путь глубиной 3, указывающий на 11-го потомка узла корня, 5-го потомка этого 11-го потомка и 1-го потомка этого 5-го потомка. Если передана недопустимая строка пути, возвращается NULL.

Параметры

path

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

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

Созданный GtkTreePath или NULL.

[nullable]

gtk_tree_path_new_from_indices ()

GtkTreePath *
gtk_tree_path_new_from_indices (int first_index,
                                ...);

Создает новый путь с first_index и varargs в качестве индексов.

Параметры

first_index

первое целое число

...

список целых чисел, завершаемый -1

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

Созданный GtkTreePath

gtk_tree_path_new_from_indicesv ()

GtkTreePath *
gtk_tree_path_new_from_indicesv (int *indices,
                                 gsize length);

Создает новый путь с заданным массивом indices индексов length .

[rename-to gtk_tree_path_new_from_indices]

Параметры

indices

массив индексов.

[array length=length]

length

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

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

Созданный GtkTreePath

gtk_tree_path_to_string ()

char *
gtk_tree_path_to_string (GtkTreePath *path);

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

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

Параметры

path

GtkTreePath

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

Выделенная строка. Необходимо освободить с помощью g_free().

[nullable]

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,
                            int index_);

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

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

Параметры

path

GtkTreePath

index_

индекс

gtk_tree_path_prepend_index ()

void
gtk_tree_path_prepend_index (GtkTreePath *path,
                             int index_);

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

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

Параметры

path

GtkTreePath

index_

индекс

gtk_tree_path_get_depth ()

int
gtk_tree_path_get_depth (GtkTreePath *path);

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

Параметры

path

GtkTreePath

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

Глубина path

gtk_tree_path_get_indices ()

int *
gtk_tree_path_get_indices (GtkTreePath *path);

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

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

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

[skip]

Параметры

path

GtkTreePath

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

Текущие индексы или NULL.

[nullable]

gtk_tree_path_get_indices_with_depth ()

int *
gtk_tree_path_get_indices_with_depth (GtkTreePath *path,
                                      int *depth);

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

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

[rename-to gtk_tree_path_get_indices]

Параметры

path

a GtkTreePath

depth

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

[out][allow-none]

Возвращает

Текущие индексы, или NULL.

[array length=depth][transfer none]

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 ()

int
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

another 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

another GtkTreePath

Возвращает

TRUE если ancestor содержит path где-то ниже

gtk_tree_row_reference_new ()

GtkTreeRowReference *
gtk_tree_row_reference_new (GtkTreeModel *model,
                            GtkTreePath *path);

Создаёт ссылку на строку, основанную на path.

Эта ссылка будет продолжать указывать на узел, на который указывает path, пока он существует. Любые изменения, происходящие в model, будут проpropagated, и путь будет обновлён должным образом. Если path не является допустимым путём в model, то возвращается NULL.

Параметры

model

a GtkTreeModel

path

допустимый GtkTreePath для отслеживания

Возвращает

новый GtkTreeRowReference, или NULL.

[nullable]

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

a GtkTreeModel

path

допустимый GtkTreePath для мониторинга

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

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

[nullable]

gtk_tree_row_reference_get_model ()

GtkTreeModel *
gtk_tree_row_reference_get_model (GtkTreeRowReference *reference);

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

Параметры

reference

a GtkTreeRowReference

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

модель.

[transfer none]

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 не пусто и ссылается на текущий допустимый путь.

Параметры

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

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,
                                  int *new_order);

Сообщает набору ссылок на строки, созданных с помощью gtk_tree_row_reference_new_proxy(), что модель выпустила сигнал “rows-reordered”.

[skip]

Параметры

proxy

a GObject

path

родительский путь сигнала reorder

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

a 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

a GtkTreeModel

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

флаги, поддерживаемые этим интерфейсом

gtk_tree_model_get_n_columns ()

int
gtk_tree_model_get_n_columns (GtkTreeModel *tree_model);

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

Параметры

tree_model

a GtkTreeModel

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

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

gtk_tree_model_get_column_type ()

GType
gtk_tree_model_get_column_type (GtkTreeModel *tree_model,
                                int index_);

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

Параметры

tree_model

a 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

a GtkTreeModel

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 char *path_string);

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

Параметры

tree_model

a 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,
                          int 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 был изменён на предыдущий узел

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

the new GtkTreeIter to be set to the child.

[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

the GtkTreeIter для проверки наличия дочерних узлов

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

TRUE , если у iter есть дочерние узлы

gtk_tree_model_iter_n_children ()

int
gtk_tree_model_iter_n_children (GtkTreeModel *tree_model,
                                GtkTreeIter *iter);

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

В качестве специального случая, если iter равно NULL, возвращается количество узлов верхнего уровня.

Параметры

tree_model

a GtkTreeModel

iter

the 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,
                               int n);

Устанавливает iter в качестве дочернего узла parent с помощью заданного индекса.

Первый индекс — 0. Если n слишком большой или parent не имеет дочерних узлов, iter устанавливается в недействительный итератор, и возвращается FALSE. parent останется действительным узлом после вызова функции. В качестве специального случая, если parent равно NULL, устанавливается n-й корневой узел.

Параметры

tree_model

a GtkTreeModel

iter

the GtkTreeIter to set to the nth child.

[out]

parent

the GtkTreeIter to get the child from, или 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

the new GtkTreeIter to set to the parent.

[out]

child

the GtkTreeIter

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

TRUE, если iter установлен для родителя child

gtk_tree_model_get_string_from_iter ()

char *
gtk_tree_model_get_string_from_iter (GtkTreeModel *tree_model,
                                     GtkTreeIter *iter);

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

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

Параметры

tree_model

a GtkTreeModel

iter

a GtkTreeIter

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

новую строку. Должна быть освобождена с помощью g_free().

[nullable]

gtk_tree_model_ref_node ()

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

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

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

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

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

Параметры

tree_model

a GtkTreeModel

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

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, &amp;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 .

[closure]

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,
                               int *new_order);

Издаёт сигнал “rows-reordered” на tree_model.

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

[skip]

Параметры

tree_model

a GtkTreeModel

path

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

iter

валидный 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,
                                int *new_order,
                                int length);

Издаёт сигнал “rows-reordered” на tree_model.

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

[rename-to gtk_tree_model_rows_reordered]

Параметры

tree_model

a GtkTreeModel

path

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

iter

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

[allow-none]

new_order

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

[array length=length]

length

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

Типы и значения

GtkTreeModel

typedef struct _GtkTreeModel GtkTreeModel;

Структура GtkTreeIter

struct GtkTreeIter {
  int stamp;
  gpointer user_data;
  gpointer user_data2;
  gpointer user_data3;
};

Структура GtkTreeIter — основная структура для доступа к GtkTreeModel. Модели должны помещать уникальное целое число в член stamp, а модели-специфичные данные — в три члена user_data.

Члены

int 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,
					  int          *new_order);

  /* Virtual Table */
  GtkTreeModelFlags (* get_flags)  (GtkTreeModel *tree_model);

  int          (* get_n_columns)   (GtkTreeModel *tree_model);
  GType        (* get_column_type) (GtkTreeModel *tree_model,
				    int           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,
				    int           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);
  int          (* iter_n_children) (GtkTreeModel *tree_model,
				    GtkTreeIter  *iter);
  gboolean     (* iter_nth_child)  (GtkTreeModel *tree_model,
				    GtkTreeIter  *iter,
				    GtkTreeIter  *parent,
				    int           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 в первый дочерний элемент родителя.

iter_has_child ()

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

iter_n_children ()

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

iter_nth_child ()

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

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

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

Флаги: 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, указывающий на узел, чьи дочерние элементы были переупорядочены, или NULL если глубина path равна 0

new_order

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

user_data

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

Флаги: Run First

См. также

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-old.gnome.org/gtk4/4.0/GtkTreeModel.html

Spec-Zone.ru

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