The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |   |  Known Derived Interfaces  |  Known Implementations  |  Signals

GtkTreeModel

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

Краткое описание

#include <gtk/gtk.h>


            GtkTreeModel;
            GtkTreeIter;
            GtkTreePath;
            GtkTreeRowReference;
            GtkTreeModelIface;

gboolean    (*GtkTreeModelForeachFunc)      (GtkTreeModel *model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter,
                                             gpointer data);
enum        GtkTreeModelFlags;

GtkTreePath* gtk_tree_path_new              (void);
GtkTreePath* gtk_tree_path_new_from_string  (const gchar *path);
GtkTreePath* gtk_tree_path_new_from_indices (gint first_index,
                                             ...);

gchar*      gtk_tree_path_to_string         (GtkTreePath *path);
GtkTreePath* gtk_tree_path_new_first        (void);
#define     gtk_tree_path_new_root          ()
void        gtk_tree_path_append_index      (GtkTreePath *path,
                                             gint index_);
void        gtk_tree_path_prepend_index     (GtkTreePath *path,
                                             gint index_);

gint        gtk_tree_path_get_depth         (GtkTreePath *path);
gint*       gtk_tree_path_get_indices       (GtkTreePath *path);
void        gtk_tree_path_free              (GtkTreePath *path);

GtkTreePath* gtk_tree_path_copy             (const GtkTreePath *path);
gint        gtk_tree_path_compare           (const GtkTreePath *a,
                                             const GtkTreePath *b);
void        gtk_tree_path_next              (GtkTreePath *path);

gboolean    gtk_tree_path_prev              (GtkTreePath *path);
gboolean    gtk_tree_path_up                (GtkTreePath *path);
void        gtk_tree_path_down              (GtkTreePath *path);

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

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

GtkTreeModel* gtk_tree_row_reference_get_model
                                            (GtkTreeRowReference *reference);
GtkTreePath* gtk_tree_row_reference_get_path
                                            (GtkTreeRowReference *reference);

gboolean    gtk_tree_row_reference_valid    (GtkTreeRowReference *reference);
void        gtk_tree_row_reference_free     (GtkTreeRowReference *reference);
GtkTreeRowReference* gtk_tree_row_reference_copy

                                            (GtkTreeRowReference *reference);
void        gtk_tree_row_reference_inserted (GObject *proxy,
                                             GtkTreePath *path);
void        gtk_tree_row_reference_deleted  (GObject *proxy,
                                             GtkTreePath *path);
void        gtk_tree_row_reference_reordered

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

GtkTreeModelFlags gtk_tree_model_get_flags  (GtkTreeModel *tree_model);
gint        gtk_tree_model_get_n_columns    (GtkTreeModel *tree_model);
GType       gtk_tree_model_get_column_type  (GtkTreeModel *tree_model,
                                             gint index_);

gboolean    gtk_tree_model_get_iter         (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             GtkTreePath *path);
gboolean    gtk_tree_model_get_iter_from_string

                                            (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             const gchar *path_string);
gboolean    gtk_tree_model_get_iter_first   (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter);
#define     gtk_tree_model_get_iter_root    (tree_model, iter)

GtkTreePath* gtk_tree_model_get_path        (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter);
void        gtk_tree_model_get_value        (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             gint column,
                                             GValue *value);

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

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

gboolean    gtk_tree_model_iter_nth_child   (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             GtkTreeIter *parent,
                                             gint n);

gboolean    gtk_tree_model_iter_parent      (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             GtkTreeIter *child);
gchar*      gtk_tree_model_get_string_from_iter

                                            (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter);
void        gtk_tree_model_ref_node         (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter);
void        gtk_tree_model_unref_node       (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter);
void        gtk_tree_model_get              (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             ...);
void        gtk_tree_model_get_valist       (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             va_list var_args);
void        gtk_tree_model_foreach          (GtkTreeModel *model,
                                             GtkTreeModelForeachFunc func,
                                             gpointer user_data);
void        gtk_tree_model_row_changed      (GtkTreeModel *tree_model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter);
void        gtk_tree_model_row_inserted     (GtkTreeModel *tree_model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter);
void        gtk_tree_model_row_has_child_toggled

                                            (GtkTreeModel *tree_model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter);
void        gtk_tree_model_row_deleted      (GtkTreeModel *tree_model,
                                             GtkTreePath *path);
void        gtk_tree_model_rows_reordered   (GtkTreeModel *tree_model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter,
                                             gint *new_order);

Иерархия объектов

  GInterface
   +----GtkTreeModel

Предпосылки

GtkTreeModel нуждается в GObject.

Известные наследуемые интерфейсы

GtkTreeModel необходим GtkTreeSortable.

Известные реализации

GtkTreeModel осуществляет GtkTreeModelSort, GtkTreeStore, GtkListStore и GtkTreeModelFilter.

Сигналы

"row-changed"
            void        user_function      (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            GtkTreeIter  *iter,
                                            gpointer      user_data)       : Run last
"row-deleted"
            void        user_function      (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            gpointer      user_data)       : Run first
"row-has-child-toggled"
            void        user_function      (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            GtkTreeIter  *iter,
                                            gpointer      user_data)       : Run last
"row-inserted"
            void        user_function      (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            GtkTreeIter  *iter,
                                            gpointer      user_data)       : Run first
"rows-reordered"
            void        user_function      (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            GtkTreeIter  *iter,
                                            gpointer      arg3,
                                            gpointer      user_data)       : Run first

Описание

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

Модель представляет строго типизированную древовидную иерархию колоннообразных данных. Другими словами, модель может рассматриваться как дерево где каждая ветвь имеет различные значения, в зависимости от которых делается запрос столбца. Тип данных находящихся в столбце определяется с помощью системы Gtype (то есть G_TYPE_INT, GTK_TYPE_BUTTON, G_TYPE_POINTER, и т.д.). Типы однородны вдоль столбца через все ветви. Важно отметить, что этот интерфейс обеспечивает только способ проверки модели и наблюдения за изменениями. Реализация каждой отдельной модели решает как и сделаны ли изменения.

Чтобы облегчить жизнь программистам, которые не нуждаются в написании собственных специфических моделей, две основные модели обеспечивают GtkTreeStore и GtkListStore. Для их использования, разработчик просто помещает свои данные в них по мере необходимости. Эти модели обеспечивают структуру данных также как все соответствующие древовидные интерфейсы. Как результат, реализация drag and drop, сортировка и тривиальное хранение данных. Для большинства списков и деревьев, эти две модели будут вполне достаточны.

Доступ к моделям детализируется уровнем ветвь/колонка. Можно запросить значение модели в определенной ветке и определенной колонке на этой ветке. Есть две структуры используемые для ссылки на специфическую ветвь в модели. Это GtkTreePath и GtkTreeIter .[4] Большинство интерфейсов состоят из операций с GtkTreeIter.

Путь это по существу потенциальная ветвь. Это положение на модели которое может или не может фактически соответствовать ветви для специфической модели. Структура GtkTreePath может быть преобразована в массив целых чисел или в строку. Форма строки это список чисел разделённых двоеточием. Каждое число относится к смещению на этом уровне. Таким образом, путь 0 ссылается на корневую ветвь, а путь 2:4 ссылается на пятый пункт третьей ветви.

В отличии от этого, GtkTreeIter это ссылка на определённую ветвь в определенной модели. Это основная структура с целыми числами и тремя основными указателями. Они заполняют модель способом определенным моделью. Можно преобразовать путь в итератор вызвав gtk_tree_model_get_iter(). Эти итераторы первичный способ доступа к модели и похожи на итераторы используемые в GtkTextBuffer. Они в основном статично расположены в стеке и используются только в течении короткого времени. Интерфейс модели определяет ряд операций используемых для управления моделью.

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

Жизненный цикл итераторов может быть немного запутанным сначала. Итераторы всегда доступны пока модель не изменяется (и не издают сигналы). Модель владеет всеми невыполненными итераторами и ничего не нужно делать для их освобождения, с точки зрения пользователя. В дополнение, некоторые модели гарантируют что итераторы доступны пока ветвь к которой он обращается доступна ( GtkTreeStore и GtkListStore). Хотя в основном не интересно, так как каждый всегда должен учитывать случай, где итераторы не сохраняются вне границ сигнала, некоторые очень важные расширения были сделаны в сортировке модели. Как результат, GTK_TREE_MODEL_ITERS_PERSIST флаг был добавлен для указания этого поведения.

Ниже приводятся некоторые примеры, для демонстрации некоторых основных операций модели. Первый пример показывает три способа получения итератора в позиции 3:2:5. В то время как первый метод отображения прост, второй более обычен, так как вы часто получаете пути из callback-функций.

Пример 1. Получение GtkTreeIter

/* Три способа получить итератор указывающий расположение */
{
  GtkTreePath *path;
  GtkTreeIter iter;
  GtkTreeIter parent_iter;

  /* получаем итератор из строки */
  gtk_tree_model_get_iter_from_string (model, &iter, "3:2:5");

  /* получаем итератор из пути */
  path = gtk_tree_path_new_from_string ("3:2:5");
  gtk_tree_model_get_iter (model, &iter, path);
  gtk_tree_path_free (path);


  /* проходим по дереву в поиске итератора */
  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);
}

Это второй пример показывающий быстрый способ выполнить итерацию через список и получить строку и целое число из каждой линии. Функция populate_model используемая ниже не показана, так как она определена в GtkListStore. Для информации как написать такую функцию, смотрите документацию GtkListStore.

Пример 2. Чтение данных из GtkTreeModel

enum
{
  STRING_COLUMN,
  INT_COLUMN,
  N_COLUMNS
};

{
  GtkTreeModel *list_store;
  GtkTreeIter iter;
  gboolean valid;
  gint row_count = 0;

  /* создаём новый list_store */
  list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_INT);

  /* Заполняем список хранения данных */
  populate_model (list_store);

  /* Получаем первый итератор в списке */
  valid = gtk_tree_model_get_iter_first (list_store, &iter);

  while (valid)
    {
      /* Проходим через список, читаем каждую строку */
      gchar *str_data;
      gint   int_data;

      /* Удостоверьтесь что вы закончили вызов gtk_tree_model_get()
       * значением '-1' */
      gtk_tree_model_get (list_store, &iter, 
                          STRING_COLUMN, &str_data,
                          INT_COLUMN, &int_data,
                          -1);

      /* Делаем кое-что с данными */
      g_print ("Row %d: (%s,%d)\n", row_count, str_data, int_data);
      g_free (str_data);

      row_count ++;
      valid = gtk_tree_model_iter_next (list_store, &iter);
    }
}

Детали

GtkTreeModel

typedef struct _GtkTreeModel GtkTreeModel;

GtkTreeIter

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

GtkTreeIter первичная структура доступа к структуре. Ожидается что модели поместят уникальное целое число в элемент stamp, и поместят определенные моделью данные в три элемента user_data.

gint stamp;

Уникальный штамп перехватывающий недопустимые итераторы

gpointer user_data;

Данные определенные моделью

gpointer user_data2;

Данные определенные моделью

gpointer user_data3;

Данные определенные моделью


GtkTreePath

typedef struct _GtkTreePath GtkTreePath;

GtkTreeRowReference

typedef struct _GtkTreeRowReference GtkTreeRowReference;

GtkTreeModelIface

typedef struct {
  GTypeInterface g_iface;

  /* Сигналы */
  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);

  /* Виртуальная таблица */
  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_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);
} GtkTreeModelIface;

GtkTreeModelForeachFunc ()

gboolean    (*GtkTreeModelForeachFunc)      (GtkTreeModel *model,
                                             GtkTreePath *path,
                                             GtkTreeIter *iter,
                                             gpointer data);

model :

path :

iter :

data :

Возвращает :


enum GtkTreeModelFlags

typedef enum
{
  GTK_TREE_MODEL_ITERS_PERSIST = 1 << 0,
  GTK_TREE_MODEL_LIST_ONLY = 1 << 1
} GtkTreeModelFlags;

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

GTK_TREE_MODEL_ITERS_PERSIST

Итераторы переживающие все сигналы издаваемые деревом.

GTK_TREE_MODEL_LIST_ONLY

Модель только список, без дочерних элементов


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" указывает путь глубиной в три указателя для 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_to_string ()

gchar*      gtk_tree_path_to_string         (GtkTreePath *path);

Создаёт строку представляющую путь. Это список чисел разделённых ':'. Например, "4:10:0:3" было бы допустимым значением для этой строки.

path :

GtkTreePath

Возвращает :

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


gtk_tree_path_new_first ()

GtkTreePath* gtk_tree_path_new_first        (void);

Создаёт новый GtkTreePath. Представление строки этого пути равно "0"

Возвращает :

Новый GtkTreePath.


gtk_tree_path_new_root()

#define gtk_tree_path_new_root() gtk_tree_path_new_first()

Внимание

gtk_tree_path_new_root устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте gtk_tree_path_new_first().

Альтернативное имя для gtk_tree_path_new_first(), используется только для совместимости.

Возвращает :

Новый GtkTreePath.


gtk_tree_path_append_index ()

void        gtk_tree_path_append_index      (GtkTreePath *path,
                                             gint index_);

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

path :

GtkTreePath.

index_ :

Индекс.


gtk_tree_path_prepend_index ()

void        gtk_tree_path_prepend_index     (GtkTreePath *path,
                                             gint index_);

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

path :

GtkTreePath.

index_ :

Индекс.


gtk_tree_path_get_depth ()

gint        gtk_tree_path_get_depth         (GtkTreePath *path);

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

path :

GtkTreePath.

Возвращает :

глубина path


gtk_tree_path_get_indices ()

gint*       gtk_tree_path_get_indices       (GtkTreePath *path);

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

path :

GtkTreePath.

Возвращает :

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


gtk_tree_path_free ()

void        gtk_tree_path_free              (GtkTreePath *path);

Освобождает path.

path :

GtkTreePath.


gtk_tree_path_copy ()

GtkTreePath* gtk_tree_path_copy             (const GtkTreePath *path);

Создаёт новый GtkTreePath как копию path.

path :

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 :

GtkTreePath.

b :

GtkTreePath с которым сравнивается.

Возвращает :

Относительная позиция a и b


gtk_tree_path_next ()

void        gtk_tree_path_next              (GtkTreePath *path);

Перемещает path в точку следующей ветки текущемй глубины.

path :

GtkTreePath.


gtk_tree_path_prev ()

gboolean    gtk_tree_path_prev              (GtkTreePath *path);

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

path :

GtkTreePath.

Возвращает :

TRUE если path имеет предыдущую ветвь и перемещение было сделано.


gtk_tree_path_up ()

gboolean    gtk_tree_path_up                (GtkTreePath *path);

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

path :

GtkTreePath.

Возвращает :

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


gtk_tree_path_down ()

void        gtk_tree_path_down              (GtkTreePath *path);

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

path :

GtkTreePath.


gtk_tree_path_is_ancestor ()

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

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

path :

GtkTreePath

descendant :

другой GtkTreePath

Возвращает :

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


gtk_tree_path_is_descendant ()

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

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

path :

GtkTreePath

ancestor :

другой GtkTreePath

Возвращает :

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


gtk_tree_row_reference_new ()

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

Создаёт строковую ссылку, основанную на path. Эта ссылка будет указывать на ветвь на которую указывает path, пока он существует. Она слушает все сигналы издаваемые model, и соответственно обновляет путь. Если path не допустимый путь в model, то когда возвращается NULL.

model :

GtkTreeModel

path :

Допустимый GtkTreePath для контроля

Возвращает :

Вновь размещаемый GtkTreeRowReference, или NULL


gtk_tree_row_reference_new_proxy ()

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

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

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

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

proxy :

полномочный GObject

model :

GtkTreeModel

path :

Допустимый GtkTreePath для контроля

Возвращает :

Вновь созданный GtkTreeRowReference, или NULL


gtk_tree_row_reference_get_model ()

GtkTreeModel* gtk_tree_row_reference_get_model
                                            (GtkTreeRowReference *reference);

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

reference :

GtkTreeRowReference

Возвращает :

модель

Начиная с версии 2.8


gtk_tree_row_reference_get_path ()

GtkTreePath* gtk_tree_row_reference_get_path
                                            (GtkTreeRowReference *reference);

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

reference :

GtkTreeRowReference

Возвращает :

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


gtk_tree_row_reference_valid ()

gboolean    gtk_tree_row_reference_valid    (GtkTreeRowReference *reference);

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

reference :

GtkTreeRowReference, или NULL

Возвращает :

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


gtk_tree_row_reference_free ()

void        gtk_tree_row_reference_free     (GtkTreeRowReference *reference);

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

reference :

GtkTreeRowReference, или NULL


gtk_tree_row_reference_copy ()

GtkTreeRowReference* gtk_tree_row_reference_copy
                                            (GtkTreeRowReference *reference);

Копирует GtkTreeRowReference.

reference :

GtkTreeRowReference

Возвращает :

копия reference.

Начиная с версии 2.2


gtk_tree_row_reference_inserted ()

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

Позволяет установить строковую ссылку созданную gtk_tree_row_reference_new_proxy() , узнав что модель издала сигнал "row_inserted".

proxy :

GObject

path :

Позиция вставляемой строки


gtk_tree_row_reference_deleted ()

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

Позволяет удалить строковую ссылку созданную с помощью gtk_tree_row_reference_new_proxy(), узнав что модель издала сигнал "row_deleted".

proxy :

GObject

path :

Позиция пути для удаления


gtk_tree_row_reference_reordered ()

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

Позволяет установить строковую ссылку созданную gtk_tree_row_reference_new_proxy() , узнав что модель издала сигнал "rows_reordered".

proxy :

GObject

path :

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

iter :

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

new_order :

Новый порядок строк


gtk_tree_iter_copy ()

GtkTreeIter* gtk_tree_iter_copy             (GtkTreeIter *iter);

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

iter :

GtkTreeIter.

Возвращает :

Вновь созданная копия iter.


gtk_tree_iter_free ()

void        gtk_tree_iter_free              (GtkTreeIter *iter);

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

iter :

Динамически размещаемый итератор дерева.


gtk_tree_model_get_flags ()

GtkTreeModelFlags gtk_tree_model_get_flags  (GtkTreeModel *tree_model);

Возвращает установки флагов поддерживаемых этим интерфейсом. Флаги являются логической комбинацией GtkTreeModelFlags. Поддерживаемые флаги не должны меняться в течении жизненного цикла tree_model.

tree_model :

GtkTreeModel.

Возвращает :

Флаги которые поддерживает этот интерфейс.


gtk_tree_model_get_n_columns ()

gint        gtk_tree_model_get_n_columns    (GtkTreeModel *tree_model);

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

tree_model :

GtkTreeModel.

Возвращает :

Число колонок.


gtk_tree_model_get_column_type ()

GType       gtk_tree_model_get_column_type  (GtkTreeModel *tree_model,
                                             gint index_);

Возвращает тип колонки.

tree_model :

GtkTreeModel.

index_ :

Номер колонки.

Возвращает :

Тип колонки.


gtk_tree_model_get_iter ()

gboolean    gtk_tree_model_get_iter         (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             GtkTreePath *path);

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

tree_model :

GtkTreeModel.

iter :

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

path :

GtkTreePath.

Возвращает :

TRUE, если iter был установлен.


gtk_tree_model_get_iter_from_string ()

gboolean    gtk_tree_model_get_iter_from_string
                                            (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             const gchar *path_string);

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

tree_model :

GtkTreeModel.

iter :

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

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 :

GtkTreeModel.

iter :

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

Возвращает :

TRUE, если iter был установлен.


gtk_tree_model_get_iter_root()

#define gtk_tree_model_get_iter_root(tree_model, iter) gtk_tree_model_get_iter_first(tree_model, iter)

Внимание

gtk_tree_model_get_iter_root устарела и не должна использоваться во вновь создаваемом коде.

Альтернативное имя для gtk_tree_model_get_iter_first(), обеспечивает совместимость; этот макрос будет удалён в следующих версиях GTK+.

tree_model :

GtkTreeModel.

iter :

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

Возвращает :

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 :

GtkTreeModel.

iter :

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 для установки.


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.

Возвращает :

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 :

GtkTreeModel.

iter :

Новый GtkTreeIter устанавливаемый для дочернего пункта.

parent :

GtkTreeIter, или NULL

Возвращает :

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.

Возвращает :

Число дочерних пунктов 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 :

GtkTreeModel.

iter :

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

parent :

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

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 будет доступным элементом после вызова этой функции.

tree_model :

GtkTreeModel

iter :

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

child :

GtkTreeIter.

Возвращает :

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


gtk_tree_model_get_string_from_iter ()

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

Генерирует строку представляющую итератор. Это список чисел разделенных ':'. Например, "4:10:0:3" было бы допустимым значением этой строки.

tree_model :

GtkTreeModel.

iter :

GtkTreeIter.

Возвращает :

Вновь созданная строка. Должна освобождаться с помощью g_free().

Начиная с версии 2.2


gtk_tree_model_ref_node ()

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

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

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

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

tree_model :

GtkTreeModel.

iter :

GtkTreeIter.


gtk_tree_model_unref_node ()

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

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

Для получения большей информации смотрите gtk_tree_model_ref_node(). Пожалуйста отметьте, что удаленные элементы это не освобожденные элементы.

tree_model :

GtkTreeModel.

iter :

GtkTreeIter.


gtk_tree_model_get ()

void        gtk_tree_model_get              (GtkTreeModel *tree_model,
                                             GtkTreeIter *iter,
                                             ...);

Получает значение одной или более ячеек в строке на которую ссылается iter. Переменный список параметров должен содержать целочисленные номера колонок, каждый номер колонки сопровождается местом для хранения получаемого значения. Список заканчивается -1. Например, для получения значения из колонки 0 с типом G_TYPE_STRING, вы должны написать: gtk_tree_model_get (model, iter, 0, &place_string_here, -1), где place_string_here это gchar* для заполнения строкой. Если соответствует, возвращаемые значения должны быть освобождены или не ссылаемы.

tree_model :

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 :

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() возвращает TRUE.

model :

GtkTreeModel

func :

Функция вызываемая для каждого элемента

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 :

GtkTreeModel

path :

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 :

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 :

GtkTreeModel

path :

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 :

GtkTreeModel

path :

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. Вызывается моделью когда её строки перестраиваются.

tree_model :

GtkTreeModel

path :

GtkTreePath указатель элемента дерева где перестраиваются дочерние элементы

iter :

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

new_order :

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

Детали сигналов

Сигнал "row-changed"

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

Этот сигнал издаётся когда в модели изменяется строка.

tree_model :

GtkTreeModel который издал сигнал

path :

GtkTreePath идентифицирующий изменяемую строку

iter :

Допустимый GtkTreeIter указатель для измененной строки

user_data :

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


Сигнал "row-deleted"

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

Этот сигнал издаётся когда строка удаляется.

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

tree_model :

GtkTreeModel который издал сигнал

path :

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

user_data :

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


Сигнал "row-has-child-toggled"

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

Издаётся когда строка получила первую дочернюю строку или потеряна её последняя строка.

tree_model :

GtkTreeModel который издал сигнал

path :

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

iter :

Допустимый GtkTreeIter указатель для строки

user_data :

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


Сигнал "row-inserted"

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

Издаётся когда новая строка вставлена в модель.

Помните что строка в этой точке может быть ещё пустой, так как это обычный шаблон для вставки первой пустой строки, а затем заполнения нужными значениями.

tree_model :

GtkTreeModel который издал сигнал

path :

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

iter :

Допустимый GtkTreeIter указатель для новой строки

user_data :

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


Сигнал "rows-reordered"

void        user_function                  (GtkTreeModel *tree_model,
                                            GtkTreePath  *path,
                                            GtkTreeIter  *iter,
                                            gpointer      arg3,
                                            gpointer      user_data)       : Run first

Издаётся когда дочерние элементы в GtkTreeModel перестраиваются.

Помните, этот сигнал не издаётся когда строки перестраиваются с помощью DND, так как при этом осуществляется удаление и последующая вставка строки.

tree_model :

GtkTreeModel который издал сигнал

path :

GtkTreePath идентифицирующий дерево элементов в котором дочерние элементы были перестроены

iter :

Допустимый GtkTreeIter указывающий на элемент

user_data :

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

Смотрите также

GtkTreeView, GtkTreeStore, GtkListStore, GtkTreeDnd, GtkTreeSortable



[4] iter сокращение для iterator




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру