Spec-Zone.ru › GTK 3.24

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

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, распространяются, и путь обновляется соответствующим образом. Если path не является допустимым путем в model, то возвращается NULL.

Параметры

model

a GtkTreeModel

path

a valid GtkTreePath to monitor

Возвращает

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

gtk_tree_row_reference_new_proxy ()

GtkTreeRowReference *
gtk_tree_row_reference_new_proxy (GObject *proxy,
                                  GtkTreeModel *model,
                                  GtkTreePath *path);

Вам не нужно использовать эту функцию.

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

Эта ссылка будет продолжать указывать на узел, на который указывает path, пока он существует. Если path не является допустимым путём в model, то возвращается NULL. Однако, в отличие от ссылок, созданных с помощью gtk_tree_row_reference_new(), она не отслеживает изменения в модели. Создатель ссылки на строку должен делать это явно, используя gtk_tree_row_reference_inserted(), gtk_tree_row_reference_deleted(), gtk_tree_row_reference_reordered().

Эти функции должны вызываться ровно один раз на прокси при каждом срабатывании соответствующего сигнала в модели. Это единственный вызов обновляет все ссылки на строки для этого прокси. Поскольку встроенные объекты GTK+, такие как GtkTreeView, уже используют этот механизм внутри, использование их в качестве объекта-прокси приведёт к непредсказуемым результатам. Кроме того, передача одного и того же объекта как model и proxy не работает из-за особенностей внутренней реализации.

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

Параметры

proxy

прокси GObject

model

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]

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

Since: 2.2

gtk_tree-row-reference-inserted ()

void
gtk_tree_row_reference_inserted (GObject *proxy,
                                 GtkTreePath *path);

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

Параметры

proxy

a GObject

path

позиция строки, которая была вставлена

gtk_tree-row-reference-deleted ()

void
gtk_tree_row_reference_deleted (GObject *proxy,
                                GtkTreePath *path);

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

Параметры

proxy

a GObject

path

позиция пути, который был удалён

gtk_tree-row-reference-reordered ()

void
gtk_tree_row_reference_reordered (GObject *proxy,
                                  GtkTreePath *path,
                                  GtkTreeIter *iter,
                                  gint *new_order);

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

[skip]

Параметры

proxy

a GObject

path

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

iter

итератор, указывающий на родителя reordered

new_order

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

[array]

gtk_tree_iter_copy ()

GtkTreeIter *
gtk_tree_iter_copy (GtkTreeIter *iter);

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

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

Параметры

iter

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

gint
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,
                                gint 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 gchar *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,
                          gint column,
                          GValue *value);

Инициализирует и устанавливает value в значение по адресу column.

После завершения работы с value, необходимо вызвать g_value_unset(), чтобы освободить выделенную память.

Параметры

tree_model

объект GtkTreeModel

iter

итератор GtkTreeIter

column

номер столбца для поиска значения

value

пустой GValue для установки.

[out][transfer none]

gtk_tree_model_iter_next ()

gboolean
gtk_tree_model_iter_next (GtkTreeModel *tree_model,
                          GtkTreeIter *iter);

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

Если следующего iter нет, возвращается FALSE, и iter устанавливается в невалидное состояние.

Параметры

tree_model

объект GtkTreeModel

iter

итератор GtkTreeIter.

[in]

Возвращает

TRUE если iter был изменён на следующий узел

gtk_tree_model_iter_previous ()

gboolean
gtk_tree_model_iter_previous (GtkTreeModel *tree_model,
                              GtkTreeIter *iter);

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

Если предыдущего iter нет, возвращается FALSE, и iter устанавливается в невалидное состояние.

Параметры

tree_model

объект GtkTreeModel

iter

итератор GtkTreeIter.

[in]

Возвращает

TRUE если iter был изменён на предыдущий узел

С версии: 3.0

gtk_tree_model_iter_children ()

gboolean
gtk_tree_model_iter_children (GtkTreeModel *tree_model,
                              GtkTreeIter *iter,
                              GtkTreeIter *parent);

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

Если у parent нет дочерних узлов, возвращается FALSE, и iter устанавливается в невалидное состояние. parent останется валидным узлом после вызова этой функции.

Если parent является NULL, возвращает первый узел, эквивалентно gtk_tree_model_get_iter_first (tree_model, iter);

Параметры

tree_model

объект GtkTreeModel

iter

новый итератор GtkTreeIter, который будет установлен на дочерний узел.

[out]

parent

итератор GtkTreeIter или 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

объект GtkTreeModel

iter

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

Возвращает

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

gtk_tree_model_iter_n_children ()

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

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

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

Параметры

tree_model

объект GtkTreeModel

iter

итератор GtkTreeIter или 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

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

[out]

parent

the 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

the GtkTreeIter

Возвращает

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

gtk_tree_model_get_string_from_iter ()

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

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

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

Параметры

tree_model

a GtkTreeModel

iter

a 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

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

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

корректный 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

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

[allow-none]

new_order

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

[array length=length]

length

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

Since: 3.10

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

GtkTreeModel

typedef struct _GtkTreeModel GtkTreeModel;

Структура GtkTreeIter

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

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

Члены

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

Инициализирует и устанавливает 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.gnome.org/gtk3/3.24/GtkTreeModel.html

Spec-Zone.ru

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