diff options
author | Jonathan Blandford <jrb@redhat.com> | 2001-09-25 16:44:39 +0000 |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2001-09-25 16:44:39 +0000 |
commit | 92841cb95add212c35b2ef58129f043c33676c52 (patch) | |
tree | a58a60c4bc75ea3f716bfd59d3c193cf417fc5f4 /tests/testtreeedit.c | |
parent | 8a2d408daed1b616ab760cdfeec050cb6e54c1de (diff) | |
download | gdk-pixbuf-92841cb95add212c35b2ef58129f043c33676c52.tar.gz |
Make a GtkCellEditable (get_widget_window_size): Change to let it honor
Tue Sep 25 12:34:42 2001 Jonathan Blandford <jrb@redhat.com>
* gtk/gtkentry.c: Make a GtkCellEditable
(get_widget_window_size): Change to let it honor size_allocate
when a CellEditable.
* gtk/gtktreeview.c: M-x clean-line-ends. Lots of focus and
editable changes.
(gtk_tree_view_set_cursor): Now you can set the cursor
horizontally, as well as start editing.
* gtk/gtkstyle.c (gtk_default_draw_check): changing toggle drawing
code to look more like the other check buttons.
* gtk/gtkcellrenderertoggle.c (gtk_cell_renderer_toggle_get_size):
Change the way we calculate cell size.
* gtk/gtkmarshal.list (VOID:STRING,STRING): new marshaller.
* demos/gtk-demo/sizegroup.c: Add mnemonics.
* gtk/gtkcellrenderer.c (gtk_cell_renderer_get_size): Fix docs.
Fix logic.
* gtk/gtkcellrenderertext.c: Change to be editable.
* gtk/gtkcellrenderertoggle.c: Change to be activatable.
* test/testtreesort.c: Fix misspelling
* test/testreecolumns.c: Add mnemonics.
* test/testreeedit.c: New test program.
Diffstat (limited to 'tests/testtreeedit.c')
-rw-r--r-- | tests/testtreeedit.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/testtreeedit.c b/tests/testtreeedit.c new file mode 100644 index 000000000..c9f595062 --- /dev/null +++ b/tests/testtreeedit.c @@ -0,0 +1,140 @@ +#include <gtk/gtk.h> + +typedef struct { + const gchar *string; + gboolean is_editable; +} ListEntry; + +enum { + STRING_COLUMN, + IS_EDITABLE_COLUMN, + NUM_COLUMNS +}; + +static ListEntry model_strings[] = +{ + {"A simple string", TRUE }, + {"Another string!", TRUE }, + {"Guess what, a third string. This one can't be edited", FALSE }, + {"And then a fourth string. Neither can this", FALSE }, + {"Multiline\nFun!", TRUE }, + { NULL } +}; + +static GtkTreeModel * +create_model (void) +{ + GtkListStore *model; + GtkTreeIter iter; + gint i; + + model = gtk_list_store_new (NUM_COLUMNS, + G_TYPE_STRING, + G_TYPE_BOOLEAN); + + for (i = 0; model_strings[i].string != NULL; i++) + { + gtk_list_store_append (model, &iter); + + gtk_list_store_set (model, &iter, + STRING_COLUMN, model_strings[i].string, + IS_EDITABLE_COLUMN, model_strings[i].is_editable, + -1); + } + + return GTK_TREE_MODEL (model); +} + +static void +toggled (GtkCellRendererToggle *cell, + gchar *path_string, + gpointer data) +{ + GtkTreeModel *model = GTK_TREE_MODEL (data); + GtkTreeIter iter; + GtkTreePath *path = gtk_tree_path_new_from_string (path_string); + gboolean value; + + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, IS_EDITABLE_COLUMN, &value, -1); + + value = !value; + gtk_list_store_set (GTK_LIST_STORE (model), &iter, IS_EDITABLE_COLUMN, value, -1); + + gtk_tree_path_free (path); +} + +static void +edited (GtkCellRendererText *cell, + gchar *path_string, + gchar *new_text, + gpointer data) +{ + GtkTreeModel *model = GTK_TREE_MODEL (data); + GtkTreeIter iter; + GtkTreePath *path = gtk_tree_path_new_from_string (path_string); + + gtk_tree_model_get_iter (model, &iter, path); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, STRING_COLUMN, new_text, -1); + + gtk_tree_path_free (path); +} + +gint +main (gint argc, gchar **argv) +{ + GtkWidget *window; + GtkWidget *scrolled_window; + GtkWidget *tree_view; + GtkTreeModel *tree_model; + GtkCellRenderer *renderer; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "GtkTreeView editing sample"); + gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL); + + scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_container_add (GTK_CONTAINER (window), scrolled_window); + + tree_model = create_model (); + tree_view = gtk_tree_view_new_with_model (tree_model); + gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE); + gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); + + renderer = gtk_cell_renderer_text_new (); + gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), + -1, "String", + renderer, + "text", STRING_COLUMN, + "editable", IS_EDITABLE_COLUMN, + NULL); + + g_signal_connect (G_OBJECT (renderer), "edited", + G_CALLBACK (edited), tree_model); + renderer = gtk_cell_renderer_toggle_new (); + g_signal_connect (G_OBJECT (renderer), "toggled", + G_CALLBACK (toggled), tree_model); + + g_object_set (G_OBJECT (renderer), + "xalign", 0.0, + "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE, + NULL); + gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), + -1, "Editable", + renderer, + "active", IS_EDITABLE_COLUMN, + NULL); + gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view); + + gtk_window_set_default_size (GTK_WINDOW (window), + 650, 400); + + gtk_widget_show_all (window); + gtk_main (); + + return 0; +} |