краткое описание#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 сохраняет ссылку на
объект вместо копии значения. как
результат, если объект изменён, вызывается
пример 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+, он должен иметь в наличии итератор. атомарные операцииважно отметить, что только методы
деталиgtkliststoretypedef struct _gtkliststore gtkliststore; gtk_list_store_new ()gtkliststore* gtk_list_store_new (gint n_columns, ...);
создаёт новый список хранения как пример,
gtk_list_store_newv ()gtkliststore* gtk_list_store_newv (gint n_columns, gtype *types); функция создания без переменных аргументов. используется прежде всего привязками языков.
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.
gtk_list_store_set ()void gtk_list_store_set (gtkliststore *list_store, gtktreeiter *iter, ...);
устанавливает значение одной или более
ячеек в строке указанной
gtk_list_store_set_valist ()void gtk_list_store_set_valist (gtkliststore *list_store, gtktreeiter *iter, va_list var_args);
смотрите
gtk_list_store_set_value ()void gtk_list_store_set_value (gtkliststore *list_store, gtktreeiter *iter, gint column, gvalue *value);
устанавливает данные в ячейку определенную
gtk_list_store_remove ()gboolean gtk_list_store_remove (gtkliststore *list_store, gtktreeiter *iter);
удаляет строку из списка хранения. после
удаления,
gtk_list_store_insert ()void gtk_list_store_insert (gtkliststore *list_store, gtktreeiter *iter, gint position);
создаёт новую строку в
gtk_list_store_insert_before ()void gtk_list_store_insert_before (gtkliststore *list_store, gtktreeiter *iter, gtktreeiter *sibling);
вставляет новую строку перед
gtk_list_store_insert_after ()void gtk_list_store_insert_after (gtkliststore *list_store, gtktreeiter *iter, gtktreeiter *sibling);
вставляет новую строку после
gtk_list_store_insert_with_values ()void gtk_list_store_insert_with_values (gtkliststore *list_store, gtktreeiter *iter, gint 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 повторно может повлиять на
выполнение программы,
начиная с версии 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);
вариант
начиная с версии 2.6 gtk_list_store_prepend ()void gtk_list_store_prepend (gtkliststore *list_store, gtktreeiter *iter);
вставляет новую строку в начало
gtk_list_store_append ()void gtk_list_store_append (gtkliststore *list_store, gtktreeiter *iter);
добавляет новую строку к
gtk_list_store_clear ()void gtk_list_store_clear (gtkliststore *list_store); удаляет все строки из списка хранения.
gtk_list_store_iter_is_valid ()gboolean gtk_list_store_iter_is_valid (gtkliststore *list_store, gtktreeiter *iter); вниманиеэто очень медленная функция. используйте её только для отладки и/или тестирования. проверят доступность итератора в gtkliststore.
начиная с версии 2.2 gtk_list_store_reorder ()void gtk_list_store_reorder (gtkliststore *store, gint *new_order);
перестраивает
начиная с версии 2.2 gtk_list_store_swap ()void gtk_list_store_swap (gtkliststore *store, gtktreeiter *a, gtktreeiter *b);
переставляет
начиная с версии 2.2 gtk_list_store_move_before ()void gtk_list_store_move_before (gtkliststore *store, gtktreeiter *iter, gtktreeiter *position);
перемещает
начиная с версии 2.2 gtk_list_store_move_after ()void gtk_list_store_move_after (gtkliststore *store, gtktreeiter *iter, gtktreeiter *position);
перемещает
начиная с версии 2.2 смотрите также |