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)
41 if (!gdk_color_parse (color, &col))
44 pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
48 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
49 p = pixels = gdk_pixbuf_get_pixels (pixbuf);
51 num = gdk_pixbuf_get_width (pixbuf) *
52 gdk_pixbuf_get_height (pixbuf);
54 for (x = 0; x < num; x++) {
55 p[0] = col.red / 65535 * 255;
56 p[1] = col.green / 65535 * 255;
57 p[2] = col.blue / 65535 * 255;
65 create_combo_box_grid_demo (void)
70 GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
73 store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
75 combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
76 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
78 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
79 cell, "pixbuf", 0, NULL);
80 gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (combo),
84 pixbuf = create_color_pixbuf ("red");
85 gtk_list_store_append (store, &iter);
86 gtk_list_store_set (store, &iter,
89 g_object_unref (pixbuf);
91 pixbuf = create_color_pixbuf ("green");
92 gtk_list_store_append (store, &iter);
93 gtk_list_store_set (store, &iter,
96 g_object_unref (pixbuf);
98 pixbuf = create_color_pixbuf ("blue");
99 gtk_list_store_append (store, &iter);
100 gtk_list_store_set (store, &iter,
103 g_object_unref (pixbuf);
106 pixbuf = create_color_pixbuf ("yellow");
107 gtk_list_store_append (store, &iter);
108 gtk_list_store_set (store, &iter,
111 g_object_unref (pixbuf);
113 pixbuf = create_color_pixbuf ("black");
114 gtk_list_store_append (store, &iter);
115 gtk_list_store_set (store, &iter,
118 g_object_unref (pixbuf);
120 pixbuf = create_color_pixbuf ("white");
121 gtk_list_store_append (store, &iter);
122 gtk_list_store_set (store, &iter,
125 g_object_unref (pixbuf);
128 pixbuf = create_color_pixbuf ("gray");
129 gtk_list_store_append (store, &iter);
130 gtk_list_store_set (store, &iter,
133 g_object_unref (pixbuf);
135 pixbuf = create_color_pixbuf ("snow");
136 gtk_list_store_append (store, &iter);
137 gtk_list_store_set (store, &iter,
140 g_object_unref (pixbuf);
142 pixbuf = create_color_pixbuf ("magenta");
143 gtk_list_store_append (store, &iter);
144 gtk_list_store_set (store, &iter,
147 g_object_unref (pixbuf);
149 g_object_unref (store);
151 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
157 static GtkTreeModel *
158 create_tree_blaat (void)
162 GtkTreeIter iter, iter2;
165 cellview = gtk_cell_view_new ();
167 store = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN);
169 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
170 GTK_ICON_SIZE_BUTTON);
171 gtk_tree_store_append (store, &iter, NULL);
172 gtk_tree_store_set (store, &iter,
174 1, "gtk-stock-dialog-warning",
178 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
179 GTK_ICON_SIZE_BUTTON);
180 gtk_tree_store_append (store, &iter2, &iter);
181 gtk_tree_store_set (store, &iter2,
187 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
188 GTK_ICON_SIZE_BUTTON);
189 gtk_tree_store_append (store, &iter2, &iter);
190 gtk_tree_store_set (store, &iter2,
196 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
197 GTK_ICON_SIZE_BUTTON);
198 gtk_tree_store_append (store, &iter, NULL);
199 gtk_tree_store_set (store, &iter,
201 1, "gtk-stock-clear",
206 gtk_tree_store_append (store, &iter, NULL);
207 gtk_tree_store_set (store, &iter,
214 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
215 GTK_ICON_SIZE_BUTTON);
216 gtk_tree_store_append (store, &iter, NULL);
217 gtk_tree_store_set (store, &iter,
223 gtk_widget_destroy (cellview);
225 return GTK_TREE_MODEL (store);
228 static GtkTreeModel *
229 create_empty_list_blaat (void)
236 cellview = gtk_cell_view_new ();
238 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
240 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
241 GTK_ICON_SIZE_BUTTON);
242 gtk_list_store_append (store, &iter);
243 gtk_list_store_set (store, &iter,
245 1, "gtk-stock-dialog-warning",
248 gtk_widget_destroy (cellview);
250 return GTK_TREE_MODEL (store);
254 populate_list_blaat (gpointer data)
256 GtkComboBox *combo_box = GTK_COMBO_BOX (data);
262 store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
264 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
266 if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter))
269 cellview = gtk_cell_view_new ();
271 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
272 GTK_ICON_SIZE_BUTTON);
273 gtk_list_store_append (store, &iter);
274 gtk_list_store_set (store, &iter,
279 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
280 GTK_ICON_SIZE_BUTTON);
281 gtk_list_store_append (store, &iter);
282 gtk_list_store_set (store, &iter,
287 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
288 GTK_ICON_SIZE_BUTTON);
289 gtk_list_store_append (store, &iter);
290 gtk_list_store_set (store, &iter,
292 1, "gtk-stock-clear",
295 gtk_list_store_append (store, &iter);
296 gtk_list_store_set (store, &iter,
301 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
302 GTK_ICON_SIZE_BUTTON);
303 gtk_list_store_append (store, &iter);
304 gtk_list_store_set (store, &iter,
309 gtk_widget_destroy (cellview);
312 static GtkTreeModel *
313 create_list_blaat (void)
320 cellview = gtk_cell_view_new ();
322 store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
324 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
325 GTK_ICON_SIZE_BUTTON);
326 gtk_list_store_append (store, &iter);
327 gtk_list_store_set (store, &iter,
329 1, "gtk-stock-dialog-warning",
332 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_STOP,
333 GTK_ICON_SIZE_BUTTON);
334 gtk_list_store_append (store, &iter);
335 gtk_list_store_set (store, &iter,
340 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_NEW,
341 GTK_ICON_SIZE_BUTTON);
342 gtk_list_store_append (store, &iter);
343 gtk_list_store_set (store, &iter,
348 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_CLEAR,
349 GTK_ICON_SIZE_BUTTON);
350 gtk_list_store_append (store, &iter);
351 gtk_list_store_set (store, &iter,
353 1, "gtk-stock-clear",
356 gtk_list_store_append (store, &iter);
357 gtk_list_store_set (store, &iter,
362 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_OPEN,
363 GTK_ICON_SIZE_BUTTON);
364 gtk_list_store_append (store, &iter);
365 gtk_list_store_set (store, &iter,
370 gtk_widget_destroy (cellview);
372 return GTK_TREE_MODEL (store);
376 static GtkTreeModel *
377 create_list_long (void)
382 store = gtk_list_store_new (1, G_TYPE_STRING);
384 gtk_list_store_append (store, &iter);
385 gtk_list_store_set (store, &iter,
386 0, "here is some long long text that grows out of the combo's allocation",
390 gtk_list_store_append (store, &iter);
391 gtk_list_store_set (store, &iter,
392 0, "with at least a few of these rows",
395 gtk_list_store_append (store, &iter);
396 gtk_list_store_set (store, &iter,
397 0, "so that we can get some ellipsized text here",
400 gtk_list_store_append (store, &iter);
401 gtk_list_store_set (store, &iter,
402 0, "and see the combo box menu being allocated without any constraints",
405 return GTK_TREE_MODEL (store);
408 static GtkTreeModel *
409 create_food_list (void)
414 store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
415 gtk_list_store_append (store, &iter);
416 gtk_list_store_set (store, &iter,
421 gtk_list_store_append (store, &iter);
422 gtk_list_store_set (store, &iter,
427 gtk_list_store_append (store, &iter);
428 gtk_list_store_set (store, &iter,
433 gtk_list_store_append (store, &iter);
434 gtk_list_store_set (store, &iter,
439 gtk_list_store_append (store, &iter);
440 gtk_list_store_set (store, &iter,
445 return GTK_TREE_MODEL (store);
450 static GtkTreeModel *
451 create_phylogenetic_tree (void)
453 GtkTreeIter iter, iter2, iter3;
456 store = gtk_tree_store_new (1,G_TYPE_STRING);
458 gtk_tree_store_append (store, &iter, NULL);
459 gtk_tree_store_set (store, &iter,
463 gtk_tree_store_append (store, &iter2, &iter);
464 gtk_tree_store_set (store, &iter2,
468 gtk_tree_store_append (store, &iter2, &iter);
469 gtk_tree_store_set (store, &iter2,
473 gtk_tree_store_append (store, &iter2, &iter);
474 gtk_tree_store_set (store, &iter2,
475 0, "Thermodesulfobacterium",
478 gtk_tree_store_append (store, &iter2, &iter);
479 gtk_tree_store_set (store, &iter2,
480 0, "Thermus-Deinococcus group",
483 gtk_tree_store_append (store, &iter2, &iter);
484 gtk_tree_store_set (store, &iter2,
488 gtk_tree_store_append (store, &iter2, &iter);
489 gtk_tree_store_set (store, &iter2,
493 gtk_tree_store_append (store, &iter2, &iter);
494 gtk_tree_store_set (store, &iter2,
498 gtk_tree_store_append (store, &iter2, &iter);
499 gtk_tree_store_set (store, &iter2,
500 0, "Leptospirillium Group",
503 gtk_tree_store_append (store, &iter2, &iter);
504 gtk_tree_store_set (store, &iter2,
507 gtk_tree_store_append (store, &iter2, &iter);
508 gtk_tree_store_set (store, &iter2,
509 0, "Chlorobium-Flavobacteria group",
511 gtk_tree_store_append (store, &iter2, &iter);
512 gtk_tree_store_set (store, &iter2,
513 0, "Chlamydia-Verrucomicrobia group",
516 gtk_tree_store_append (store, &iter3, &iter2);
517 gtk_tree_store_set (store, &iter3,
518 0, "Verrucomicrobia",
520 gtk_tree_store_append (store, &iter3, &iter2);
521 gtk_tree_store_set (store, &iter3,
525 gtk_tree_store_append (store, &iter2, &iter);
526 gtk_tree_store_set (store, &iter2,
531 gtk_tree_store_append (store, &iter2, &iter);
532 gtk_tree_store_set (store, &iter2,
533 0, "Fibrobacter group",
537 gtk_tree_store_append (store, &iter2, &iter);
538 gtk_tree_store_set (store, &iter2,
543 gtk_tree_store_append (store, &iter2, &iter);
544 gtk_tree_store_set (store, &iter2,
549 gtk_tree_store_append (store, &iter3, &iter2);
550 gtk_tree_store_set (store, &iter3,
555 gtk_tree_store_append (store, &iter3, &iter2);
556 gtk_tree_store_set (store, &iter3,
561 gtk_tree_store_append (store, &iter3, &iter2);
562 gtk_tree_store_set (store, &iter3,
567 gtk_tree_store_append (store, &iter3, &iter2);
568 gtk_tree_store_set (store, &iter3,
573 gtk_tree_store_append (store, &iter3, &iter2);
574 gtk_tree_store_set (store, &iter3,
579 gtk_tree_store_append (store, &iter, NULL);
580 gtk_tree_store_set (store, &iter,
585 gtk_tree_store_append (store, &iter2, &iter);
586 gtk_tree_store_set (store, &iter2,
591 gtk_tree_store_append (store, &iter2, &iter);
592 gtk_tree_store_set (store, &iter2,
597 gtk_tree_store_append (store, &iter2, &iter);
598 gtk_tree_store_set (store, &iter2,
603 gtk_tree_store_append (store, &iter2, &iter);
604 gtk_tree_store_set (store, &iter2,
609 gtk_tree_store_append (store, &iter2, &iter);
610 gtk_tree_store_set (store, &iter2,
615 gtk_tree_store_append (store, &iter2, &iter);
616 gtk_tree_store_set (store, &iter2,
621 gtk_tree_store_append (store, &iter2, &iter);
622 gtk_tree_store_set (store, &iter2,
627 gtk_tree_store_append (store, &iter2, &iter);
628 gtk_tree_store_set (store, &iter2,
629 0, "choanoflagellates",
633 gtk_tree_store_append (store, &iter2, &iter);
634 gtk_tree_store_set (store, &iter2,
639 gtk_tree_store_append (store, &iter2, &iter);
640 gtk_tree_store_set (store, &iter2,
645 gtk_tree_store_append (store, &iter2, &iter);
646 gtk_tree_store_set (store, &iter2,
651 gtk_tree_store_append (store, &iter2, &iter);
652 gtk_tree_store_set (store, &iter2,
657 gtk_tree_store_append (store, &iter2, &iter);
658 gtk_tree_store_set (store, &iter2,
663 gtk_tree_store_append (store, &iter2, &iter);
664 gtk_tree_store_set (store, &iter2,
669 gtk_tree_store_append (store, &iter2, &iter);
670 gtk_tree_store_set (store, &iter2,
671 0, "crytomonads et al",
675 gtk_tree_store_append (store, &iter, NULL);
676 gtk_tree_store_set (store, &iter,
681 gtk_tree_store_append (store, &iter2, &iter);
682 gtk_tree_store_set (store, &iter2,
687 gtk_tree_store_append (store, &iter2, &iter);
688 gtk_tree_store_set (store, &iter2,
693 gtk_tree_store_append (store, &iter2, &iter);
694 gtk_tree_store_set (store, &iter2,
698 return GTK_TREE_MODEL (store);
703 static GtkTreeModel *
704 create_capital_tree (void)
706 GtkTreeIter iter, iter2;
709 store = gtk_tree_store_new (1, G_TYPE_STRING);
711 gtk_tree_store_append (store, &iter, NULL);
712 gtk_tree_store_set (store, &iter, 0, "A - B", -1);
714 gtk_tree_store_append (store, &iter2, &iter);
715 gtk_tree_store_set (store, &iter2, 0, "Albany", -1);
717 gtk_tree_store_append (store, &iter2, &iter);
718 gtk_tree_store_set (store, &iter2, 0, "Annapolis", -1);
720 gtk_tree_store_append (store, &iter2, &iter);
721 gtk_tree_store_set (store, &iter2, 0, "Atlanta", -1);
723 gtk_tree_store_append (store, &iter2, &iter);
724 gtk_tree_store_set (store, &iter2, 0, "Augusta", -1);
726 gtk_tree_store_append (store, &iter2, &iter);
727 gtk_tree_store_set (store, &iter2, 0, "Austin", -1);
729 gtk_tree_store_append (store, &iter2, &iter);
730 gtk_tree_store_set (store, &iter2, 0, "Baton Rouge", -1);
732 gtk_tree_store_append (store, &iter2, &iter);
733 gtk_tree_store_set (store, &iter2, 0, "Bismarck", -1);
735 gtk_tree_store_append (store, &iter2, &iter);
736 gtk_tree_store_set (store, &iter2, 0, "Boise", -1);
738 gtk_tree_store_append (store, &iter2, &iter);
739 gtk_tree_store_set (store, &iter2, 0, "Boston", -1);
741 gtk_tree_store_append (store, &iter, NULL);
742 gtk_tree_store_set (store, &iter, 0, "C - D", -1);
744 gtk_tree_store_append (store, &iter2, &iter);
745 gtk_tree_store_set (store, &iter2, 0, "Carson City", -1);
747 gtk_tree_store_append (store, &iter2, &iter);
748 gtk_tree_store_set (store, &iter2, 0, "Charleston", -1);
750 gtk_tree_store_append (store, &iter2, &iter);
751 gtk_tree_store_set (store, &iter2, 0, "Cheyenne", -1);
753 gtk_tree_store_append (store, &iter2, &iter);
754 gtk_tree_store_set (store, &iter2, 0, "Columbia", -1);
756 gtk_tree_store_append (store, &iter2, &iter);
757 gtk_tree_store_set (store, &iter2, 0, "Columbus", -1);
759 gtk_tree_store_append (store, &iter2, &iter);
760 gtk_tree_store_set (store, &iter2, 0, "Concord", -1);
762 gtk_tree_store_append (store, &iter2, &iter);
763 gtk_tree_store_set (store, &iter2, 0, "Denver", -1);
765 gtk_tree_store_append (store, &iter2, &iter);
766 gtk_tree_store_set (store, &iter2, 0, "Des Moines", -1);
768 gtk_tree_store_append (store, &iter2, &iter);
769 gtk_tree_store_set (store, &iter2, 0, "Dover", -1);
772 gtk_tree_store_append (store, &iter, NULL);
773 gtk_tree_store_set (store, &iter, 0, "E - J", -1);
775 gtk_tree_store_append (store, &iter2, &iter);
776 gtk_tree_store_set (store, &iter2, 0, "Frankfort", -1);
778 gtk_tree_store_append (store, &iter2, &iter);
779 gtk_tree_store_set (store, &iter2, 0, "Harrisburg", -1);
781 gtk_tree_store_append (store, &iter2, &iter);
782 gtk_tree_store_set (store, &iter2, 0, "Hartford", -1);
784 gtk_tree_store_append (store, &iter2, &iter);
785 gtk_tree_store_set (store, &iter2, 0, "Helena", -1);
787 gtk_tree_store_append (store, &iter2, &iter);
788 gtk_tree_store_set (store, &iter2, 0, "Honolulu", -1);
790 gtk_tree_store_append (store, &iter2, &iter);
791 gtk_tree_store_set (store, &iter2, 0, "Indianapolis", -1);
793 gtk_tree_store_append (store, &iter2, &iter);
794 gtk_tree_store_set (store, &iter2, 0, "Jackson", -1);
796 gtk_tree_store_append (store, &iter2, &iter);
797 gtk_tree_store_set (store, &iter2, 0, "Jefferson City", -1);
799 gtk_tree_store_append (store, &iter2, &iter);
800 gtk_tree_store_set (store, &iter2, 0, "Juneau", -1);
803 gtk_tree_store_append (store, &iter, NULL);
804 gtk_tree_store_set (store, &iter, 0, "K - O", -1);
806 gtk_tree_store_append (store, &iter2, &iter);
807 gtk_tree_store_set (store, &iter2, 0, "Lansing", -1);
809 gtk_tree_store_append (store, &iter2, &iter);
810 gtk_tree_store_set (store, &iter2, 0, "Lincoln", -1);
812 gtk_tree_store_append (store, &iter2, &iter);
813 gtk_tree_store_set (store, &iter2, 0, "Little Rock", -1);
815 gtk_tree_store_append (store, &iter2, &iter);
816 gtk_tree_store_set (store, &iter2, 0, "Madison", -1);
818 gtk_tree_store_append (store, &iter2, &iter);
819 gtk_tree_store_set (store, &iter2, 0, "Montgomery", -1);
821 gtk_tree_store_append (store, &iter2, &iter);
822 gtk_tree_store_set (store, &iter2, 0, "Montpelier", -1);
824 gtk_tree_store_append (store, &iter2, &iter);
825 gtk_tree_store_set (store, &iter2, 0, "Nashville", -1);
827 gtk_tree_store_append (store, &iter2, &iter);
828 gtk_tree_store_set (store, &iter2, 0, "Oklahoma City", -1);
830 gtk_tree_store_append (store, &iter2, &iter);
831 gtk_tree_store_set (store, &iter2, 0, "Olympia", -1);
834 gtk_tree_store_append (store, &iter, NULL);
835 gtk_tree_store_set (store, &iter, 0, "P - S", -1);
837 gtk_tree_store_append (store, &iter2, &iter);
838 gtk_tree_store_set (store, &iter2, 0, "Phoenix", -1);
840 gtk_tree_store_append (store, &iter2, &iter);
841 gtk_tree_store_set (store, &iter2, 0, "Pierre", -1);
843 gtk_tree_store_append (store, &iter2, &iter);
844 gtk_tree_store_set (store, &iter2, 0, "Providence", -1);
846 gtk_tree_store_append (store, &iter2, &iter);
847 gtk_tree_store_set (store, &iter2, 0, "Raleigh", -1);
849 gtk_tree_store_append (store, &iter2, &iter);
850 gtk_tree_store_set (store, &iter2, 0, "Richmond", -1);
852 gtk_tree_store_append (store, &iter2, &iter);
853 gtk_tree_store_set (store, &iter2, 0, "Sacramento", -1);
855 gtk_tree_store_append (store, &iter2, &iter);
856 gtk_tree_store_set (store, &iter2, 0, "Salem", -1);
858 gtk_tree_store_append (store, &iter2, &iter);
859 gtk_tree_store_set (store, &iter2, 0, "Salt Lake City", -1);
861 gtk_tree_store_append (store, &iter2, &iter);
862 gtk_tree_store_set (store, &iter2, 0, "Santa Fe", -1);
864 gtk_tree_store_append (store, &iter2, &iter);
865 gtk_tree_store_set (store, &iter2, 0, "Springfield", -1);
867 gtk_tree_store_append (store, &iter2, &iter);
868 gtk_tree_store_set (store, &iter2, 0, "St. Paul", -1);
871 gtk_tree_store_append (store, &iter, NULL);
872 gtk_tree_store_set (store, &iter, 0, "T - Z", -1);
874 gtk_tree_store_append (store, &iter2, &iter);
875 gtk_tree_store_set (store, &iter2, 0, "Tallahassee", -1);
877 gtk_tree_store_append (store, &iter2, &iter);
878 gtk_tree_store_set (store, &iter2, 0, "Topeka", -1);
880 gtk_tree_store_append (store, &iter2, &iter);
881 gtk_tree_store_set (store, &iter2, 0, "Trenton", -1);
883 return GTK_TREE_MODEL (store);
887 capital_sensitive (GtkCellLayout *cell_layout,
888 GtkCellRenderer *cell,
889 GtkTreeModel *tree_model,
895 sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
897 g_object_set (cell, "sensitive", sensitive, NULL);
901 capital_animation (gpointer data)
903 static gint insert_count = 0;
904 GtkTreeModel *model = GTK_TREE_MODEL (data);
906 GtkTreeIter iter, parent;
908 switch (insert_count % 8)
911 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0);
912 gtk_tree_store_set (GTK_TREE_STORE (model),
918 path = gtk_tree_path_new_from_indices (0, -1);
919 gtk_tree_model_get_iter (model, &parent, path);
920 gtk_tree_path_free (path);
921 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0);
922 gtk_tree_store_set (GTK_TREE_STORE (model),
928 path = gtk_tree_path_new_from_indices (0, -1);
929 gtk_tree_model_get_iter (model, &parent, path);
930 gtk_tree_path_free (path);
931 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1);
932 gtk_tree_store_set (GTK_TREE_STORE (model),
938 path = gtk_tree_path_new_from_indices (0, -1);
939 gtk_tree_model_get_iter (model, &parent, path);
940 gtk_tree_path_free (path);
941 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2);
942 gtk_tree_store_set (GTK_TREE_STORE (model),
948 path = gtk_tree_path_new_from_indices (0, 2, -1);
949 gtk_tree_model_get_iter (model, &iter, path);
950 gtk_tree_path_free (path);
951 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
955 path = gtk_tree_path_new_from_indices (0, 1, -1);
956 gtk_tree_model_get_iter (model, &iter, path);
957 gtk_tree_path_free (path);
958 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
962 path = gtk_tree_path_new_from_indices (0, 0, -1);
963 gtk_tree_model_get_iter (model, &iter, path);
964 gtk_tree_path_free (path);
965 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
969 path = gtk_tree_path_new_from_indices (0, -1);
970 gtk_tree_model_get_iter (model, &iter, path);
971 gtk_tree_path_free (path);
972 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
984 setup_combo_entry (GtkComboBoxText *combo)
986 gtk_combo_box_text_append_text (combo,
988 gtk_combo_box_text_append_text (combo,
990 gtk_combo_box_text_append_text (combo,
991 "la la la dum de dum la la la la la la boom de da la la");
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,
1034 gtk_combo_box_text_append_text (combo,
1039 set_sensitive (GtkCellLayout *cell_layout,
1040 GtkCellRenderer *cell,
1041 GtkTreeModel *tree_model,
1049 path = gtk_tree_model_get_path (tree_model, iter);
1050 indices = gtk_tree_path_get_indices (path);
1051 sensitive = indices[0] != 1;
1052 gtk_tree_path_free (path);
1054 g_object_set (cell, "sensitive", sensitive, NULL);
1058 is_separator (GtkTreeModel *model,
1065 path = gtk_tree_model_get_path (model, iter);
1066 result = gtk_tree_path_get_indices (path)[0] == 4;
1067 gtk_tree_path_free (path);
1074 displayed_row_changed (GtkComboBox *combo,
1080 row = gtk_combo_box_get_active (combo);
1081 path = gtk_tree_path_new_from_indices (row, -1);
1082 gtk_cell_view_set_displayed_row (cell, path);
1083 gtk_tree_path_free (path);
1087 main (int argc, char **argv)
1089 GtkWidget *window, *cellview, *mainbox;
1090 GtkWidget *combobox, *comboboxtext, *comboboxgrid;
1091 GtkWidget *tmp, *boom;
1092 GtkCellRenderer *renderer;
1094 GtkTreeModel *model;
1100 gtk_init (&argc, &argv);
1102 if (g_getenv ("RTL"))
1103 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
1105 if (g_getenv ("LISTMODE"))
1107 GtkCssProvider *provider = gtk_css_provider_new ();
1109 gtk_css_provider_load_from_data (provider,
1110 "* { -GtkComboBox-appears-as-list: true; }",
1113 gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
1114 GTK_STYLE_PROVIDER (provider),
1115 GTK_STYLE_PROVIDER_PRIORITY_FALLBACK);
1119 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1120 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1121 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
1123 mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
1124 gtk_container_add (GTK_CONTAINER (window), mainbox);
1127 tmp = gtk_frame_new ("GtkCellView");
1128 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1130 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1131 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1132 gtk_container_add (GTK_CONTAINER (tmp), boom);
1134 cellview = gtk_cell_view_new ();
1135 renderer = gtk_cell_renderer_pixbuf_new ();
1136 pixbuf = gtk_widget_render_icon_pixbuf (cellview, GTK_STOCK_DIALOG_WARNING,
1137 GTK_ICON_SIZE_BUTTON);
1139 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1142 g_object_set (renderer, "pixbuf", pixbuf, NULL);
1144 renderer = gtk_cell_renderer_text_new ();
1145 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1148 g_object_set (renderer, "text", "la la la", NULL);
1149 gtk_container_add (GTK_CONTAINER (boom), cellview);
1151 /* GtkComboBox list */
1152 tmp = gtk_frame_new ("GtkComboBox (list)");
1153 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1155 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1156 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1157 gtk_container_add (GTK_CONTAINER (tmp), boom);
1159 model = create_list_blaat ();
1160 combobox = gtk_combo_box_new_with_model (model);
1161 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1162 g_object_unref (model);
1163 gtk_container_add (GTK_CONTAINER (boom), combobox);
1165 renderer = gtk_cell_renderer_pixbuf_new ();
1166 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1169 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1172 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1177 renderer = gtk_cell_renderer_text_new ();
1178 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1181 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1184 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1188 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1189 is_separator, NULL, NULL);
1191 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1193 /* GtkComboBox dynamic list */
1194 tmp = gtk_frame_new ("GtkComboBox (dynamic list)");
1195 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1197 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1198 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1199 gtk_container_add (GTK_CONTAINER (tmp), boom);
1201 model = create_empty_list_blaat ();
1202 combobox = gtk_combo_box_new_with_model (model);
1203 g_signal_connect (combobox, "notify::popup-shown",
1204 G_CALLBACK (populate_list_blaat), combobox);
1206 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1207 g_object_unref (model);
1208 gtk_container_add (GTK_CONTAINER (boom), combobox);
1210 renderer = gtk_cell_renderer_pixbuf_new ();
1211 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1214 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1217 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1222 renderer = gtk_cell_renderer_text_new ();
1223 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1226 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1229 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1233 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1234 is_separator, NULL, NULL);
1236 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1237 gtk_combo_box_set_title (GTK_COMBO_BOX (combobox), "Dynamic list");
1239 /* GtkComboBox custom entry */
1240 tmp = gtk_frame_new ("GtkComboBox (custom)");
1241 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1243 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1244 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1245 gtk_container_add (GTK_CONTAINER (tmp), boom);
1247 model = create_list_blaat ();
1248 combobox = gtk_combo_box_new_with_model (model);
1249 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1250 g_object_unref (model);
1251 gtk_container_add (GTK_CONTAINER (boom), combobox);
1253 renderer = gtk_cell_renderer_pixbuf_new ();
1254 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1257 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1260 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1265 renderer = gtk_cell_renderer_text_new ();
1266 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1269 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1272 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1276 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1277 is_separator, NULL, NULL);
1279 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1281 tmp = gtk_cell_view_new ();
1282 gtk_widget_show (tmp);
1283 gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
1285 renderer = gtk_cell_renderer_text_new ();
1286 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE);
1287 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
1291 color.blue = 0xffff;
1293 gtk_cell_view_set_background_color (GTK_CELL_VIEW (tmp), &color);
1294 displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
1295 g_signal_connect (combobox, "changed", G_CALLBACK (displayed_row_changed), tmp);
1297 gtk_container_add (GTK_CONTAINER (combobox), tmp);
1299 /* GtkComboBox tree */
1300 tmp = gtk_frame_new ("GtkComboBox (tree)");
1301 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1303 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1304 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1305 gtk_container_add (GTK_CONTAINER (tmp), boom);
1307 model = create_tree_blaat ();
1308 combobox = gtk_combo_box_new_with_model (model);
1309 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1310 g_object_unref (model);
1311 gtk_container_add (GTK_CONTAINER (boom), combobox);
1313 renderer = gtk_cell_renderer_pixbuf_new ();
1314 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1317 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1320 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1325 renderer = gtk_cell_renderer_text_new ();
1326 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1329 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1332 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1336 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1337 is_separator, NULL, NULL);
1339 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1341 g_timeout_add (1000, (GSourceFunc) animation_timer, model);
1344 /* GtkComboBox (grid mode) */
1345 tmp = gtk_frame_new ("GtkComboBox (grid mode)");
1346 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1348 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1349 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1350 gtk_container_add (GTK_CONTAINER (tmp), boom);
1352 comboboxgrid = create_combo_box_grid_demo ();
1353 gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
1356 /* GtkComboBoxEntry */
1357 tmp = gtk_frame_new ("GtkComboBox with entry");
1358 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1360 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1361 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1362 gtk_container_add (GTK_CONTAINER (tmp), boom);
1364 comboboxtext = gtk_combo_box_text_new_with_entry ();
1365 setup_combo_entry (GTK_COMBO_BOX_TEXT (comboboxtext));
1366 gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
1369 /* Phylogenetic tree */
1370 tmp = gtk_frame_new ("What are you ?");
1371 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1373 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1374 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1375 gtk_container_add (GTK_CONTAINER (tmp), boom);
1377 model = create_phylogenetic_tree ();
1378 combobox = gtk_combo_box_new_with_model (model);
1379 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1380 g_object_unref (model);
1381 gtk_container_add (GTK_CONTAINER (boom), combobox);
1383 renderer = gtk_cell_renderer_text_new ();
1384 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1387 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1391 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1394 tmp = gtk_frame_new ("Where are you ?");
1395 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1397 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1398 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1399 gtk_container_add (GTK_CONTAINER (tmp), boom);
1401 model = create_capital_tree ();
1402 combobox = gtk_combo_box_new_with_model (model);
1403 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1404 g_object_unref (model);
1405 gtk_container_add (GTK_CONTAINER (boom), combobox);
1406 renderer = gtk_cell_renderer_text_new ();
1407 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1410 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1413 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1417 path = gtk_tree_path_new_from_indices (0, 8, -1);
1418 gtk_tree_model_get_iter (model, &iter, path);
1419 gtk_tree_path_free (path);
1420 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
1423 gdk_threads_add_timeout (1000, (GSourceFunc) capital_animation, model);
1427 tmp = gtk_frame_new ("Hungry ?");
1428 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1430 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1431 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1432 gtk_container_add (GTK_CONTAINER (tmp), boom);
1434 model = create_food_list ();
1435 combobox = gtk_combo_box_new_with_model (model);
1436 g_object_unref (model);
1437 gtk_container_add (GTK_CONTAINER (boom), combobox);
1439 area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (combobox));
1441 renderer = gtk_cell_renderer_text_new ();
1442 gtk_cell_area_add_with_properties (area, renderer,
1446 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1450 renderer = gtk_cell_renderer_text_new ();
1451 gtk_cell_area_add_with_properties (area, renderer,
1455 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1459 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1461 /* Ellipsizing growing combos */
1462 tmp = gtk_frame_new ("Unconstrained Menu");
1463 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1465 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1466 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1467 gtk_container_add (GTK_CONTAINER (tmp), boom);
1469 model = create_list_long ();
1470 combobox = gtk_combo_box_new_with_model (model);
1471 g_object_unref (model);
1472 gtk_container_add (GTK_CONTAINER (boom), combobox);
1473 renderer = gtk_cell_renderer_text_new ();
1474 g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
1476 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
1477 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1479 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1480 gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox), FALSE);
1482 gtk_widget_show_all (window);