3 #include <gtk/gtkcellview.h>
9 * oh yes, this test app surely has a lot of ugly code
14 create_color_pixbuf (const char *color)
24 if (!gdk_color_parse (color, &col))
27 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
31 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
32 p = pixels = gdk_pixbuf_get_pixels (pixbuf);
34 num = gdk_pixbuf_get_width (pixbuf) *
35 gdk_pixbuf_get_height (pixbuf);
37 for (x = 0; x < num; x++) {
38 p[0] = col.red / 65535 * 255;
39 p[1] = col.green / 65535 * 255;
40 p[2] = col.blue / 65535 * 255;
48 create_combo_box_grid_demo ()
52 GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
55 store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
57 combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
58 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
60 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
61 cell, "pixbuf", 0, NULL);
62 gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (combo),
66 gtk_list_store_append (store, &iter);
67 gtk_list_store_set (store, &iter,
68 0, create_color_pixbuf ("red"),
71 gtk_list_store_append (store, &iter);
72 gtk_list_store_set (store, &iter,
73 0, create_color_pixbuf ("green"),
76 gtk_list_store_append (store, &iter);
77 gtk_list_store_set (store, &iter,
78 0, create_color_pixbuf ("blue"),
82 gtk_list_store_append (store, &iter);
83 gtk_list_store_set (store, &iter,
84 0, create_color_pixbuf ("yellow"),
87 gtk_list_store_append (store, &iter);
88 gtk_list_store_set (store, &iter,
89 0, create_color_pixbuf ("black"),
92 gtk_list_store_append (store, &iter);
93 gtk_list_store_set (store, &iter,
94 0, create_color_pixbuf ("white"),
98 gtk_list_store_append (store, &iter);
99 gtk_list_store_set (store, &iter,
100 0, create_color_pixbuf ("gray"),
103 gtk_list_store_append (store, &iter);
104 gtk_list_store_set (store, &iter,
105 0, create_color_pixbuf ("snow"),
108 gtk_list_store_append (store, &iter);
109 gtk_list_store_set (store, &iter,
110 0, create_color_pixbuf ("magenta"),
113 g_object_unref (store);
115 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
121 static GtkTreeModel *
129 cellview = gtk_cell_view_new ();
131 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
133 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
134 GTK_ICON_SIZE_BUTTON, NULL);
135 gtk_list_store_append (store, &iter);
136 gtk_list_store_set (store, &iter,
138 1, "gtk-stock-dialog-warning",
141 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_STOP,
142 GTK_ICON_SIZE_BUTTON, NULL);
143 gtk_list_store_append (store, &iter);
144 gtk_list_store_set (store, &iter,
149 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
150 GTK_ICON_SIZE_BUTTON, NULL);
151 gtk_list_store_append (store, &iter);
152 gtk_list_store_set (store, &iter,
157 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
158 GTK_ICON_SIZE_BUTTON, NULL);
159 gtk_list_store_append (store, &iter);
160 gtk_list_store_set (store, &iter,
162 1, "gtk-stock-clear",
165 gtk_list_store_append (store, &iter);
166 gtk_list_store_set (store, &iter,
171 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_OPEN,
172 GTK_ICON_SIZE_BUTTON, NULL);
173 gtk_list_store_append (store, &iter);
174 gtk_list_store_set (store, &iter,
179 gtk_widget_destroy (cellview);
181 return GTK_TREE_MODEL (store);
185 setup_combo_entry (GtkWidget *entry_box)
187 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
189 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
191 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
192 "la la la dum de dum la la la la la la boom de da la la");
193 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
195 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
197 gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
202 set_sensitive (GtkCellLayout *cell_layout,
203 GtkCellRenderer *cell,
204 GtkTreeModel *tree_model,
212 path = gtk_tree_model_get_path (tree_model, iter);
213 indices = gtk_tree_path_get_indices (path);
214 sensitive = indices[0] != 1;
215 gtk_tree_path_free (path);
217 g_object_set (cell, "sensitive", sensitive, NULL);
221 is_separator (GtkTreeModel *model,
228 path = gtk_tree_model_get_path (model, iter);
229 result = gtk_tree_path_get_indices (path)[0] == 4;
230 gtk_tree_path_free (path);
237 main (int argc, char **argv)
239 GtkWidget *window, *cellview, *mainbox;
240 GtkWidget *combobox, *comboboxtext, *comboboxgrid;
241 GtkWidget *tmp, *boom;
242 GtkCellRenderer *renderer;
245 GValue value = {0, };
247 gtk_init (&argc, &argv);
249 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
250 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
251 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
253 mainbox = gtk_vbox_new (FALSE, 2);
254 gtk_container_add (GTK_CONTAINER (window), mainbox);
258 tmp = gtk_frame_new ("GtkCellView");
259 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
261 boom = gtk_vbox_new (FALSE, 0);
262 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
263 gtk_container_add (GTK_CONTAINER (tmp), boom);
265 cellview = gtk_cell_view_new ();
266 renderer = gtk_cell_renderer_pixbuf_new ();
267 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
268 GTK_ICON_SIZE_BUTTON, NULL);
270 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
273 g_value_init (&value, GDK_TYPE_PIXBUF);
274 g_value_set_instance (&value, pixbuf);
275 gtk_cell_view_set_values (GTK_CELL_VIEW (cellview),
279 g_value_unset (&value);
281 renderer = gtk_cell_renderer_text_new ();
282 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
285 g_value_init (&value, G_TYPE_STRING);
286 g_value_set_string (&value, "la la la");
287 gtk_cell_view_set_values (GTK_CELL_VIEW (cellview),
291 g_value_unset (&value);
292 gtk_container_add (GTK_CONTAINER (boom), cellview);
296 tmp = gtk_frame_new ("GtkComboBox");
297 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
299 boom = gtk_vbox_new (FALSE, 0);
300 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
301 gtk_container_add (GTK_CONTAINER (tmp), boom);
303 model = create_blaat ();
304 combobox = gtk_combo_box_new_with_model (model);
305 g_object_unref (model);
306 gtk_container_add (GTK_CONTAINER (boom), combobox);
308 renderer = gtk_cell_renderer_pixbuf_new ();
309 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
312 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
315 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
320 renderer = gtk_cell_renderer_text_new ();
321 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
324 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
327 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
331 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
332 is_separator, NULL, NULL);
334 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
337 /* GtkComboBox (grid mode) */
338 tmp = gtk_frame_new ("GtkComboBox (grid mode)");
339 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
341 boom = gtk_vbox_new (FALSE, 0);
342 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
343 gtk_container_add (GTK_CONTAINER (tmp), boom);
345 comboboxgrid = create_combo_box_grid_demo ();
346 gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
349 /* GtkComboBoxEntry */
350 tmp = gtk_frame_new ("GtkComboBoxEntry");
351 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
353 boom = gtk_vbox_new (FALSE, 0);
354 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
355 gtk_container_add (GTK_CONTAINER (tmp), boom);
357 comboboxtext = gtk_combo_box_entry_new_text ();
358 setup_combo_entry (comboboxtext);
359 gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
362 gtk_widget_show_all (window);