1 /* Icon View/Editing and Drag-and-Drop
3 * The GtkIconView widget supports Editing and Drag-and-Drop.
4 * This example also demonstrates using the generic GtkCellLayout
5 * interface to set up cell renderers in an icon view.
10 #include "demo-common.h"
12 static GtkWidget *window = NULL;
22 fill_store (GtkListStore *store)
25 const gchar *text[] = { "Red", "Green", "Blue", "Yellow" };
28 /* First clear the store */
29 gtk_list_store_clear (store);
31 for (i = 0; i < 4; i++)
33 gtk_list_store_append (store, &iter);
34 gtk_list_store_set (store, &iter, COL_TEXT, text[i], -1);
43 store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING);
49 set_cell_color (GtkCellLayout *cell_layout,
50 GtkCellRenderer *cell,
51 GtkTreeModel *tree_model,
60 gtk_tree_model_get (tree_model, iter, COL_TEXT, &text, -1);
61 if (gdk_color_parse (text, &color))
63 (color.red >> 8) << 24 |
64 (color.green >> 8) << 16 |
65 (color.blue >> 8) << 8;
69 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 24, 24);
70 gdk_pixbuf_fill (pixbuf, pixel);
72 g_object_set (cell, "pixbuf", pixbuf, NULL);
74 g_object_unref (pixbuf);
78 edited (GtkCellRendererText *cell,
87 model = gtk_icon_view_get_model (GTK_ICON_VIEW (data));
88 path = gtk_tree_path_new_from_string (path_string);
90 gtk_tree_model_get_iter (model, &iter, path);
91 gtk_list_store_set (GTK_LIST_STORE (model), &iter,
94 gtk_tree_path_free (path);
98 do_iconview_edit (GtkWidget *do_widget)
102 GtkWidget *icon_view;
104 GtkCellRenderer *renderer;
106 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
108 gtk_window_set_screen (GTK_WINDOW (window),
109 gtk_widget_get_screen (do_widget));
110 gtk_window_set_title (GTK_WINDOW (window), "Editing and Drag-and-Drop");
112 g_signal_connect (window, "destroy",
113 G_CALLBACK (gtk_widget_destroyed), &window);
115 store = create_store ();
118 icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
119 g_object_unref (store);
121 gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
122 GTK_SELECTION_SINGLE);
123 gtk_icon_view_set_orientation (GTK_ICON_VIEW (icon_view),
124 GTK_ORIENTATION_HORIZONTAL);
125 gtk_icon_view_set_columns (GTK_ICON_VIEW (icon_view), 2);
126 gtk_icon_view_set_reorderable (GTK_ICON_VIEW (icon_view), TRUE);
128 renderer = gtk_cell_renderer_pixbuf_new ();
129 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
131 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (icon_view),
136 renderer = gtk_cell_renderer_text_new ();
137 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
139 g_object_set (renderer, "editable", TRUE, NULL);
140 g_signal_connect (renderer, "edited", G_CALLBACK (edited), icon_view);
141 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (icon_view),
146 gtk_container_add (GTK_CONTAINER (window), icon_view);
149 if (!gtk_widget_get_visible (window))
150 gtk_widget_show_all (window);
153 gtk_widget_destroy (window);