2 * Copyright (C) 2003 Kristian Rietveld
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
26 * oh yes, this test app surely has a lot of ugly code
31 create_color_pixbuf (const char *color)
40 if (!gdk_rgba_parse (&rgba, color))
43 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
47 p = pixels = gdk_pixbuf_get_pixels (pixbuf);
49 num = gdk_pixbuf_get_width (pixbuf) *
50 gdk_pixbuf_get_height (pixbuf);
52 for (x = 0; x < num; x++) {
53 p[0] = rgba.red * 255;
54 p[1] = rgba.green * 255;
55 p[2] = rgba.blue * 255;
63 create_combo_box_grid_demo (void)
68 GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
71 store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
73 combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
74 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
76 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
77 cell, "pixbuf", 0, NULL);
78 gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (combo),
82 pixbuf = create_color_pixbuf ("red");
83 gtk_list_store_append (store, &iter);
84 gtk_list_store_set (store, &iter,
87 g_object_unref (pixbuf);
89 pixbuf = create_color_pixbuf ("green");
90 gtk_list_store_append (store, &iter);
91 gtk_list_store_set (store, &iter,
94 g_object_unref (pixbuf);
96 pixbuf = create_color_pixbuf ("blue");
97 gtk_list_store_append (store, &iter);
98 gtk_list_store_set (store, &iter,
101 g_object_unref (pixbuf);
104 pixbuf = create_color_pixbuf ("yellow");
105 gtk_list_store_append (store, &iter);
106 gtk_list_store_set (store, &iter,
109 g_object_unref (pixbuf);
111 pixbuf = create_color_pixbuf ("black");
112 gtk_list_store_append (store, &iter);
113 gtk_list_store_set (store, &iter,
116 g_object_unref (pixbuf);
118 pixbuf = create_color_pixbuf ("white");
119 gtk_list_store_append (store, &iter);
120 gtk_list_store_set (store, &iter,
123 g_object_unref (pixbuf);
126 pixbuf = create_color_pixbuf ("gray");
127 gtk_list_store_append (store, &iter);
128 gtk_list_store_set (store, &iter,
131 g_object_unref (pixbuf);
133 pixbuf = create_color_pixbuf ("snow");
134 gtk_list_store_append (store, &iter);
135 gtk_list_store_set (store, &iter,
138 g_object_unref (pixbuf);
140 pixbuf = create_color_pixbuf ("magenta");
141 gtk_list_store_append (store, &iter);
142 gtk_list_store_set (store, &iter,
145 g_object_unref (pixbuf);
147 g_object_unref (store);
149 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
155 static GtkTreeModel *
156 create_tree_blaat (void)
160 GtkTreeIter iter, iter2;
163 cellview = gtk_cell_view_new ();
165 store = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN);
167 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
168 GTK_ICON_SIZE_BUTTON);
169 gtk_tree_store_append (store, &iter, NULL);
170 gtk_tree_store_set (store, &iter,
172 1, "gtk-stock-dialog-warning",
176 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
177 GTK_ICON_SIZE_BUTTON);
178 gtk_tree_store_append (store, &iter2, &iter);
179 gtk_tree_store_set (store, &iter2,
185 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
186 GTK_ICON_SIZE_BUTTON);
187 gtk_tree_store_append (store, &iter2, &iter);
188 gtk_tree_store_set (store, &iter2,
194 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
195 GTK_ICON_SIZE_BUTTON);
196 gtk_tree_store_append (store, &iter, NULL);
197 gtk_tree_store_set (store, &iter,
199 1, "gtk-stock-clear",
204 gtk_tree_store_append (store, &iter, NULL);
205 gtk_tree_store_set (store, &iter,
212 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
213 GTK_ICON_SIZE_BUTTON);
214 gtk_tree_store_append (store, &iter, NULL);
215 gtk_tree_store_set (store, &iter,
221 gtk_widget_destroy (cellview);
223 return GTK_TREE_MODEL (store);
226 static GtkTreeModel *
227 create_empty_list_blaat (void)
234 cellview = gtk_cell_view_new ();
236 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
238 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
239 GTK_ICON_SIZE_BUTTON);
240 gtk_list_store_append (store, &iter);
241 gtk_list_store_set (store, &iter,
243 1, "gtk-stock-dialog-warning",
246 gtk_widget_destroy (cellview);
248 return GTK_TREE_MODEL (store);
252 populate_list_blaat (gpointer data)
254 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
260 store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
262 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
264 if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter))
267 cellview = gtk_cell_view_new ();
269 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
270 GTK_ICON_SIZE_BUTTON);
271 gtk_list_store_append (store, &iter);
272 gtk_list_store_set (store, &iter,
277 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
278 GTK_ICON_SIZE_BUTTON);
279 gtk_list_store_append (store, &iter);
280 gtk_list_store_set (store, &iter,
285 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
286 GTK_ICON_SIZE_BUTTON);
287 gtk_list_store_append (store, &iter);
288 gtk_list_store_set (store, &iter,
290 1, "gtk-stock-clear",
293 gtk_list_store_append (store, &iter);
294 gtk_list_store_set (store, &iter,
299 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
300 GTK_ICON_SIZE_BUTTON);
301 gtk_list_store_append (store, &iter);
302 gtk_list_store_set (store, &iter,
307 gtk_widget_destroy (cellview);
310 static GtkTreeModel *
311 create_list_blaat (void)
318 cellview = gtk_cell_view_new ();
320 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
322 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
323 GTK_ICON_SIZE_BUTTON);
324 gtk_list_store_append (store, &iter);
325 gtk_list_store_set (store, &iter,
327 1, "gtk-stock-dialog-warning",
330 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
331 GTK_ICON_SIZE_BUTTON);
332 gtk_list_store_append (store, &iter);
333 gtk_list_store_set (store, &iter,
338 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
339 GTK_ICON_SIZE_BUTTON);
340 gtk_list_store_append (store, &iter);
341 gtk_list_store_set (store, &iter,
346 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
347 GTK_ICON_SIZE_BUTTON);
348 gtk_list_store_append (store, &iter);
349 gtk_list_store_set (store, &iter,
351 1, "gtk-stock-clear",
354 gtk_list_store_append (store, &iter);
355 gtk_list_store_set (store, &iter,
360 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
361 GTK_ICON_SIZE_BUTTON);
362 gtk_list_store_append (store, &iter);
363 gtk_list_store_set (store, &iter,
368 gtk_widget_destroy (cellview);
370 return GTK_TREE_MODEL (store);
374 static GtkTreeModel *
375 create_list_long (void)
380 store = gtk_list_store_new (1, G_TYPE_STRING);
382 gtk_list_store_append (store, &iter);
383 gtk_list_store_set (store, &iter,
384 0, "here is some long long text that grows out of the combo's allocation",
388 gtk_list_store_append (store, &iter);
389 gtk_list_store_set (store, &iter,
390 0, "with at least a few of these rows",
393 gtk_list_store_append (store, &iter);
394 gtk_list_store_set (store, &iter,
395 0, "so that we can get some ellipsized text here",
398 gtk_list_store_append (store, &iter);
399 gtk_list_store_set (store, &iter,
400 0, "and see the combo box menu being allocated without any constraints",
403 return GTK_TREE_MODEL (store);
406 static GtkTreeModel *
407 create_food_list (void)
412 store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
413 gtk_list_store_append (store, &iter);
414 gtk_list_store_set (store, &iter,
419 gtk_list_store_append (store, &iter);
420 gtk_list_store_set (store, &iter,
425 gtk_list_store_append (store, &iter);
426 gtk_list_store_set (store, &iter,
431 gtk_list_store_append (store, &iter);
432 gtk_list_store_set (store, &iter,
437 gtk_list_store_append (store, &iter);
438 gtk_list_store_set (store, &iter,
443 return GTK_TREE_MODEL (store);
448 static GtkTreeModel *
449 create_phylogenetic_tree (void)
451 GtkTreeIter iter, iter2, iter3;
454 store = gtk_tree_store_new (1,G_TYPE_STRING);
456 gtk_tree_store_append (store, &iter, NULL);
457 gtk_tree_store_set (store, &iter,
461 gtk_tree_store_append (store, &iter2, &iter);
462 gtk_tree_store_set (store, &iter2,
466 gtk_tree_store_append (store, &iter2, &iter);
467 gtk_tree_store_set (store, &iter2,
471 gtk_tree_store_append (store, &iter2, &iter);
472 gtk_tree_store_set (store, &iter2,
473 0, "Thermodesulfobacterium",
476 gtk_tree_store_append (store, &iter2, &iter);
477 gtk_tree_store_set (store, &iter2,
478 0, "Thermus-Deinococcus group",
481 gtk_tree_store_append (store, &iter2, &iter);
482 gtk_tree_store_set (store, &iter2,
486 gtk_tree_store_append (store, &iter2, &iter);
487 gtk_tree_store_set (store, &iter2,
491 gtk_tree_store_append (store, &iter2, &iter);
492 gtk_tree_store_set (store, &iter2,
496 gtk_tree_store_append (store, &iter2, &iter);
497 gtk_tree_store_set (store, &iter2,
498 0, "Leptospirillium Group",
501 gtk_tree_store_append (store, &iter2, &iter);
502 gtk_tree_store_set (store, &iter2,
505 gtk_tree_store_append (store, &iter2, &iter);
506 gtk_tree_store_set (store, &iter2,
507 0, "Chlorobium-Flavobacteria group",
509 gtk_tree_store_append (store, &iter2, &iter);
510 gtk_tree_store_set (store, &iter2,
511 0, "Chlamydia-Verrucomicrobia group",
514 gtk_tree_store_append (store, &iter3, &iter2);
515 gtk_tree_store_set (store, &iter3,
516 0, "Verrucomicrobia",
518 gtk_tree_store_append (store, &iter3, &iter2);
519 gtk_tree_store_set (store, &iter3,
523 gtk_tree_store_append (store, &iter2, &iter);
524 gtk_tree_store_set (store, &iter2,
529 gtk_tree_store_append (store, &iter2, &iter);
530 gtk_tree_store_set (store, &iter2,
531 0, "Fibrobacter group",
535 gtk_tree_store_append (store, &iter2, &iter);
536 gtk_tree_store_set (store, &iter2,
541 gtk_tree_store_append (store, &iter2, &iter);
542 gtk_tree_store_set (store, &iter2,
547 gtk_tree_store_append (store, &iter3, &iter2);
548 gtk_tree_store_set (store, &iter3,
553 gtk_tree_store_append (store, &iter3, &iter2);
554 gtk_tree_store_set (store, &iter3,
559 gtk_tree_store_append (store, &iter3, &iter2);
560 gtk_tree_store_set (store, &iter3,
565 gtk_tree_store_append (store, &iter3, &iter2);
566 gtk_tree_store_set (store, &iter3,
571 gtk_tree_store_append (store, &iter3, &iter2);
572 gtk_tree_store_set (store, &iter3,
577 gtk_tree_store_append (store, &iter, NULL);
578 gtk_tree_store_set (store, &iter,
583 gtk_tree_store_append (store, &iter2, &iter);
584 gtk_tree_store_set (store, &iter2,
589 gtk_tree_store_append (store, &iter2, &iter);
590 gtk_tree_store_set (store, &iter2,
595 gtk_tree_store_append (store, &iter2, &iter);
596 gtk_tree_store_set (store, &iter2,
601 gtk_tree_store_append (store, &iter2, &iter);
602 gtk_tree_store_set (store, &iter2,
607 gtk_tree_store_append (store, &iter2, &iter);
608 gtk_tree_store_set (store, &iter2,
613 gtk_tree_store_append (store, &iter2, &iter);
614 gtk_tree_store_set (store, &iter2,
619 gtk_tree_store_append (store, &iter2, &iter);
620 gtk_tree_store_set (store, &iter2,
625 gtk_tree_store_append (store, &iter2, &iter);
626 gtk_tree_store_set (store, &iter2,
627 0, "choanoflagellates",
631 gtk_tree_store_append (store, &iter2, &iter);
632 gtk_tree_store_set (store, &iter2,
637 gtk_tree_store_append (store, &iter2, &iter);
638 gtk_tree_store_set (store, &iter2,
643 gtk_tree_store_append (store, &iter2, &iter);
644 gtk_tree_store_set (store, &iter2,
649 gtk_tree_store_append (store, &iter2, &iter);
650 gtk_tree_store_set (store, &iter2,
655 gtk_tree_store_append (store, &iter2, &iter);
656 gtk_tree_store_set (store, &iter2,
661 gtk_tree_store_append (store, &iter2, &iter);
662 gtk_tree_store_set (store, &iter2,
667 gtk_tree_store_append (store, &iter2, &iter);
668 gtk_tree_store_set (store, &iter2,
669 0, "crytomonads et al",
673 gtk_tree_store_append (store, &iter, NULL);
674 gtk_tree_store_set (store, &iter,
679 gtk_tree_store_append (store, &iter2, &iter);
680 gtk_tree_store_set (store, &iter2,
685 gtk_tree_store_append (store, &iter2, &iter);
686 gtk_tree_store_set (store, &iter2,
691 gtk_tree_store_append (store, &iter2, &iter);
692 gtk_tree_store_set (store, &iter2,
696 return GTK_TREE_MODEL (store);
701 static GtkTreeModel *
702 create_capital_tree (void)
704 GtkTreeIter iter, iter2;
707 store = gtk_tree_store_new (1, G_TYPE_STRING);
709 gtk_tree_store_append (store, &iter, NULL);
710 gtk_tree_store_set (store, &iter, 0, "A - B", -1);
712 gtk_tree_store_append (store, &iter2, &iter);
713 gtk_tree_store_set (store, &iter2, 0, "Albany", -1);
715 gtk_tree_store_append (store, &iter2, &iter);
716 gtk_tree_store_set (store, &iter2, 0, "Annapolis", -1);
718 gtk_tree_store_append (store, &iter2, &iter);
719 gtk_tree_store_set (store, &iter2, 0, "Atlanta", -1);
721 gtk_tree_store_append (store, &iter2, &iter);
722 gtk_tree_store_set (store, &iter2, 0, "Augusta", -1);
724 gtk_tree_store_append (store, &iter2, &iter);
725 gtk_tree_store_set (store, &iter2, 0, "Austin", -1);
727 gtk_tree_store_append (store, &iter2, &iter);
728 gtk_tree_store_set (store, &iter2, 0, "Baton Rouge", -1);
730 gtk_tree_store_append (store, &iter2, &iter);
731 gtk_tree_store_set (store, &iter2, 0, "Bismarck", -1);
733 gtk_tree_store_append (store, &iter2, &iter);
734 gtk_tree_store_set (store, &iter2, 0, "Boise", -1);
736 gtk_tree_store_append (store, &iter2, &iter);
737 gtk_tree_store_set (store, &iter2, 0, "Boston", -1);
739 gtk_tree_store_append (store, &iter, NULL);
740 gtk_tree_store_set (store, &iter, 0, "C - D", -1);
742 gtk_tree_store_append (store, &iter2, &iter);
743 gtk_tree_store_set (store, &iter2, 0, "Carson City", -1);
745 gtk_tree_store_append (store, &iter2, &iter);
746 gtk_tree_store_set (store, &iter2, 0, "Charleston", -1);
748 gtk_tree_store_append (store, &iter2, &iter);
749 gtk_tree_store_set (store, &iter2, 0, "Cheyenne", -1);
751 gtk_tree_store_append (store, &iter2, &iter);
752 gtk_tree_store_set (store, &iter2, 0, "Columbia", -1);
754 gtk_tree_store_append (store, &iter2, &iter);
755 gtk_tree_store_set (store, &iter2, 0, "Columbus", -1);
757 gtk_tree_store_append (store, &iter2, &iter);
758 gtk_tree_store_set (store, &iter2, 0, "Concord", -1);
760 gtk_tree_store_append (store, &iter2, &iter);
761 gtk_tree_store_set (store, &iter2, 0, "Denver", -1);
763 gtk_tree_store_append (store, &iter2, &iter);
764 gtk_tree_store_set (store, &iter2, 0, "Des Moines", -1);
766 gtk_tree_store_append (store, &iter2, &iter);
767 gtk_tree_store_set (store, &iter2, 0, "Dover", -1);
770 gtk_tree_store_append (store, &iter, NULL);
771 gtk_tree_store_set (store, &iter, 0, "E - J", -1);
773 gtk_tree_store_append (store, &iter2, &iter);
774 gtk_tree_store_set (store, &iter2, 0, "Frankfort", -1);
776 gtk_tree_store_append (store, &iter2, &iter);
777 gtk_tree_store_set (store, &iter2, 0, "Harrisburg", -1);
779 gtk_tree_store_append (store, &iter2, &iter);
780 gtk_tree_store_set (store, &iter2, 0, "Hartford", -1);
782 gtk_tree_store_append (store, &iter2, &iter);
783 gtk_tree_store_set (store, &iter2, 0, "Helena", -1);
785 gtk_tree_store_append (store, &iter2, &iter);
786 gtk_tree_store_set (store, &iter2, 0, "Honolulu", -1);
788 gtk_tree_store_append (store, &iter2, &iter);
789 gtk_tree_store_set (store, &iter2, 0, "Indianapolis", -1);
791 gtk_tree_store_append (store, &iter2, &iter);
792 gtk_tree_store_set (store, &iter2, 0, "Jackson", -1);
794 gtk_tree_store_append (store, &iter2, &iter);
795 gtk_tree_store_set (store, &iter2, 0, "Jefferson City", -1);
797 gtk_tree_store_append (store, &iter2, &iter);
798 gtk_tree_store_set (store, &iter2, 0, "Juneau", -1);
801 gtk_tree_store_append (store, &iter, NULL);
802 gtk_tree_store_set (store, &iter, 0, "K - O", -1);
804 gtk_tree_store_append (store, &iter2, &iter);
805 gtk_tree_store_set (store, &iter2, 0, "Lansing", -1);
807 gtk_tree_store_append (store, &iter2, &iter);
808 gtk_tree_store_set (store, &iter2, 0, "Lincoln", -1);
810 gtk_tree_store_append (store, &iter2, &iter);
811 gtk_tree_store_set (store, &iter2, 0, "Little Rock", -1);
813 gtk_tree_store_append (store, &iter2, &iter);
814 gtk_tree_store_set (store, &iter2, 0, "Madison", -1);
816 gtk_tree_store_append (store, &iter2, &iter);
817 gtk_tree_store_set (store, &iter2, 0, "Montgomery", -1);
819 gtk_tree_store_append (store, &iter2, &iter);
820 gtk_tree_store_set (store, &iter2, 0, "Montpelier", -1);
822 gtk_tree_store_append (store, &iter2, &iter);
823 gtk_tree_store_set (store, &iter2, 0, "Nashville", -1);
825 gtk_tree_store_append (store, &iter2, &iter);
826 gtk_tree_store_set (store, &iter2, 0, "Oklahoma City", -1);
828 gtk_tree_store_append (store, &iter2, &iter);
829 gtk_tree_store_set (store, &iter2, 0, "Olympia", -1);
832 gtk_tree_store_append (store, &iter, NULL);
833 gtk_tree_store_set (store, &iter, 0, "P - S", -1);
835 gtk_tree_store_append (store, &iter2, &iter);
836 gtk_tree_store_set (store, &iter2, 0, "Phoenix", -1);
838 gtk_tree_store_append (store, &iter2, &iter);
839 gtk_tree_store_set (store, &iter2, 0, "Pierre", -1);
841 gtk_tree_store_append (store, &iter2, &iter);
842 gtk_tree_store_set (store, &iter2, 0, "Providence", -1);
844 gtk_tree_store_append (store, &iter2, &iter);
845 gtk_tree_store_set (store, &iter2, 0, "Raleigh", -1);
847 gtk_tree_store_append (store, &iter2, &iter);
848 gtk_tree_store_set (store, &iter2, 0, "Richmond", -1);
850 gtk_tree_store_append (store, &iter2, &iter);
851 gtk_tree_store_set (store, &iter2, 0, "Sacramento", -1);
853 gtk_tree_store_append (store, &iter2, &iter);
854 gtk_tree_store_set (store, &iter2, 0, "Salem", -1);
856 gtk_tree_store_append (store, &iter2, &iter);
857 gtk_tree_store_set (store, &iter2, 0, "Salt Lake City", -1);
859 gtk_tree_store_append (store, &iter2, &iter);
860 gtk_tree_store_set (store, &iter2, 0, "Santa Fe", -1);
862 gtk_tree_store_append (store, &iter2, &iter);
863 gtk_tree_store_set (store, &iter2, 0, "Springfield", -1);
865 gtk_tree_store_append (store, &iter2, &iter);
866 gtk_tree_store_set (store, &iter2, 0, "St. Paul", -1);
869 gtk_tree_store_append (store, &iter, NULL);
870 gtk_tree_store_set (store, &iter, 0, "T - Z", -1);
872 gtk_tree_store_append (store, &iter2, &iter);
873 gtk_tree_store_set (store, &iter2, 0, "Tallahassee", -1);
875 gtk_tree_store_append (store, &iter2, &iter);
876 gtk_tree_store_set (store, &iter2, 0, "Topeka", -1);
878 gtk_tree_store_append (store, &iter2, &iter);
879 gtk_tree_store_set (store, &iter2, 0, "Trenton", -1);
881 return GTK_TREE_MODEL (store);
885 capital_sensitive (GtkCellLayout *cell_layout,
886 GtkCellRenderer *cell,
887 GtkTreeModel *tree_model,
893 sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
895 g_object_set (cell, "sensitive", sensitive, NULL);
899 capital_animation (gpointer data)
901 static gint insert_count = 0;
902 GtkTreeModel *model = GTK_TREE_MODEL (data);
904 GtkTreeIter iter, parent;
906 switch (insert_count % 8)
909 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0);
910 gtk_tree_store_set (GTK_TREE_STORE (model),
916 path = gtk_tree_path_new_from_indices (0, -1);
917 gtk_tree_model_get_iter (model, &parent, path);
918 gtk_tree_path_free (path);
919 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0);
920 gtk_tree_store_set (GTK_TREE_STORE (model),
926 path = gtk_tree_path_new_from_indices (0, -1);
927 gtk_tree_model_get_iter (model, &parent, path);
928 gtk_tree_path_free (path);
929 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1);
930 gtk_tree_store_set (GTK_TREE_STORE (model),
936 path = gtk_tree_path_new_from_indices (0, -1);
937 gtk_tree_model_get_iter (model, &parent, path);
938 gtk_tree_path_free (path);
939 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2);
940 gtk_tree_store_set (GTK_TREE_STORE (model),
946 path = gtk_tree_path_new_from_indices (0, 2, -1);
947 gtk_tree_model_get_iter (model, &iter, path);
948 gtk_tree_path_free (path);
949 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
953 path = gtk_tree_path_new_from_indices (0, 1, -1);
954 gtk_tree_model_get_iter (model, &iter, path);
955 gtk_tree_path_free (path);
956 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
960 path = gtk_tree_path_new_from_indices (0, 0, -1);
961 gtk_tree_model_get_iter (model, &iter, path);
962 gtk_tree_path_free (path);
963 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
967 path = gtk_tree_path_new_from_indices (0, -1);
968 gtk_tree_model_get_iter (model, &iter, path);
969 gtk_tree_path_free (path);
970 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
982 setup_combo_entry (GtkComboBoxText *combo)
984 gtk_combo_box_text_append_text (combo,
986 gtk_combo_box_text_append_text (combo,
988 gtk_combo_box_text_append_text (combo,
989 "la la la dum de dum la la la la la la boom de da la la");
990 gtk_combo_box_text_append_text (combo,
992 gtk_combo_box_text_append_text (combo,
994 gtk_combo_box_text_append_text (combo,
996 gtk_combo_box_text_append_text (combo,
998 gtk_combo_box_text_append_text (combo,
1000 gtk_combo_box_text_append_text (combo,
1002 gtk_combo_box_text_append_text (combo,
1004 gtk_combo_box_text_append_text (combo,
1006 gtk_combo_box_text_append_text (combo,
1008 gtk_combo_box_text_append_text (combo,
1010 gtk_combo_box_text_append_text (combo,
1012 gtk_combo_box_text_append_text (combo,
1014 gtk_combo_box_text_append_text (combo,
1016 gtk_combo_box_text_append_text (combo,
1018 gtk_combo_box_text_append_text (combo,
1020 gtk_combo_box_text_append_text (combo,
1022 gtk_combo_box_text_append_text (combo,
1024 gtk_combo_box_text_append_text (combo,
1026 gtk_combo_box_text_append_text (combo,
1028 gtk_combo_box_text_append_text (combo,
1030 gtk_combo_box_text_append_text (combo,
1032 gtk_combo_box_text_append_text (combo,
1037 set_sensitive (GtkCellLayout *cell_layout,
1038 GtkCellRenderer *cell,
1039 GtkTreeModel *tree_model,
1047 path = gtk_tree_model_get_path (tree_model, iter);
1048 indices = gtk_tree_path_get_indices (path);
1049 sensitive = indices[0] != 1;
1050 gtk_tree_path_free (path);
1052 g_object_set (cell, "sensitive", sensitive, NULL);
1056 is_separator (GtkTreeModel *model,
1063 path = gtk_tree_model_get_path (model, iter);
1064 result = gtk_tree_path_get_indices (path)[0] == 4;
1065 gtk_tree_path_free (path);
1072 displayed_row_changed (GtkComboBox *combo,
1078 row = gtk_combo_box_get_active (combo);
1079 path = gtk_tree_path_new_from_indices (row, -1);
1080 gtk_cell_view_set_displayed_row (cell, path);
1081 gtk_tree_path_free (path);
1085 main (int argc, char **argv)
1087 GtkWidget *window, *cellview, *mainbox;
1088 GtkWidget *combobox, *comboboxtext, *comboboxgrid;
1089 GtkWidget *tmp, *boom;
1090 GtkCellRenderer *renderer;
1092 GtkTreeModel *model;
1098 gtk_init (&argc, &argv);
1100 if (g_getenv ("RTL"))
1101 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
1103 if (g_getenv ("LISTMODE"))
1105 GtkCssProvider *provider = gtk_css_provider_new ();
1107 gtk_css_provider_load_from_data (provider,
1108 "* { -GtkComboBox-appears-as-list: true; }",
1111 gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
1112 GTK_STYLE_PROVIDER (provider),
1113 GTK_STYLE_PROVIDER_PRIORITY_FALLBACK);
1117 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1118 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1119 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
1121 mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
1122 gtk_container_add (GTK_CONTAINER (window), mainbox);
1125 tmp = gtk_frame_new ("GtkCellView");
1126 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1128 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1129 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1130 gtk_container_add (GTK_CONTAINER (tmp), boom);
1132 cellview = gtk_cell_view_new ();
1133 renderer = gtk_cell_renderer_pixbuf_new ();
1134 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
1135 GTK_ICON_SIZE_BUTTON);
1137 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1140 g_object_set (renderer, "pixbuf", pixbuf, NULL);
1142 renderer = gtk_cell_renderer_text_new ();
1143 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1146 g_object_set (renderer, "text", "la la la", NULL);
1147 gtk_container_add (GTK_CONTAINER (boom), cellview);
1149 /* GtkComboBox list */
1150 tmp = gtk_frame_new ("GtkComboBox (list)");
1151 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1153 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1154 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1155 gtk_container_add (GTK_CONTAINER (tmp), boom);
1157 model = create_list_blaat ();
1158 combobox = gtk_combo_box_new_with_model (model);
1159 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1160 g_object_unref (model);
1161 gtk_container_add (GTK_CONTAINER (boom), combobox);
1163 renderer = gtk_cell_renderer_pixbuf_new ();
1164 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1167 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1170 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1175 renderer = gtk_cell_renderer_text_new ();
1176 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1179 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1182 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1186 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1187 is_separator, NULL, NULL);
1189 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1191 /* GtkComboBox dynamic list */
1192 tmp = gtk_frame_new ("GtkComboBox (dynamic list)");
1193 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1195 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1196 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1197 gtk_container_add (GTK_CONTAINER (tmp), boom);
1199 model = create_empty_list_blaat ();
1200 combobox = gtk_combo_box_new_with_model (model);
1201 g_signal_connect (combobox, "notify::popup-shown",
1202 G_CALLBACK (populate_list_blaat), combobox);
1204 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1205 g_object_unref (model);
1206 gtk_container_add (GTK_CONTAINER (boom), combobox);
1208 renderer = gtk_cell_renderer_pixbuf_new ();
1209 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1212 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1215 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1220 renderer = gtk_cell_renderer_text_new ();
1221 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1224 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1227 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1231 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1232 is_separator, NULL, NULL);
1234 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1235 gtk_combo_box_set_title (GTK_COMBO_BOX (combobox), "Dynamic list");
1237 /* GtkComboBox custom entry */
1238 tmp = gtk_frame_new ("GtkComboBox (custom)");
1239 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1241 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1242 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1243 gtk_container_add (GTK_CONTAINER (tmp), boom);
1245 model = create_list_blaat ();
1246 combobox = gtk_combo_box_new_with_model (model);
1247 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1248 g_object_unref (model);
1249 gtk_container_add (GTK_CONTAINER (boom), combobox);
1251 renderer = gtk_cell_renderer_pixbuf_new ();
1252 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1255 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1258 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1263 renderer = gtk_cell_renderer_text_new ();
1264 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1267 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1270 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1274 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1275 is_separator, NULL, NULL);
1277 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1279 tmp = gtk_cell_view_new ();
1280 gtk_widget_show (tmp);
1281 gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
1283 renderer = gtk_cell_renderer_text_new ();
1284 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE);
1285 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
1292 gtk_cell_view_set_background_rgba (GTK_CELL_VIEW (tmp), &color);
1293 displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
1294 g_signal_connect (combobox, "changed", G_CALLBACK (displayed_row_changed), tmp);
1296 gtk_container_add (GTK_CONTAINER (combobox), tmp);
1298 /* GtkComboBox tree */
1299 tmp = gtk_frame_new ("GtkComboBox (tree)");
1300 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1302 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1303 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1304 gtk_container_add (GTK_CONTAINER (tmp), boom);
1306 model = create_tree_blaat ();
1307 combobox = gtk_combo_box_new_with_model (model);
1308 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1309 g_object_unref (model);
1310 gtk_container_add (GTK_CONTAINER (boom), combobox);
1312 renderer = gtk_cell_renderer_pixbuf_new ();
1313 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1316 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1319 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1324 renderer = gtk_cell_renderer_text_new ();
1325 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1328 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1331 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1335 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1336 is_separator, NULL, NULL);
1338 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1340 g_timeout_add (1000, (GSourceFunc) animation_timer, model);
1343 /* GtkComboBox (grid mode) */
1344 tmp = gtk_frame_new ("GtkComboBox (grid mode)");
1345 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1347 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1348 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1349 gtk_container_add (GTK_CONTAINER (tmp), boom);
1351 comboboxgrid = create_combo_box_grid_demo ();
1352 gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
1355 /* GtkComboBoxEntry */
1356 tmp = gtk_frame_new ("GtkComboBox with entry");
1357 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1359 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1360 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1361 gtk_container_add (GTK_CONTAINER (tmp), boom);
1363 comboboxtext = gtk_combo_box_text_new_with_entry ();
1364 setup_combo_entry (GTK_COMBO_BOX_TEXT (comboboxtext));
1365 gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
1368 /* Phylogenetic tree */
1369 tmp = gtk_frame_new ("What are you ?");
1370 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1372 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1373 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1374 gtk_container_add (GTK_CONTAINER (tmp), boom);
1376 model = create_phylogenetic_tree ();
1377 combobox = gtk_combo_box_new_with_model (model);
1378 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1379 g_object_unref (model);
1380 gtk_container_add (GTK_CONTAINER (boom), combobox);
1382 renderer = gtk_cell_renderer_text_new ();
1383 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1386 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1390 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1393 tmp = gtk_frame_new ("Where are you ?");
1394 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1396 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1397 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1398 gtk_container_add (GTK_CONTAINER (tmp), boom);
1400 model = create_capital_tree ();
1401 combobox = gtk_combo_box_new_with_model (model);
1402 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1403 g_object_unref (model);
1404 gtk_container_add (GTK_CONTAINER (boom), combobox);
1405 renderer = gtk_cell_renderer_text_new ();
1406 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1409 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1412 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1416 path = gtk_tree_path_new_from_indices (0, 8, -1);
1417 gtk_tree_model_get_iter (model, &iter, path);
1418 gtk_tree_path_free (path);
1419 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
1422 gdk_threads_add_timeout (1000, (GSourceFunc) capital_animation, model);
1426 tmp = gtk_frame_new ("Hungry ?");
1427 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1429 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1430 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1431 gtk_container_add (GTK_CONTAINER (tmp), boom);
1433 model = create_food_list ();
1434 combobox = gtk_combo_box_new_with_model (model);
1435 g_object_unref (model);
1436 gtk_container_add (GTK_CONTAINER (boom), combobox);
1438 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (combobox));
1440 renderer = gtk_cell_renderer_text_new ();
1441 gtk_cell_area_add_with_properties (area, renderer,
1445 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1449 renderer = gtk_cell_renderer_text_new ();
1450 gtk_cell_area_add_with_properties (area, renderer,
1454 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1458 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1460 /* Ellipsizing growing combos */
1461 tmp = gtk_frame_new ("Unconstrained Menu");
1462 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1464 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1465 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1466 gtk_container_add (GTK_CONTAINER (tmp), boom);
1468 model = create_list_long ();
1469 combobox = gtk_combo_box_new_with_model (model);
1470 g_object_unref (model);
1471 gtk_container_add (GTK_CONTAINER (boom), combobox);
1472 renderer = gtk_cell_renderer_text_new ();
1473 g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
1475 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
1476 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1478 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1479 gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox), FALSE);
1481 gtk_widget_show_all (window);