GTK+ Reference Manual |
||||
---|---|---|---|---|
Top | Description | Object Hierarchy | Implemented Interfaces |
GtkListStoreGtkListStore Структура данных, похожая на список, используемая с GtkTreeView |
#include <gtk/gtk.h>
GtkListStore;
GtkListStore* gtk_list_store_new (gint n_columns,
...);
GtkListStore* gtk_list_store_newv (gint n_columns,
GType *types);
void gtk_list_store_set_column_types (GtkListStore *list_store,
gint n_columns,
GType *types);
void gtk_list_store_set (GtkListStore *list_store,
GtkTreeIter *iter,
...);
void gtk_list_store_set_valist (GtkListStore *list_store,
GtkTreeIter *iter,
va_list var_args);
void gtk_list_store_set_value (GtkListStore *list_store,
GtkTreeIter *iter,
gint column,
GValue *value);
gboolean gtk_list_store_remove (GtkListStore *list_store,
GtkTreeIter *iter);
void gtk_list_store_insert (GtkListStore *list_store,
GtkTreeIter *iter,
gint position);
void gtk_list_store_insert_before (GtkListStore *list_store,
GtkTreeIter *iter,
GtkTreeIter *sibling);
void gtk_list_store_insert_after (GtkListStore *list_store,
GtkTreeIter *iter,
GtkTreeIter *sibling);
void gtk_list_store_insert_with_values
(GtkListStore *list_store,
GtkTreeIter *iter,
gint position,
...);
void gtk_list_store_insert_with_valuesv
(GtkListStore *list_store,
GtkTreeIter *iter,
gint position,
gint *columns,
GValue *values,
gint n_values);
void gtk_list_store_prepend (GtkListStore *list_store,
GtkTreeIter *iter);
void gtk_list_store_append (GtkListStore *list_store,
GtkTreeIter *iter);
void gtk_list_store_clear (GtkListStore *list_store);
gboolean gtk_list_store_iter_is_valid (GtkListStore *list_store,
GtkTreeIter *iter);
void gtk_list_store_reorder (GtkListStore *store,
gint *new_order);
void gtk_list_store_swap (GtkListStore *store,
GtkTreeIter *a,
GtkTreeIter *b);
void gtk_list_store_move_before (GtkListStore *store,
GtkTreeIter *iter,
GtkTreeIter *position);
void gtk_list_store_move_after (GtkListStore *store,
GtkTreeIter *iter,
GtkTreeIter *position);
GObject
+----GtkListStore
GtkListStore осуществляет GtkTreeModel, GtkTreeDragSource, GtkTreeDragDest и GtkTreeSortable.
Объект GtkListStore это модель списка используемый с виджетом GtkTreeView. Он осуществляет GtkTreeModel интерфейс и логически может использовать все методы доступные там. Он также осуществляет GtkTreeSortable интерфейс, поэтому может быть отсортирован. Наконец, он осуществляет интерфейс drag and drop.
GtkListStore может применить
большинство типов GObject как тип столбца,
однако он не может применять обычные
типы. Внутри он сохраняет копию помещаемых
данных(такие как строка или контейнерный
указатель). Столбцы которые применяют
GObjects
обрабатываются немного по другому.
GtkListStore сохраняет ссылку на
объект вместо копии значения. Как
результат, если объект изменён, вызывается
gtk_tree_model_row_changed
издавая
сигнал "row_changed". Это обычно касается
списков с сохранёнными GdkPixbufs.
Пример 5. Создание простого списка хранения.
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);
/* Добавляем новую строку в модель */
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);
/* Поскольку сохраняется копия строки, мы
* освобождаем some_data.
*/
g_free (some_data);
}
/* Изменяем специфическую строку */
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);
}
Внутренне в предыдущих версиях GTK+ 2.6, GtkListStore был осуществлён с помощью связанных списков с указателем конца. Как результат, быстрое удаление и вставка данных и медленный произвольный доступ. 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" GtkTreeModel
в GtkListStore. Однако строка ещё
пуста и любой обработчик сигнала
подключаемый к "row_inserted" в этом
специфическом хранилище должен
предполагать ситуацию что строка может
быть пуста. Это особенно важно если вы
оборачиваете GtkListStore в
GtkTreeModelFilter и
используете GtkTreeModelFilterVisibleFunc.
Используя любую не атомарную операцию
для прикрепления строк к GtkListStore
заставит GtkTreeModelFilterVisibleFunc
сначала обратиться к пустой строке;
функция должна быть к этому готова.
typedef struct _GtkListStore GtkListStore;
gtk_list_store_new ()
GtkListStore* gtk_list_store_new (gint n_columns, ...);
Создаёт новый список хранения
n_columns
столбцов и помещением каждого типа. Помните, поддерживаются только стандартные базовые типы из GObject.Как пример,
gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF);
создаст новый GtkListStore с тремя столбцами, типов int, string и GdkPixbuf соответственно.
|
Количество столбцов в списке хранения |
|
Все типы GType для столбцов, от первого до последнего |
Возвращает : |
новый GtkListStore |
GtkListStore* gtk_list_store_newv (gint n_columns,
GType *types);
Функция создания без переменных аргументов. Используется прежде всего привязками языков.
|
Количество столбцов в списке хранения |
|
Массив типов GType для столбцов, от первого до последнего |
Возвращает : |
новый GtkListStore |
void gtk_list_store_set_column_types (GtkListStore *list_store,
gint n_columns,
GType *types);
Эта функция предназначена прежде всего для GObjects которые наследуются из GtkListStore, и должны использоваться только при создании нового GtkListStore. Она не функционирует после добавления строки, или методом вызова интерфейса GtkTreeModel.
|
|
|
Количество столбцов для списка хранения |
|
Длина массива n GTypes |
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)
.
|
|
|
Итератор строки |
|
Пары номер столбца и значение, заканчивается -1 |
void gtk_list_store_set_valist (GtkListStore *list_store,
GtkTreeIter *iter,
va_list var_args);
Смотрите gtk_list_store_set()
;
эта версия имеет va_list для использования
языковыми привязками.
|
|
|
Допустимый GtkTreeIter для изменяемой строки |
|
va_list список пар column/value |
void gtk_list_store_set_value (GtkListStore *list_store,
GtkTreeIter *iter,
gint column,
GValue *value);
Устанавливает данные в ячейку определенную
iter
и column
. Тип
value
должен конвертироваться
к типу столбца.
|
|
|
Допустимый GtkTreeIter изменяемой строки |
|
Номер столбца для изменения |
|
Новое значение для ячейки |
gboolean gtk_list_store_remove (GtkListStore *list_store,
GtkTreeIter *iter);
Удаляет строку из списка хранения. После
удаления, iter
устанавливается
в следующую доступную строку, или
отменяется если он указывал на последнюю
строку в list_store
.
|
|
|
Допустимый GtkTreeIter |
Возвращает : |
void gtk_list_store_insert (GtkListStore *list_store,
GtkTreeIter *iter,
gint position);
Создаёт новую строку в position
.
iter
изменяется для указания
на новую строку. Если position
больше чем количество строк в списке,
новая строка добавляется в список.
Строка будет пустой после вызова этой
функции. Для заполнения значений вы
должны вызвать gtk_list_store_set()
или gtk_list_store_set_value()
.
|
|
|
Устанавливаемый GtkTreeIter в значение новой строки |
|
Позиция для вставки новой строки |
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()
.
|
|
|
Устанавливаемый GtkTreeIter в значение новой строки |
|
Допустимый GtkTreeIter,
или |
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()
.
|
|
|
Устанавливаемый GtkTreeIter в значение новой строки |
|
Допустимый GtkTreeIter,
или |
void gtk_list_store_insert_with_values
(GtkListStore *list_store,
GtkTreeIter *iter,
gint position,
...);
Создаёт новую строку в position
.
iter
будет изменен для указания
на новую строку. Если position
больше чем число строк в списке, то новая
строка добавляется к списку. Строка
будет заполнена значением полученным
для этой функции.
Вызов gtk_list_store_insert_with_values(list_store,
iter, position...)
имеет тот же эффект как
вызов
gtk_list_store_insert (list_store, iter, position);
gtk_list_store_set (list_store, iter, ...);
разница в том, что в предыдущем издаётся
сигнал row_inserted, в то время как последний
издаст сигналы row_inserted, row_changed и, если
список хранения отсортирован,
rows_reordered. Так как издание сигнала
rows_reordered повторно может повлиять на
выполнение программы,
gtk_list_store_insert_with_values()
должен в основном использоваться для
вставки строк в сортированный список
хранения.
|
|
|
Устанавливаемый GtkTreeIter
в значение новой строки, или |
|
Позиция для вставки новой строки |
|
Пары столбца номер и значение, заканчиваются -1 |
Начиная с версии 2.6
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()
который берет столбцы и значения как
два массива, вместо переменных аргументов.
Эта функция в основном полезна для
языковых привязок.
|
|
|
Устанавливаемый GtkTreeIter
в значение новой строки, или |
|
Позиция для вставки новой строки |
|
Массив номеров столбцов |
|
Массив GValues |
|
Длина массивов |
Начиная с версии 2.6
void gtk_list_store_prepend (GtkListStore *list_store,
GtkTreeIter *iter);
Вставляет новую строку в начало
list_store
. iter
будет
изменён для указания на новую строку.
Строка будет пустой после вызова этой
функции. Для заполнения значений вы
должны вызвать gtk_list_store_set()
или gtk_list_store_set_value()
.
|
|
|
Устанавливаемый GtkTreeIter в значение новой строки |
void gtk_list_store_append (GtkListStore *list_store,
GtkTreeIter *iter);
Добавляет новую строку к list_store
.
iter
будет изменён для указания
на новую строку. Строка будет пустой
после вызова этой функции. Для заполнения
значений вы должны вызвать
gtk_list_store_set()
or gtk_list_store_set_value()
.
|
|
|
Устанавливаемый GtkTreeIter в значение добавленной строки |
void gtk_list_store_clear (GtkListStore *list_store);Удаляет все строки из списка хранения.
|
gboolean gtk_list_store_iter_is_valid (GtkListStore *list_store,
GtkTreeIter *iter);
Это очень медленная функция. Используйте её только для отладки и/или тестирования.
Проверят доступность итератора в GtkListStore.
|
|
|
|
Возвращает : |
|
Начиная с версии 2.2
void gtk_list_store_reorder (GtkListStore *store,
gint *new_order);
Перестраивает store
в порядок
указанный new_order
. Помните,
эта функция работает только на не
сортированных хранилищах.
|
|
|
Массив целочисленных отображающих
новую позицию каждого дочернего пункта
относительно его старой позиции,
например |
Начиная с версии 2.2
void gtk_list_store_swap (GtkListStore *store,
GtkTreeIter *a,
GtkTreeIter *b);
Переставляет a
и b
в store
. Помните, эта функция
работает только на не сортированных
хранилищах.
|
|
|
|
|
Другой GtkTreeIter. |
Начиная с версии 2.2
void gtk_list_store_move_before (GtkListStore *store,
GtkTreeIter *iter,
GtkTreeIter *position);
Перемещает iter
в store
в позицию перед position
. Помните,
эта функция работает только на не
сортированных хранилищах. Если position
равно NULL
,
iter
будет перемещен в конец
списка.
|
|
|
|
|
GtkTreeIter, или
|
Начиная с версии 2.2
void gtk_list_store_move_after (GtkListStore *store,
GtkTreeIter *iter,
GtkTreeIter *position);
Перемещает iter
в store
в позицию после position
. Помните,
эта функция работает только на не
сортированных хранилищах. Если position
равно NULL
,
iter
будет перемещён в начало
списка.
|
|
|
|
|
GtkTreeIter, или
|
Начиная с версии 2.2