diff options
author | Jonathan Blandford <jrb@redhat.com> | 2001-03-10 01:34:48 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2001-03-10 01:34:48 +0000 |
commit | 351052e1662110612b2c850977a70f2948a68496 (patch) | |
tree | 6620125ed4b3386fac6ac4d8c101f84abe5640f2 /gtk/gtktreestore.c | |
parent | 79fed460d99ffeb75d8b4f71654a01ebf657b5e9 (diff) | |
download | gtk+-351052e1662110612b2c850977a70f2948a68496.tar.gz |
Make select_all not work if you're in SINGLE mode (it doesn't make that
Fri Mar 9 20:36:21 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeselection.c (gtk_tree_selection_select_all): Make
select_all not work if you're in SINGLE mode (it doesn't make that
much sense, anyway.)
* gtk/gtktreedatalist.c (_gtk_tree_data_list_node_to_value):
handle types more sanely.
(_gtk_tree_data_list_value_to_node): handle types more sanely.
(_gtk_tree_data_list_node_copy): handle types more sanely.
* gtk/gtkliststore.c (gtk_list_store_set_cell): fix to work with
GValue better. Converts the type as well.
* gtk/gtktreestore.c (gtk_tree_store_set_cell): fix to work with
GValue better. Converts the type as well.
Diffstat (limited to 'gtk/gtktreestore.c')
-rw-r--r-- | gtk/gtktreestore.c | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c index d26e3a21ca..f632ed3460 100644 --- a/gtk/gtktreestore.c +++ b/gtk/gtktreestore.c @@ -213,8 +213,16 @@ gtk_tree_store_new_with_types (gint n_columns, va_start (args, n_columns); for (i = 0; i < n_columns; i++) - gtk_tree_store_set_column_type (retval, i, va_arg (args, GType)); - + { + GType type = va_arg (args, GType); + if (! _gtk_tree_data_list_check_type (type)) + { + g_warning ("%s: Invalid type %s passed to gtk_tree_store_new_with_types\n", G_STRLOC, g_type_name (type)); + g_object_unref (G_OBJECT (retval)); + return NULL; + } + gtk_tree_store_set_column_type (retval, i, type); + } va_end (args); return retval; @@ -248,6 +256,18 @@ gtk_tree_store_set_n_columns (GtkTreeStore *tree_store, tree_store->n_columns = n_columns; } +/** + * gtk_tree_store_set_column_type: + * @tree_store: a #GtkTreeStore + * @column: column number + * @type: type of the data to be stored in @column + * + * Supported types include: %G_TYPE_UINT, %G_TYPE_INT, %G_TYPE_UCHAR, + * %G_TYPE_CHAR, %G_TYPE_BOOLEAN, %G_TYPE_POINTER, %G_TYPE_FLOAT, + * %G_TYPE_DOUBLE, %G_TYPE_STRING, %G_TYPE_OBJECT, and %G_TYPE_BOXED, along with + * subclasses of those types such as %GDK_TYPE_PIXBUF. + * + **/ void gtk_tree_store_set_column_type (GtkTreeStore *tree_store, gint column, @@ -256,7 +276,11 @@ gtk_tree_store_set_column_type (GtkTreeStore *tree_store, g_return_if_fail (tree_store != NULL); g_return_if_fail (GTK_IS_TREE_STORE (tree_store)); g_return_if_fail (column >=0 && column < tree_store->n_columns); - + if (!_gtk_tree_data_list_check_type (type)) + { + g_warning ("%s: Invalid type %s passed to gtk_tree_store_new_with_types\n", G_STRLOC, g_type_name (type)); + return; + } tree_store->column_headers[column] = type; } @@ -533,10 +557,36 @@ gtk_tree_store_set_cell (GtkTreeStore *tree_store, GtkTreeDataList *list; GtkTreeDataList *prev; GtkTreePath *path = NULL; + GValue real_value = {0, }; + gboolean converted = FALSE; g_return_if_fail (tree_store != NULL); g_return_if_fail (GTK_IS_TREE_STORE (tree_store)); g_return_if_fail (column >= 0 && column < tree_store->n_columns); + g_return_if_fail (value != NULL); + + if (! g_type_is_a (G_VALUE_TYPE (value), column->type)) + { + if (! (g_value_type_compatible (G_VALUE_TYPE (value), column->type) && + g_value_type_compatible (column->type, G_VALUE_TYPE (value)))) + { + g_warning ("%s: Unable to convert from %s to %s\n", + G_STRLOC, + g_type_name (G_VALUE_TYPE (value)), + g_type_name (column->type)); + return; + } + if (!g_value_transform (value, &real_value)) + { + g_warning ("%s: Unable to make conversion from %s to %s\n", + G_STRLOC, + g_type_name (G_VALUE_TYPE (value)), + g_type_name (column->type)); + g_value_unset (&real_value); + return; + } + converted = TRUE; + } prev = list = G_NODE (iter->user_data)->data; @@ -546,9 +596,14 @@ gtk_tree_store_set_cell (GtkTreeStore *tree_store, { if (column == 0) { - _gtk_tree_data_list_value_to_node (list, value); + if (converted) + _gtk_tree_data_list_value_to_node (list, &real_value); + else + _gtk_tree_data_list_value_to_node (list, value); gtk_tree_model_changed (GTK_TREE_MODEL (tree_store), path, iter); gtk_tree_path_free (path); + if (converted) + g_value_unset (&real_value); return; } @@ -575,9 +630,14 @@ gtk_tree_store_set_cell (GtkTreeStore *tree_store, list->next = NULL; column --; } - _gtk_tree_data_list_value_to_node (list, value); + if (converted) + _gtk_tree_data_list_value_to_node (list, real_value); + else + _gtk_tree_data_list_value_to_node (list, value); gtk_tree_model_changed (GTK_TREE_MODEL (tree_store), path, iter); gtk_tree_path_free (path); + if (converted) + g_value_unset (&real_value); } /** @@ -1004,8 +1064,7 @@ copy_node_data (GtkTreeStore *tree_store, col = 0; while (dl) { - copy_iter = _gtk_tree_data_list_node_copy (dl, - tree_store->column_headers[col]); + copy_iter = _gtk_tree_data_list_node_copy (dl, tree_store->column_headers[col]); if (copy_head == NULL) copy_head = copy_iter; @@ -1018,10 +1077,10 @@ copy_node_data (GtkTreeStore *tree_store, dl = dl->next; ++col; } - + G_NODE (dest_iter->user_data)->data = copy_head; - path = gtk_tree_store_get_path (tree_store, dest_iter); + path = gtk_tree_store_get_path (GTK_TREE_MODEL (tree_store), dest_iter); gtk_tree_model_changed (GTK_TREE_MODEL (tree_store), path, dest_iter); gtk_tree_path_free (path); } |