GtkListStore A list-like data structure that can be used with the #GtkTreeView The #GtkListStore object is a list model for use with a #GtkTreeView widget. It implements the #GtkTreeModel interface, and consequentialy, can use all of the methods available there. It also implements the #GtkTreeSortable interface so it can be sorted by the view. Finally, it also implements the tree drag and drop interfaces. The #GtkListStore can accept most GObject types as a column type, though it can't accept all custom types. Internally, it will keep a copy of data passed in (such as a string or a boxed pointer). Columns that accept #GObjects are handled a little differently. The #GtkListStore will keep a reference to the object instead of copying the value. As a result, if the object is modified, it is up to the application writer to call @gtk_tree_model_row_changed to emit the "row_changed" signal. This most commonly effects lists with #GdkPixbufs stored. Creating a simple list store. 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); } Performance Considerations Internally, the #GtkListStore is implemented with a linked list with a tail pointer. As a result, it is fast at data insertion and deletion, and not as fast at random data access. The #GtkListStore sets the #GTK_TREE_MODEL_ITERS_PERSIST flag, which means that #GtkTreeIters can be cached while the row exists. Thus, if access to a particular row is needed often, it is worth keeping the iter around. #GtkTreeModel, #GtkTreeStore @n_columns: @Varargs: @Returns: @n_columns: @types: @Returns: @list_store: @n_columns: @types: @list_store: @iter: @Varargs: @list_store: @iter: @var_args: @list_store: @iter: @column: @value: @list_store: @iter: @Returns: @store: @list_store: @iter: @position: @store: @list_store: @iter: @sibling: @store: @list_store: @iter: @sibling: @store: @list_store: @iter: @store: @list_store: @iter: @store: @list_store: @list_store: @iter: @Returns: @store: @new_order: @store: @a: @b: @store: @iter: @position: