![]() |
![]() |
![]() |
![]() |
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 the
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()
or
gtk_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()
and gtk_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()
or
gtk_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()
and
gtk_tree_view_column_set_visible()
.