Spec-Zone.ru › GTK 3.22

GtkListStore

GtkListStore — Структура данных, похожая на список, которая может использоваться с GtkTreeView

Функции

GtkListStore * gtk_list_store_new ()
GtkListStore * gtk_list_store_newv ()
void gtk_list_store_set_column_types ()
void gtk_list_store_set ()
void gtk_list_store_set_valist ()
void gtk_list_store_set_value ()
void gtk_list_store_set_valuesv ()
gboolean gtk_list_store_remove ()
void gtk_list_store_insert ()
void gtk_list_store_insert_before ()
void gtk_list_store_insert_after ()
void gtk_list_store_insert_with_values ()
void gtk_list_store_insert_with_valuesv ()
void gtk_list_store_prepend ()
void gtk_list_store_append ()
void gtk_list_store_clear ()
gboolean gtk_list_store_iter_is_valid ()
void gtk_list_store_reorder ()
void gtk_list_store_swap ()
void gtk_list_store_move_before ()
void gtk_list_store_move_after ()

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

struct GtkListStore

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

    GObject
    ╰── GtkListStore

Реализованные интерфейсы

GtkListStore реализует GtkTreeModel, GtkTreeDragSource, GtkTreeDragDest, GtkTreeSortable и GtkBuildable.

Файлы заголовков

#include <gtk/gtk.h>

Описание

Объект GtkListStore — это модель списка для использования с виджетом GtkTreeView. Он реализует интерфейс GtkTreeModel и, следовательно, может использовать все доступные там методы. Он также реализует интерфейс GtkTreeSortable, чтобы его можно было сортировать с помощью представления. Наконец, он также реализует интерфейсы перемещения и перетаскивания для дерева перетаскивания.

Объект GtkListStore может принимать большинство типов GObject в качестве типа столбца, хотя не все пользовательские типы. Внутренне он будет хранить копию переданных данных (например, строки или упакованного указателя). Столбцы, которые принимают GObject, обрабатываются немного иначе. GtkListStore будет хранить ссылку на объект вместо копирования значения. В результате, если объект модифицируется, разработчик приложения должен вызвать gtk_tree_model_row_changed(), чтобы испустить сигнал “row_changed”. Это чаще всего затрагивает списки сохранёнными GdkPixbufs.

Пример создания простого хранилища списка:

Учёт производительности

Внутренне GtkListStore был реализован в виде связанного списка с указателем на хвост до GTK+ 2.6. В результате, он был быстрым при вставке и удалении данных, но не быстрым при случайном доступе к данным. GtkListStore устанавливает флаг GTK_TREE_MODEL_ITERS_PERSIST, что означает, что GtkTreeIters могут быть кэшированы, пока строка существует. Таким образом, если часто требуется доступ к определённой строке, и ваш код должен работать на старых версиях GTK+, стоит сохранить итератор.

Атомарные операции

Важно отметить, что только методы gtk_list_store_insert_with_values() и gtk_list_store_insert_with_valuesv() атомарны в том смысле, что строка добавляется в хранилище, а значения заполняются в одной операции по отношению к сигнализации GtkTreeModel. В отличие от этого, использование, например, gtk_list_store_append() и затем gtk_list_store_set() сначала создаст строку, что вызовет сигнал “row-inserted” в GtkListStore. Однако строка всё ещё пуста, и любой обработчик сигналов, подключённый к “row-inserted” в этом хранилище, должен быть готов к ситуации, когда строка может быть пустой. Это особенно важно, если вы оборачиваете GtkListStore в GtkTreeModelFilter и используете GtkTreeModelFilterVisibleFunc. Использование любых неатомарных операций для добавления строк в GtkListStore приведёт к тому, что GtkTreeModelFilterVisibleFunc будет вызван с пустой строкой первой; функция должна быть готова к этому.

GtkListStore как GtkBuildable

Реализация GtkListStore интерфейса GtkBuildable позволяет указать столбцы модели с элементом <columns>, который может содержать несколько элементов <column>, каждый из которых определяет один столбец модели. Атрибут «type» указывает тип данных для столбца.

Кроме того, можно указать содержимое хранилища списка в определении пользовательского интерфейса с помощью элемента <data>. Он может содержать несколько элементов <row>, каждый из которых указывает содержимое одной строки модели списка. Внутри <row> элементы <col> определяют содержимое отдельных ячеек.

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

Пример фрагмента определения пользовательского интерфейса для хранилища списка:

Функции

gtk_list_store_new ()

GtkListStore *
gtk_list_store_new (gint n_columns,
                    ...);

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

Например, gtk_list_store_new (3, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF); создаст новое хранилище GtkListStore с тремя столбцами типа int, string и GdkPixbuf соответственно.

Параметры

n_columns

количество столбцов в хранилище списка

...

все типы GType для столбцов, от первого до последнего

Возвращает

новое GtkListStore

gtk_list_store_newv ()

GtkListStore *
gtk_list_store_newv (gint n_columns,
                     GType *types);

Функция создания без использования переменного числа аргументов. Используется в основном языковыми связками.

[rename-to gtk_list_store_new]

Параметры

n_columns

количество столбцов в хранилище списка

types

массив типов GType для столбцов, от первого до последнего.

[array length=n_columns]

Возвращает

новое GtkListStore.

[transfer full]

gtk_list_store_set_column_types ()

void
gtk_list_store_set_column_types (GtkListStore *list_store,
                                 gint n_columns,
                                 GType *types);

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

Параметры

list_store

A GtkListStore

n_columns

Количество столбцов для хранилища списка

types

массив из n элементов типа GType.

[array length=n_columns]

gtk_list_store_set ()

void
gtk_list_store_set (GtkListStore *list_store,
                    GtkTreeIter *iter,
                    ...);

Устанавливает значения одного или нескольких ячеек в строке, на которую ссылается iter. Список аргументов должен содержать номера столбцов (целые числа), а после каждого номера столбца должно следовать значение, которое нужно установить. Список завершается значением -1. Например, чтобы установить столбец 0 типа G_TYPE_STRING со значением “Foo”, необходимо написать gtk_list_store_set (store, iter, 0, "Foo", -1).

Значение будет сохранённо в хранилище, если оно является G_TYPE_OBJECT, и будет скопировано, если это G_TYPE_STRING или G_TYPE_BOXED.

Параметры

list_store

a GtkListStore

iter

итератор строки

...

пары номер_столбца/значение, завершённые -1

gtk_list_store_set_valist ()

void
gtk_list_store_set_valist (GtkListStore *list_store,
                           GtkTreeIter *iter,
                           va_list var_args);

См. gtk_list_store_set(); этот вариант принимает va_list для использования языковыми связками.

Параметры

list_store

A GtkListStore

iter

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

var_args

va_list пар столбец/значение

gtk_list_store_set_value ()

void
gtk_list_store_set_value (GtkListStore *list_store,
                          GtkTreeIter *iter,
                          gint column,
                          GValue *value);

Устанавливает данные в ячейке, указанной iter и column . Тип value должен быть конвертируем в тип столбца.

Параметры

list_store

A GtkListStore

iter

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

column

номер изменяемого столбца

value

новое значение для ячейки

gtk_list_store_set_valuesv ()

void
gtk_list_store_set_valuesv (GtkListStore *list_store,
                            GtkTreeIter *iter,
                            gint *columns,
                            GValue *values,
                            gint n_values);

Вариант gtk_list_store_set_valist(), который принимает столбцы и значения в виде двух массивов вместо переменного числа аргументов. Эта функция предназначена в основном для языковых связок и в случае, если количество изменяемых столбцов неизвестно до выполнения.

[rename-to gtk_list_store_set]

Параметры

list_store

A GtkListStore

iter

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

columns

массив номеров столбцов.

[array length=n_values]

values

массив GValues.

[array length=n_values]

n_values

длина массивов columns и values

Since: 2.12

gtk_list_store_remove ()

gboolean
gtk_list_store_remove (GtkListStore *list_store,
                       GtkTreeIter *iter);

Удаляет заданную строку из списка хранилищ. После удаления iter устанавливается на следующую допустимую строку или аннулируется, если она указывала на последнюю строку в list_store.

Параметры

list_store

A GtkListStore

iter

Допустимая GtkTreeIter

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

TRUE, если iter допустима, FALSE — если нет.

gtk_list_store_insert ()

void
gtk_list_store_insert (GtkListStore *list_store,
                       GtkTreeIter *iter,
                       gint position);

Создаёт новую строку в позиции position. iter будет изменено, чтобы указать на эту новую строку. Если position равно -1 или больше, чем количество строк в списке, то новая строка будет добавлена в конец списка. После вызова этой функции строка будет пустой. Чтобы заполнить значения, необходимо вызвать gtk_list_store_set() или gtk_list_store_set_value().

Параметры

list_store

A GtkListStore

iter

Неинициализированная GtkTreeIter, которая будет установлена на новую строку.

[out]

position

позиция для вставки новой строки, или -1 для добавления в конец

gtk_list_store_insert_before ()

void
gtk_list_store_insert_before (GtkListStore *list_store,
                              GtkTreeIter *iter,
                              GtkTreeIter *sibling);

Вставляет новую строку перед sibling. Если sibling равно NULL, то строка будет добавлена в конец списка. iter будет изменено, чтобы указать на эту новую строку. После вызова этой функции строка будет пустой. Чтобы заполнить значения, необходимо вызвать gtk_list_store_set() или gtk_list_store_set_value().

Параметры

list_store

A GtkListStore

iter

Неинициализированная GtkTreeIter, которая будет установлена на новую строку.

[out]

sibling

Допустимая GtkTreeIter или NULL.

[allow-none]

gtk_list-store_insert_after ()

void
gtk_list_store_insert_after (GtkListStore *list_store,
                             GtkTreeIter *iter,
                             GtkTreeIter *sibling);

Вставляет новую строку после sibling. Если sibling равно NULL, то строка будет добавлена в начало списка. iter будет изменено, чтобы указать на эту новую строку. После вызова этой функции строка будет пустой. Чтобы заполнить значения, необходимо вызвать gtk_list_store_set() или gtk_list_store_set_value().

Параметры

list_store

A GtkListStore

iter

Неинициализированная GtkTreeIter, которая будет установлена на новую строку.

[out]

sibling

Допустимая GtkTreeIter или NULL.

[allow-none]

gtk_list_store_insert_with_values ()

void
gtk_list_store_insert_with_values (GtkListStore *list_store,
                                   GtkTreeIter *iter,
                                   gint position,
                                   ...);

Создаёт новую строку в позиции position. iter будет изменено, чтобы указать на эту новую строку. Если position равно -1 или больше, чем количество строк в списке, то новая строка будет добавлена в конец списка. Строка будет заполнена значениями, заданными в этой функции.

Вызов gtk_list_store_insert_with_values (list_store, iter, position...) эквивалентен вызову

enum {
  COLUMN_STRING,
  COLUMN_INT,
  COLUMN_BOOLEAN,
  N_COLUMNS
};

{
  GtkListStore *list_store;
  GtkTreePath *path;
  GtkTreeIter iter;
  gint i;

  list_store = gtk_list_store_new (N_COLUMNS,
                                   G_TYPE_STRING,
                                   G_TYPE_INT,
                                   G_TYPE_BOOLEAN);

  for (i = 0; i < 10; i++)
    {
      gchar *some_data;

      some_data = get_some_data (i);

      // Add a new row to the model
      gtk_list_store_append (list_store, &iter);
      gtk_list_store_set (list_store, &iter,
                          COLUMN_STRING, some_data,
                          COLUMN_INT, i,
                          COLUMN_BOOLEAN,  FALSE,
                          -1);

      // As the store will keep a copy of the string internally,
      // we free some_data.
      g_free (some_data);
    }

  // Modify a particular row
  path = gtk_tree_path_new_from_string ("4");
  gtk_tree_model_get_iter (GTK_TREE_MODEL (list_store),
                           &iter,
                           path);
  gtk_tree_path_free (path);
  gtk_list_store_set (list_store, &iter,
                      COLUMN_BOOLEAN, TRUE,
                      -1);
}

с той разницей, что первый вызов генерирует только сигнал row_inserted, а второй — row_inserted, row_changed и, если хранилище списка отсортировано, rows_reordered. Поскольку многократная генерация сигнала rows_reordered может повлиять на производительность программы, gtk_list_store_insert_with_values() обычно предпочтительнее при вставке строк в отсортированное хранилище списка.

Параметры

list_store

A GtkListStore

iter

Неинициализированная GtkTreeIter, которая будет установлена на новую строку, или NULL.

[out][allow-none]

position

позиция для вставки новой строки, или -1 для добавления в конец после существующих строк

...

пары номера столбца и значения, завершаемые -1

Since: 2.6

gtk_list_store_insert_with_valuesv ()

void
gtk_list_store_insert_with_valuesv (GtkListStore *list_store,
                                    GtkTreeIter *iter,
                                    gint position,
                                    gint *columns,
                                    GValue *values,
                                    gint n_values);

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

Параметры

list_store

Объект GtkListStore

iter

Неинициализированный объект GtkTreeIter для установки новой строки, или NULL.

[out][allow-none]

position

Позиция вставки новой строки; -1 для последней позиции.

columns

Массив номеров столбцов.

[array length=n_values]

values

Массив GValue.

[array length=n_values]

n_values

Длина массивов columns и values

С: 2.6

gtk_list_store_prepend ()

void
gtk_list_store_prepend (GtkListStore *list_store,
                        GtkTreeIter *iter);

Добавляет новую строку в начало list_store. Значение iter будет изменено для указания на эту новую строку. Строка будет пустой после вызова этой функции. Для заполнения значений необходимо вызвать gtk_list_store_set() или gtk_list_store_set_value().

Параметры

list_store

Объект GtkListStore

iter

Неинициализированный объект GtkTreeIter для установки на добавленную строку.

[out]

gtk_list_store_append ()

void
gtk_list_store_append (GtkListStore *list_store,
                       GtkTreeIter *iter);

Добавляет новую строку в конец list_store. Значение iter будет изменено для указания на эту новую строку. Строка будет пустой после вызова этой функции. Для заполнения значений необходимо вызвать gtk_list_store_set() или gtk_list_store_set_value().

Параметры

list_store

Объект GtkListStore

iter

Неинициализированный объект GtkTreeIter для установки на добавленную строку.

[out]

gtk_list_store_clear ()

void
gtk_list_store_clear (GtkListStore *list_store);

Удаляет все строки из хранилища списка.

Параметры

list_store

объект GtkListStore.

gtk_list_store_iter_is_valid ()

gboolean
gtk_list_store_iter_is_valid (GtkListStore *list_store,
                              GtkTreeIter *iter);

Эта функция медленная. Используйте только для отладки и тестирования.

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

Параметры

list_store

Объект GtkListStore.

iter

Объект GtkTreeIter.

Возвращает

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

С: 2.2

gtk_list_store_reorder ()

void
gtk_list_store_reorder (GtkListStore *store,
                        gint *new_order);

Переупорядочивает store в соответствии с порядком, указанным в new_order. Обратите внимание, что эта функция работает только с несортированными хранилищами.

Параметры

store

Объект GtkListStore.

new_order

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

[array zero-terminated=1]

С: 2.2

gtk_list_store_swap ()

void
gtk_list_store_swap (GtkListStore *store,
                     GtkTreeIter *a,
                     GtkTreeIter *b);

Меняет местами a и b в store. Обратите внимание, что эта функция работает только с несортированными хранилищами.

Параметры

store

Объект GtkListStore.

a

Объект GtkTreeIter.

b

Другой объект GtkTreeIter.

С: 2.2

gtk_list_store_move_before ()

void
gtk_list_store_move_before (GtkListStore *store,
                            GtkTreeIter *iter,
                            GtkTreeIter *position);

Перемещает iter в store на позицию перед position. Обратите внимание, что эта функция работает только с несортированными хранилищами. Если position равен NULL, iter будет перемещен в конец списка.

Параметры

store

Объект GtkListStore.

iter

Объект GtkTreeIter.

position

Объект GtkTreeIter, или NULL.

[allow-none]

С: 2.2

gtk_list_store_move_after ()

void
gtk_list_store_move_after (GtkListStore *store,
                           GtkTreeIter *iter,
                           GtkTreeIter *position);

Перемещает iter в store в позицию после position. Обратите внимание, что эта функция работает только с несортированными хранилищами. Если position равно NULL, iter будет перемещено в начало списка.

Параметры

store

A GtkListStore.

iter

A GtkTreeIter.

position

A GtkTreeIter или NULL.

[allow-none]

С: 2.2

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

struct GtkListStore

struct GtkListStore;

См. также

GtkTreeModel, GtkTreeStore

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

Spec-Zone.ru

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