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, see <http://www.gnu.org/licenses/>.
24 * oh yes, this test app surely has a lot of ugly code
29 create_color_pixbuf (const char *color)
38 if (!gdk_rgba_parse (&rgba, color))
41 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
45 p = pixels = gdk_pixbuf_get_pixels (pixbuf);
47 num = gdk_pixbuf_get_width (pixbuf) *
48 gdk_pixbuf_get_height (pixbuf);
50 for (x = 0; x < num; x++) {
51 p[0] = rgba.red * 255;
52 p[1] = rgba.green * 255;
53 p[2] = rgba.blue * 255;
61 create_combo_box_grid_demo (void)
66 GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
69 store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
71 combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
72 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
74 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
75 cell, "pixbuf", 0, NULL);
76 gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (combo),
80 pixbuf = create_color_pixbuf ("red");
81 gtk_list_store_append (store, &iter);
82 gtk_list_store_set (store, &iter,
85 g_object_unref (pixbuf);
87 pixbuf = create_color_pixbuf ("green");
88 gtk_list_store_append (store, &iter);
89 gtk_list_store_set (store, &iter,
92 g_object_unref (pixbuf);
94 pixbuf = create_color_pixbuf ("blue");
95 gtk_list_store_append (store, &iter);
96 gtk_list_store_set (store, &iter,
99 g_object_unref (pixbuf);
102 pixbuf = create_color_pixbuf ("yellow");
103 gtk_list_store_append (store, &iter);
104 gtk_list_store_set (store, &iter,
107 g_object_unref (pixbuf);
109 pixbuf = create_color_pixbuf ("black");
110 gtk_list_store_append (store, &iter);
111 gtk_list_store_set (store, &iter,
114 g_object_unref (pixbuf);
116 pixbuf = create_color_pixbuf ("white");
117 gtk_list_store_append (store, &iter);
118 gtk_list_store_set (store, &iter,
121 g_object_unref (pixbuf);
124 pixbuf = create_color_pixbuf ("gray");
125 gtk_list_store_append (store, &iter);
126 gtk_list_store_set (store, &iter,
129 g_object_unref (pixbuf);
131 pixbuf = create_color_pixbuf ("snow");
132 gtk_list_store_append (store, &iter);
133 gtk_list_store_set (store, &iter,
136 g_object_unref (pixbuf);
138 pixbuf = create_color_pixbuf ("magenta");
139 gtk_list_store_append (store, &iter);
140 gtk_list_store_set (store, &iter,
143 g_object_unref (pixbuf);
145 g_object_unref (store);
147 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
153 static GtkTreeModel *
154 create_tree_blaat (void)
158 GtkTreeIter iter, iter2;
161 cellview = gtk_cell_view_new ();
163 store = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN);
165 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
166 GTK_ICON_SIZE_BUTTON);
167 gtk_tree_store_append (store, &iter, NULL);
168 gtk_tree_store_set (store, &iter,
170 1, "gtk-stock-dialog-warning",
174 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
175 GTK_ICON_SIZE_BUTTON);
176 gtk_tree_store_append (store, &iter2, &iter);
177 gtk_tree_store_set (store, &iter2,
183 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
184 GTK_ICON_SIZE_BUTTON);
185 gtk_tree_store_append (store, &iter2, &iter);
186 gtk_tree_store_set (store, &iter2,
192 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
193 GTK_ICON_SIZE_BUTTON);
194 gtk_tree_store_append (store, &iter, NULL);
195 gtk_tree_store_set (store, &iter,
197 1, "gtk-stock-clear",
202 gtk_tree_store_append (store, &iter, NULL);
203 gtk_tree_store_set (store, &iter,
210 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
211 GTK_ICON_SIZE_BUTTON);
212 gtk_tree_store_append (store, &iter, NULL);
213 gtk_tree_store_set (store, &iter,
219 gtk_widget_destroy (cellview);
221 return GTK_TREE_MODEL (store);
224 static GtkTreeModel *
225 create_empty_list_blaat (void)
232 cellview = gtk_cell_view_new ();
234 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
236 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
237 GTK_ICON_SIZE_BUTTON);
238 gtk_list_store_append (store, &iter);
239 gtk_list_store_set (store, &iter,
241 1, "gtk-stock-dialog-warning",
244 gtk_widget_destroy (cellview);
246 return GTK_TREE_MODEL (store);
250 populate_list_blaat (gpointer data)
252 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
258 store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
260 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
262 if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter))
265 cellview = gtk_cell_view_new ();
267 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
268 GTK_ICON_SIZE_BUTTON);
269 gtk_list_store_append (store, &iter);
270 gtk_list_store_set (store, &iter,
275 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
276 GTK_ICON_SIZE_BUTTON);
277 gtk_list_store_append (store, &iter);
278 gtk_list_store_set (store, &iter,
283 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
284 GTK_ICON_SIZE_BUTTON);
285 gtk_list_store_append (store, &iter);
286 gtk_list_store_set (store, &iter,
288 1, "gtk-stock-clear",
291 gtk_list_store_append (store, &iter);
292 gtk_list_store_set (store, &iter,
297 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
298 GTK_ICON_SIZE_BUTTON);
299 gtk_list_store_append (store, &iter);
300 gtk_list_store_set (store, &iter,
305 gtk_widget_destroy (cellview);
308 static GtkTreeModel *
309 create_list_blaat (void)
316 cellview = gtk_cell_view_new ();
318 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
320 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
321 GTK_ICON_SIZE_BUTTON);
322 gtk_list_store_append (store, &iter);
323 gtk_list_store_set (store, &iter,
325 1, "gtk-stock-dialog-warning",
328 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
329 GTK_ICON_SIZE_BUTTON);
330 gtk_list_store_append (store, &iter);
331 gtk_list_store_set (store, &iter,
336 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
337 GTK_ICON_SIZE_BUTTON);
338 gtk_list_store_append (store, &iter);
339 gtk_list_store_set (store, &iter,
344 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
345 GTK_ICON_SIZE_BUTTON);
346 gtk_list_store_append (store, &iter);
347 gtk_list_store_set (store, &iter,
349 1, "gtk-stock-clear",
352 gtk_list_store_append (store, &iter);
353 gtk_list_store_set (store, &iter,
358 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
359 GTK_ICON_SIZE_BUTTON);
360 gtk_list_store_append (store, &iter);
361 gtk_list_store_set (store, &iter,
366 gtk_widget_destroy (cellview);
368 return GTK_TREE_MODEL (store);
372 static GtkTreeModel *
373 create_list_long (void)
378 store = gtk_list_store_new (1, G_TYPE_STRING);
380 gtk_list_store_append (store, &iter);
381 gtk_list_store_set (store, &iter,
382 0, "here is some long long text that grows out of the combo's allocation",
386 gtk_list_store_append (store, &iter);
387 gtk_list_store_set (store, &iter,
388 0, "with at least a few of these rows",
391 gtk_list_store_append (store, &iter);
392 gtk_list_store_set (store, &iter,
393 0, "so that we can get some ellipsized text here",
396 gtk_list_store_append (store, &iter);
397 gtk_list_store_set (store, &iter,
398 0, "and see the combo box menu being allocated without any constraints",
401 return GTK_TREE_MODEL (store);
404 static GtkTreeModel *
405 create_food_list (void)
410 store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
411 gtk_list_store_append (store, &iter);
412 gtk_list_store_set (store, &iter,
417 gtk_list_store_append (store, &iter);
418 gtk_list_store_set (store, &iter,
423 gtk_list_store_append (store, &iter);
424 gtk_list_store_set (store, &iter,
429 gtk_list_store_append (store, &iter);
430 gtk_list_store_set (store, &iter,
435 gtk_list_store_append (store, &iter);
436 gtk_list_store_set (store, &iter,
441 return GTK_TREE_MODEL (store);
446 static GtkTreeModel *
447 create_phylogenetic_tree (void)
449 GtkTreeIter iter, iter2, iter3;
452 store = gtk_tree_store_new (1,G_TYPE_STRING);
454 gtk_tree_store_append (store, &iter, NULL);
455 gtk_tree_store_set (store, &iter,
459 gtk_tree_store_append (store, &iter2, &iter);
460 gtk_tree_store_set (store, &iter2,
464 gtk_tree_store_append (store, &iter2, &iter);
465 gtk_tree_store_set (store, &iter2,
469 gtk_tree_store_append (store, &iter2, &iter);
470 gtk_tree_store_set (store, &iter2,
471 0, "Thermodesulfobacterium",
474 gtk_tree_store_append (store, &iter2, &iter);
475 gtk_tree_store_set (store, &iter2,
476 0, "Thermus-Deinococcus group",
479 gtk_tree_store_append (store, &iter2, &iter);
480 gtk_tree_store_set (store, &iter2,
484 gtk_tree_store_append (store, &iter2, &iter);
485 gtk_tree_store_set (store, &iter2,
489 gtk_tree_store_append (store, &iter2, &iter);
490 gtk_tree_store_set (store, &iter2,
494 gtk_tree_store_append (store, &iter2, &iter);
495 gtk_tree_store_set (store, &iter2,
496 0, "Leptospirillium Group",
499 gtk_tree_store_append (store, &iter2, &iter);
500 gtk_tree_store_set (store, &iter2,
503 gtk_tree_store_append (store, &iter2, &iter);
504 gtk_tree_store_set (store, &iter2,
505 0, "Chlorobium-Flavobacteria group",
507 gtk_tree_store_append (store, &iter2, &iter);
508 gtk_tree_store_set (store, &iter2,
509 0, "Chlamydia-Verrucomicrobia group",
512 gtk_tree_store_append (store, &iter3, &iter2);
513 gtk_tree_store_set (store, &iter3,
514 0, "Verrucomicrobia",
516 gtk_tree_store_append (store, &iter3, &iter2);
517 gtk_tree_store_set (store, &iter3,
521 gtk_tree_store_append (store, &iter2, &iter);
522 gtk_tree_store_set (store, &iter2,
527 gtk_tree_store_append (store, &iter2, &iter);
528 gtk_tree_store_set (store, &iter2,
529 0, "Fibrobacter group",
533 gtk_tree_store_append (store, &iter2, &iter);
534 gtk_tree_store_set (store, &iter2,
539 gtk_tree_store_append (store, &iter2, &iter);
540 gtk_tree_store_set (store, &iter2,
545 gtk_tree_store_append (store, &iter3, &iter2);
546 gtk_tree_store_set (store, &iter3,
551 gtk_tree_store_append (store, &iter3, &iter2);
552 gtk_tree_store_set (store, &iter3,
557 gtk_tree_store_append (store, &iter3, &iter2);
558 gtk_tree_store_set (store, &iter3,
563 gtk_tree_store_append (store, &iter3, &iter2);
564 gtk_tree_store_set (store, &iter3,
569 gtk_tree_store_append (store, &iter3, &iter2);
570 gtk_tree_store_set (store, &iter3,
575 gtk_tree_store_append (store, &iter, NULL);
576 gtk_tree_store_set (store, &iter,
581 gtk_tree_store_append (store, &iter2, &iter);
582 gtk_tree_store_set (store, &iter2,
587 gtk_tree_store_append (store, &iter2, &iter);
588 gtk_tree_store_set (store, &iter2,
593 gtk_tree_store_append (store, &iter2, &iter);
594 gtk_tree_store_set (store, &iter2,
599 gtk_tree_store_append (store, &iter2, &iter);
600 gtk_tree_store_set (store, &iter2,
605 gtk_tree_store_append (store, &iter2, &iter);
606 gtk_tree_store_set (store, &iter2,
611 gtk_tree_store_append (store, &iter2, &iter);
612 gtk_tree_store_set (store, &iter2,
617 gtk_tree_store_append (store, &iter2, &iter);
618 gtk_tree_store_set (store, &iter2,
623 gtk_tree_store_append (store, &iter2, &iter);
624 gtk_tree_store_set (store, &iter2,
625 0, "choanoflagellates",
629 gtk_tree_store_append (store, &iter2, &iter);
630 gtk_tree_store_set (store, &iter2,
635 gtk_tree_store_append (store, &iter2, &iter);
636 gtk_tree_store_set (store, &iter2,
641 gtk_tree_store_append (store, &iter2, &iter);
642 gtk_tree_store_set (store, &iter2,
647 gtk_tree_store_append (store, &iter2, &iter);
648 gtk_tree_store_set (store, &iter2,
653 gtk_tree_store_append (store, &iter2, &iter);
654 gtk_tree_store_set (store, &iter2,
659 gtk_tree_store_append (store, &iter2, &iter);
660 gtk_tree_store_set (store, &iter2,
665 gtk_tree_store_append (store, &iter2, &iter);
666 gtk_tree_store_set (store, &iter2,
667 0, "crytomonads et al",
671 gtk_tree_store_append (store, &iter, NULL);
672 gtk_tree_store_set (store, &iter,
677 gtk_tree_store_append (store, &iter2, &iter);
678 gtk_tree_store_set (store, &iter2,
683 gtk_tree_store_append (store, &iter2, &iter);
684 gtk_tree_store_set (store, &iter2,
689 gtk_tree_store_append (store, &iter2, &iter);
690 gtk_tree_store_set (store, &iter2,
694 return GTK_TREE_MODEL (store);
699 static GtkTreeModel *
700 create_capital_tree (void)
702 GtkTreeIter iter, iter2;
705 store = gtk_tree_store_new (1, G_TYPE_STRING);
707 gtk_tree_store_append (store, &iter, NULL);
708 gtk_tree_store_set (store, &iter, 0, "A - B", -1);
710 gtk_tree_store_append (store, &iter2, &iter);
711 gtk_tree_store_set (store, &iter2, 0, "Albany", -1);
713 gtk_tree_store_append (store, &iter2, &iter);
714 gtk_tree_store_set (store, &iter2, 0, "Annapolis", -1);
716 gtk_tree_store_append (store, &iter2, &iter);
717 gtk_tree_store_set (store, &iter2, 0, "Atlanta", -1);
719 gtk_tree_store_append (store, &iter2, &iter);
720 gtk_tree_store_set (store, &iter2, 0, "Augusta", -1);
722 gtk_tree_store_append (store, &iter2, &iter);
723 gtk_tree_store_set (store, &iter2, 0, "Austin", -1);
725 gtk_tree_store_append (store, &iter2, &iter);
726 gtk_tree_store_set (store, &iter2, 0, "Baton Rouge", -1);
728 gtk_tree_store_append (store, &iter2, &iter);
729 gtk_tree_store_set (store, &iter2, 0, "Bismarck", -1);
731 gtk_tree_store_append (store, &iter2, &iter);
732 gtk_tree_store_set (store, &iter2, 0, "Boise", -1);
734 gtk_tree_store_append (store, &iter2, &iter);
735 gtk_tree_store_set (store, &iter2, 0, "Boston", -1);
737 gtk_tree_store_append (store, &iter, NULL);
738 gtk_tree_store_set (store, &iter, 0, "C - D", -1);
740 gtk_tree_store_append (store, &iter2, &iter);
741 gtk_tree_store_set (store, &iter2, 0, "Carson City", -1);
743 gtk_tree_store_append (store, &iter2, &iter);
744 gtk_tree_store_set (store, &iter2, 0, "Charleston", -1);
746 gtk_tree_store_append (store, &iter2, &iter);
747 gtk_tree_store_set (store, &iter2, 0, "Cheyenne", -1);
749 gtk_tree_store_append (store, &iter2, &iter);
750 gtk_tree_store_set (store, &iter2, 0, "Columbia", -1);
752 gtk_tree_store_append (store, &iter2, &iter);
753 gtk_tree_store_set (store, &iter2, 0, "Columbus", -1);
755 gtk_tree_store_append (store, &iter2, &iter);
756 gtk_tree_store_set (store, &iter2, 0, "Concord", -1);
758 gtk_tree_store_append (store, &iter2, &iter);
759 gtk_tree_store_set (store, &iter2, 0, "Denver", -1);
761 gtk_tree_store_append (store, &iter2, &iter);
762 gtk_tree_store_set (store, &iter2, 0, "Des Moines", -1);
764 gtk_tree_store_append (store, &iter2, &iter);
765 gtk_tree_store_set (store, &iter2, 0, "Dover", -1);
768 gtk_tree_store_append (store, &iter, NULL);
769 gtk_tree_store_set (store, &iter, 0, "E - J", -1);
771 gtk_tree_store_append (store, &iter2, &iter);
772 gtk_tree_store_set (store, &iter2, 0, "Frankfort", -1);
774 gtk_tree_store_append (store, &iter2, &iter);
775 gtk_tree_store_set (store, &iter2, 0, "Harrisburg", -1);
777 gtk_tree_store_append (store, &iter2, &iter);
778 gtk_tree_store_set (store, &iter2, 0, "Hartford", -1);
780 gtk_tree_store_append (store, &iter2, &iter);
781 gtk_tree_store_set (store, &iter2, 0, "Helena", -1);
783 gtk_tree_store_append (store, &iter2, &iter);
784 gtk_tree_store_set (store, &iter2, 0, "Honolulu", -1);
786 gtk_tree_store_append (store, &iter2, &iter);
787 gtk_tree_store_set (store, &iter2, 0, "Indianapolis", -1);
789 gtk_tree_store_append (store, &iter2, &iter);
790 gtk_tree_store_set (store, &iter2, 0, "Jackson", -1);
792 gtk_tree_store_append (store, &iter2, &iter);
793 gtk_tree_store_set (store, &iter2, 0, "Jefferson City", -1);
795 gtk_tree_store_append (store, &iter2, &iter);
796 gtk_tree_store_set (store, &iter2, 0, "Juneau", -1);
799 gtk_tree_store_append (store, &iter, NULL);
800 gtk_tree_store_set (store, &iter, 0, "K - O", -1);
802 gtk_tree_store_append (store, &iter2, &iter);
803 gtk_tree_store_set (store, &iter2, 0, "Lansing", -1);
805 gtk_tree_store_append (store, &iter2, &iter);
806 gtk_tree_store_set (store, &iter2, 0, "Lincoln", -1);
808 gtk_tree_store_append (store, &iter2, &iter);
809 gtk_tree_store_set (store, &iter2, 0, "Little Rock", -1);
811 gtk_tree_store_append (store, &iter2, &iter);
812 gtk_tree_store_set (store, &iter2, 0, "Madison", -1);
814 gtk_tree_store_append (store, &iter2, &iter);
815 gtk_tree_store_set (store, &iter2, 0, "Montgomery", -1);
817 gtk_tree_store_append (store, &iter2, &iter);
818 gtk_tree_store_set (store, &iter2, 0, "Montpelier", -1);
820 gtk_tree_store_append (store, &iter2, &iter);
821 gtk_tree_store_set (store, &iter2, 0, "Nashville", -1);
823 gtk_tree_store_append (store, &iter2, &iter);
824 gtk_tree_store_set (store, &iter2, 0, "Oklahoma City", -1);
826 gtk_tree_store_append (store, &iter2, &iter);
827 gtk_tree_store_set (store, &iter2, 0, "Olympia", -1);
830 gtk_tree_store_append (store, &iter, NULL);
831 gtk_tree_store_set (store, &iter, 0, "P - S", -1);
833 gtk_tree_store_append (store, &iter2, &iter);
834 gtk_tree_store_set (store, &iter2, 0, "Phoenix", -1);
836 gtk_tree_store_append (store, &iter2, &iter);
837 gtk_tree_store_set (store, &iter2, 0, "Pierre", -1);
839 gtk_tree_store_append (store, &iter2, &iter);
840 gtk_tree_store_set (store, &iter2, 0, "Providence", -1);
842 gtk_tree_store_append (store, &iter2, &iter);
843 gtk_tree_store_set (store, &iter2, 0, "Raleigh", -1);
845 gtk_tree_store_append (store, &iter2, &iter);
846 gtk_tree_store_set (store, &iter2, 0, "Richmond", -1);
848 gtk_tree_store_append (store, &iter2, &iter);
849 gtk_tree_store_set (store, &iter2, 0, "Sacramento", -1);
851 gtk_tree_store_append (store, &iter2, &iter);
852 gtk_tree_store_set (store, &iter2, 0, "Salem", -1);
854 gtk_tree_store_append (store, &iter2, &iter);
855 gtk_tree_store_set (store, &iter2, 0, "Salt Lake City", -1);
857 gtk_tree_store_append (store, &iter2, &iter);
858 gtk_tree_store_set (store, &iter2, 0, "Santa Fe", -1);
860 gtk_tree_store_append (store, &iter2, &iter);
861 gtk_tree_store_set (store, &iter2, 0, "Springfield", -1);
863 gtk_tree_store_append (store, &iter2, &iter);
864 gtk_tree_store_set (store, &iter2, 0, "St. Paul", -1);
867 gtk_tree_store_append (store, &iter, NULL);
868 gtk_tree_store_set (store, &iter, 0, "T - Z", -1);
870 gtk_tree_store_append (store, &iter2, &iter);
871 gtk_tree_store_set (store, &iter2, 0, "Tallahassee", -1);
873 gtk_tree_store_append (store, &iter2, &iter);
874 gtk_tree_store_set (store, &iter2, 0, "Topeka", -1);
876 gtk_tree_store_append (store, &iter2, &iter);
877 gtk_tree_store_set (store, &iter2, 0, "Trenton", -1);
879 return GTK_TREE_MODEL (store);
883 capital_sensitive (GtkCellLayout *cell_layout,
884 GtkCellRenderer *cell,
885 GtkTreeModel *tree_model,
891 sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
893 g_object_set (cell, "sensitive", sensitive, NULL);
897 capital_animation (gpointer data)
899 static gint insert_count = 0;
900 GtkTreeModel *model = GTK_TREE_MODEL (data);
902 GtkTreeIter iter, parent;
904 switch (insert_count % 8)
907 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0);
908 gtk_tree_store_set (GTK_TREE_STORE (model),
914 path = gtk_tree_path_new_from_indices (0, -1);
915 gtk_tree_model_get_iter (model, &parent, path);
916 gtk_tree_path_free (path);
917 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0);
918 gtk_tree_store_set (GTK_TREE_STORE (model),
924 path = gtk_tree_path_new_from_indices (0, -1);
925 gtk_tree_model_get_iter (model, &parent, path);
926 gtk_tree_path_free (path);
927 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1);
928 gtk_tree_store_set (GTK_TREE_STORE (model),
934 path = gtk_tree_path_new_from_indices (0, -1);
935 gtk_tree_model_get_iter (model, &parent, path);
936 gtk_tree_path_free (path);
937 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2);
938 gtk_tree_store_set (GTK_TREE_STORE (model),
944 path = gtk_tree_path_new_from_indices (0, 2, -1);
945 gtk_tree_model_get_iter (model, &iter, path);
946 gtk_tree_path_free (path);
947 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
951 path = gtk_tree_path_new_from_indices (0, 1, -1);
952 gtk_tree_model_get_iter (model, &iter, path);
953 gtk_tree_path_free (path);
954 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
958 path = gtk_tree_path_new_from_indices (0, 0, -1);
959 gtk_tree_model_get_iter (model, &iter, path);
960 gtk_tree_path_free (path);
961 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
965 path = gtk_tree_path_new_from_indices (0, -1);
966 gtk_tree_model_get_iter (model, &iter, path);
967 gtk_tree_path_free (path);
968 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
980 setup_combo_entry (GtkComboBoxText *combo)
982 gtk_combo_box_text_append_text (combo,
984 gtk_combo_box_text_append_text (combo,
986 gtk_combo_box_text_append_text (combo,
987 "la la la dum de dum la la la la la la boom de da la la");
988 gtk_combo_box_text_append_text (combo,
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,
1035 set_sensitive (GtkCellLayout *cell_layout,
1036 GtkCellRenderer *cell,
1037 GtkTreeModel *tree_model,
1045 path = gtk_tree_model_get_path (tree_model, iter);
1046 indices = gtk_tree_path_get_indices (path);
1047 sensitive = indices[0] != 1;
1048 gtk_tree_path_free (path);
1050 g_object_set (cell, "sensitive", sensitive, NULL);
1054 is_separator (GtkTreeModel *model,
1061 path = gtk_tree_model_get_path (model, iter);
1062 result = gtk_tree_path_get_indices (path)[0] == 4;
1063 gtk_tree_path_free (path);
1070 displayed_row_changed (GtkComboBox *combo,
1076 row = gtk_combo_box_get_active (combo);
1077 path = gtk_tree_path_new_from_indices (row, -1);
1078 gtk_cell_view_set_displayed_row (cell, path);
1079 gtk_tree_path_free (path);
1083 main (int argc, char **argv)
1085 GtkWidget *window, *cellview, *mainbox;
1086 GtkWidget *combobox, *comboboxtext, *comboboxgrid;
1087 GtkWidget *tmp, *boom;
1088 GtkCellRenderer *renderer;
1090 GtkTreeModel *model;
1096 gtk_init (&argc, &argv);
1098 if (g_getenv ("RTL"))
1099 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
1101 if (g_getenv ("LISTMODE"))
1103 GtkCssProvider *provider = gtk_css_provider_new ();
1105 gtk_css_provider_load_from_data (provider,
1106 "* { -GtkComboBox-appears-as-list: true; }",
1109 gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
1110 GTK_STYLE_PROVIDER (provider),
1111 GTK_STYLE_PROVIDER_PRIORITY_FALLBACK);
1115 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1116 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1117 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
1119 mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
1120 gtk_container_add (GTK_CONTAINER (window), mainbox);
1123 tmp = gtk_frame_new ("GtkCellView");
1124 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1126 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1127 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1128 gtk_container_add (GTK_CONTAINER (tmp), boom);
1130 cellview = gtk_cell_view_new ();
1131 renderer = gtk_cell_renderer_pixbuf_new ();
1132 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
1133 GTK_ICON_SIZE_BUTTON);
1135 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1138 g_object_set (renderer, "pixbuf", pixbuf, NULL);
1140 renderer = gtk_cell_renderer_text_new ();
1141 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1144 g_object_set (renderer, "text", "la la la", NULL);
1145 gtk_container_add (GTK_CONTAINER (boom), cellview);
1147 /* GtkComboBox list */
1148 tmp = gtk_frame_new ("GtkComboBox (list)");
1149 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1151 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1152 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1153 gtk_container_add (GTK_CONTAINER (tmp), boom);
1155 model = create_list_blaat ();
1156 combobox = gtk_combo_box_new_with_model (model);
1157 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1158 g_object_unref (model);
1159 gtk_container_add (GTK_CONTAINER (boom), combobox);
1161 renderer = gtk_cell_renderer_pixbuf_new ();
1162 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1165 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1168 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1173 renderer = gtk_cell_renderer_text_new ();
1174 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1177 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1180 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1184 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1185 is_separator, NULL, NULL);
1187 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1189 /* GtkComboBox dynamic list */
1190 tmp = gtk_frame_new ("GtkComboBox (dynamic list)");
1191 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1193 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1194 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1195 gtk_container_add (GTK_CONTAINER (tmp), boom);
1197 model = create_empty_list_blaat ();
1198 combobox = gtk_combo_box_new_with_model (model);
1199 g_signal_connect (combobox, "notify::popup-shown",
1200 G_CALLBACK (populate_list_blaat), combobox);
1202 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1203 g_object_unref (model);
1204 gtk_container_add (GTK_CONTAINER (boom), combobox);
1206 renderer = gtk_cell_renderer_pixbuf_new ();
1207 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1210 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1213 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1218 renderer = gtk_cell_renderer_text_new ();
1219 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1222 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1225 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1229 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1230 is_separator, NULL, NULL);
1232 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1233 gtk_combo_box_set_title (GTK_COMBO_BOX (combobox), "Dynamic list");
1235 /* GtkComboBox custom entry */
1236 tmp = gtk_frame_new ("GtkComboBox (custom)");
1237 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1239 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1240 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1241 gtk_container_add (GTK_CONTAINER (tmp), boom);
1243 model = create_list_blaat ();
1244 combobox = gtk_combo_box_new_with_model (model);
1245 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1246 g_object_unref (model);
1247 gtk_container_add (GTK_CONTAINER (boom), combobox);
1249 renderer = gtk_cell_renderer_pixbuf_new ();
1250 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1253 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1256 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1261 renderer = gtk_cell_renderer_text_new ();
1262 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1265 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1268 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1272 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1273 is_separator, NULL, NULL);
1275 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1277 tmp = gtk_cell_view_new ();
1278 gtk_widget_show (tmp);
1279 gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
1281 renderer = gtk_cell_renderer_text_new ();
1282 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE);
1283 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
1290 gtk_cell_view_set_background_rgba (GTK_CELL_VIEW (tmp), &color);
1291 displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
1292 g_signal_connect (combobox, "changed", G_CALLBACK (displayed_row_changed), tmp);
1294 gtk_container_add (GTK_CONTAINER (combobox), tmp);
1296 /* GtkComboBox tree */
1297 tmp = gtk_frame_new ("GtkComboBox (tree)");
1298 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1300 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1301 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1302 gtk_container_add (GTK_CONTAINER (tmp), boom);
1304 model = create_tree_blaat ();
1305 combobox = gtk_combo_box_new_with_model (model);
1306 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1307 g_object_unref (model);
1308 gtk_container_add (GTK_CONTAINER (boom), combobox);
1310 renderer = gtk_cell_renderer_pixbuf_new ();
1311 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1314 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1317 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1322 renderer = gtk_cell_renderer_text_new ();
1323 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1326 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1329 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1333 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1334 is_separator, NULL, NULL);
1336 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1338 g_timeout_add (1000, (GSourceFunc) animation_timer, model);
1341 /* GtkComboBox (grid mode) */
1342 tmp = gtk_frame_new ("GtkComboBox (grid mode)");
1343 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1345 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1346 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1347 gtk_container_add (GTK_CONTAINER (tmp), boom);
1349 comboboxgrid = create_combo_box_grid_demo ();
1350 gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
1353 /* GtkComboBoxEntry */
1354 tmp = gtk_frame_new ("GtkComboBox with entry");
1355 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1357 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1358 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1359 gtk_container_add (GTK_CONTAINER (tmp), boom);
1361 comboboxtext = gtk_combo_box_text_new_with_entry ();
1362 setup_combo_entry (GTK_COMBO_BOX_TEXT (comboboxtext));
1363 gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
1366 /* Phylogenetic tree */
1367 tmp = gtk_frame_new ("What are you ?");
1368 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1370 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1371 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1372 gtk_container_add (GTK_CONTAINER (tmp), boom);
1374 model = create_phylogenetic_tree ();
1375 combobox = gtk_combo_box_new_with_model (model);
1376 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1377 g_object_unref (model);
1378 gtk_container_add (GTK_CONTAINER (boom), combobox);
1380 renderer = gtk_cell_renderer_text_new ();
1381 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1384 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1388 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1391 tmp = gtk_frame_new ("Where are you ?");
1392 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1394 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1395 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1396 gtk_container_add (GTK_CONTAINER (tmp), boom);
1398 model = create_capital_tree ();
1399 combobox = gtk_combo_box_new_with_model (model);
1400 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1401 g_object_unref (model);
1402 gtk_container_add (GTK_CONTAINER (boom), combobox);
1403 renderer = gtk_cell_renderer_text_new ();
1404 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1407 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1410 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1414 path = gtk_tree_path_new_from_indices (0, 8, -1);
1415 gtk_tree_model_get_iter (model, &iter, path);
1416 gtk_tree_path_free (path);
1417 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
1420 gdk_threads_add_timeout (1000, (GSourceFunc) capital_animation, model);
1424 tmp = gtk_frame_new ("Hungry ?");
1425 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1427 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1428 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1429 gtk_container_add (GTK_CONTAINER (tmp), boom);
1431 model = create_food_list ();
1432 combobox = gtk_combo_box_new_with_model (model);
1433 g_object_unref (model);
1434 gtk_container_add (GTK_CONTAINER (boom), combobox);
1436 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (combobox));
1438 renderer = gtk_cell_renderer_text_new ();
1439 gtk_cell_area_add_with_properties (area, renderer,
1443 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1447 renderer = gtk_cell_renderer_text_new ();
1448 gtk_cell_area_add_with_properties (area, renderer,
1452 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1456 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1458 /* Ellipsizing growing combos */
1459 tmp = gtk_frame_new ("Unconstrained Menu");
1460 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1462 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1463 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1464 gtk_container_add (GTK_CONTAINER (tmp), boom);
1466 model = create_list_long ();
1467 combobox = gtk_combo_box_new_with_model (model);
1468 g_object_unref (model);
1469 gtk_container_add (GTK_CONTAINER (boom), combobox);
1470 renderer = gtk_cell_renderer_text_new ();
1471 g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
1473 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
1474 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1476 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1477 gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox), FALSE);
1479 gtk_widget_show_all (window);