-
How do I associate some data with a row in the tree?
Remember that the GtkTreeModel columns don’t necessarily have to be displayed. So you can put non-user-visible data in your model just like any other data, and retrieve it with
gtk_tree_model_get()
. See thetree widget overview . -
How do I put an image and some text in the same column?
You can pack more than one GtkCellRenderer into a single GtkTreeViewColumn using
gtk_tree_view_column_pack_start()
orgtk_tree_view_column_pack_end()
. So pack both a GtkCellRendererPixbuf and a GtkCellRendererText into the column. -
I can set data easily on my GtkTreeStore or GtkListStore models using
gtk_list_store_set()
andgtk_tree_store_set()
, but can’t read it back?Both the GtkTreeStore and the GtkListStore implement the GtkTreeModel interface. As a consequence, you can use any function this interface implements. The easiest way to read a set of data back is to use
gtk_tree_model_get()
. -
How do I change the way that numbers are formatted by GtkTreeView?
Use
gtk_tree_view_insert_column_with_data_func()
orgtk_tree_view_column_set_cell_data_func()
and do the conversion from number to string yourself (with, say,g_strdup_printf()
).The following example demonstrates this:
enum { DOUBLE_COLUMN, N_COLUMNS }; GtkListStore *mycolumns; GtkTreeView *treeview; void my_cell_double_to_text (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { GtkCellRendererText *cell_text = (GtkCellRendererText *)cell; double d; char *text; /* Get the double value from the model. */ gtk_tree_model_get (tree_model, iter, (int)data, &d, -1); /* Now we can format the value ourselves. */ text = g_strdup_printf ("%.2f", d); g_object_set (cell, "text", text, NULL); g_free (text); } void set_up_new_columns (GtkTreeView *myview) { GtkCellRendererText *renderer; GtkTreeViewColumn *column; GtkListStore *mycolumns; /* Create the data model and associate it with the given TreeView */ mycolumns = gtk_list_store_new (N_COLUMNS, G_TYPE_DOUBLE); gtk_tree_view_set_model (myview, GTK_TREE_MODEL (mycolumns)); /* Create a GtkCellRendererText */ renderer =
gtk_cell_renderer_text_new()
; /* Create a new column that has a title ("Example column"), * uses the above created renderer that will render the double * value into text from the associated model's rows. */ column =gtk_tree_view_column_new()
; gtk_tree_view_column_set_title (column, "Example column"); renderer =gtk_cell_renderer_text_new()
; gtk_tree_view_column_pack_start (column, renderer, TRUE); /* Append the new column after the GtkTreeView's previous columns. */ gtk_tree_view_append_column (GTK_TREE_VIEW (myview), column); /* Since we created the column by hand, we can set it up for our * needs, e.g. set its minimum and maximum width, etc. */ /* Set up a custom function that will be called when the column content * is rendered. We use the func_data pointer as an index into our * model. This is convenient when using multi column lists. */ gtk_tree_view_column_set_cell_data_func (column, renderer, my_cell_double_to_text, (gpointer)DOUBLE_COLUMN, NULL); } -
How do I hide the expander arrows in my tree view?
Set the expander-column property of the tree view to a hidden column. See
gtk_tree_view_set_expander_column()
andgtk_tree_view_column_set_visible()
.