Spec-Zone.ru › GTK 3.20

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”. Это чаще всего затрагивает списки сохранёнными GdkPixbuf.

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

Соображения по производительности

Внутренне, объект GtkListStore реализовывался как связанный список с указателем на хвост до GTK+ 2.6. В результате, он был быстрым при вставке и удалении данных, но медленным при случайном доступе к данным. Объект GtkListStore устанавливает флаг GTK_TREE_MODEL_ITERS_PERSIST, что означает, что GtkTreeIter могут кэшироваться, пока существует строка. Таким образом, если часто требуется доступ к определённой строке, и ваш код ожидается на более старых версиях 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);

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

Параметры

list_store

A GtkListStore

n_columns

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

types

массив из n GTypes.

[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

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

A GtkListStore

iter

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

[out][allow-none]

position

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

columns

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

[array length=n_values]

values

массив GValues.

[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

A 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

A GtkListStore

iter

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

[out]

gtk_list_store_clear ()

void
gtk_list_store_clear (GtkListStore *list_store);

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

Параметры

list_store

A GtkListStore.

gtk_list_store_iter_is_valid ()

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

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

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

Параметры

list_store

A GtkListStore.

iter

A GtkTreeIter.

Возвращает

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

С: 2.2

gtk_list_store_reorder ()

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

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

Параметры

store

A 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

A GtkListStore.

a

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

A GtkListStore.

iter

A 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]

Since: 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.20/GtkListStore.html

Spec-Zone.ru

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