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 (cellview, GTK_STOCK_DIALOG_WARNING,
170 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_STOP,
179 GTK_ICON_SIZE_BUTTON, NULL);
180 gtk_tree_store_append (store, &iter2, &iter);
181 gtk_tree_store_set (store, &iter2,
187 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
188 GTK_ICON_SIZE_BUTTON, NULL);
189 gtk_tree_store_append (store, &iter2, &iter);
190 gtk_tree_store_set (store, &iter2,
196 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
197 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_OPEN,
215 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_DIALOG_WARNING,
241 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_STOP,
272 GTK_ICON_SIZE_BUTTON, NULL);
273 gtk_list_store_append (store, &iter);
274 gtk_list_store_set (store, &iter,
279 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
280 GTK_ICON_SIZE_BUTTON, NULL);
281 gtk_list_store_append (store, &iter);
282 gtk_list_store_set (store, &iter,
287 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
288 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_OPEN,
302 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_DIALOG_WARNING,
325 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_STOP,
333 GTK_ICON_SIZE_BUTTON, NULL);
334 gtk_list_store_append (store, &iter);
335 gtk_list_store_set (store, &iter,
340 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
341 GTK_ICON_SIZE_BUTTON, NULL);
342 gtk_list_store_append (store, &iter);
343 gtk_list_store_set (store, &iter,
348 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
349 GTK_ICON_SIZE_BUTTON, NULL);
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 (cellview, GTK_STOCK_OPEN,
363 GTK_ICON_SIZE_BUTTON, NULL);
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);
409 static GtkTreeModel *
410 create_phylogenetic_tree (void)
412 GtkTreeIter iter, iter2, iter3;
415 store = gtk_tree_store_new (1,G_TYPE_STRING);
417 gtk_tree_store_append (store, &iter, NULL);
418 gtk_tree_store_set (store, &iter,
422 gtk_tree_store_append (store, &iter2, &iter);
423 gtk_tree_store_set (store, &iter2,
427 gtk_tree_store_append (store, &iter2, &iter);
428 gtk_tree_store_set (store, &iter2,
432 gtk_tree_store_append (store, &iter2, &iter);
433 gtk_tree_store_set (store, &iter2,
434 0, "Thermodesulfobacterium",
437 gtk_tree_store_append (store, &iter2, &iter);
438 gtk_tree_store_set (store, &iter2,
439 0, "Thermus-Deinococcus group",
442 gtk_tree_store_append (store, &iter2, &iter);
443 gtk_tree_store_set (store, &iter2,
447 gtk_tree_store_append (store, &iter2, &iter);
448 gtk_tree_store_set (store, &iter2,
452 gtk_tree_store_append (store, &iter2, &iter);
453 gtk_tree_store_set (store, &iter2,
457 gtk_tree_store_append (store, &iter2, &iter);
458 gtk_tree_store_set (store, &iter2,
459 0, "Leptospirillium Group",
462 gtk_tree_store_append (store, &iter2, &iter);
463 gtk_tree_store_set (store, &iter2,
466 gtk_tree_store_append (store, &iter2, &iter);
467 gtk_tree_store_set (store, &iter2,
468 0, "Chlorobium-Flavobacteria group",
470 gtk_tree_store_append (store, &iter2, &iter);
471 gtk_tree_store_set (store, &iter2,
472 0, "Chlamydia-Verrucomicrobia group",
475 gtk_tree_store_append (store, &iter3, &iter2);
476 gtk_tree_store_set (store, &iter3,
477 0, "Verrucomicrobia",
479 gtk_tree_store_append (store, &iter3, &iter2);
480 gtk_tree_store_set (store, &iter3,
484 gtk_tree_store_append (store, &iter2, &iter);
485 gtk_tree_store_set (store, &iter2,
490 gtk_tree_store_append (store, &iter2, &iter);
491 gtk_tree_store_set (store, &iter2,
492 0, "Fibrobacter group",
496 gtk_tree_store_append (store, &iter2, &iter);
497 gtk_tree_store_set (store, &iter2,
502 gtk_tree_store_append (store, &iter2, &iter);
503 gtk_tree_store_set (store, &iter2,
508 gtk_tree_store_append (store, &iter3, &iter2);
509 gtk_tree_store_set (store, &iter3,
514 gtk_tree_store_append (store, &iter3, &iter2);
515 gtk_tree_store_set (store, &iter3,
520 gtk_tree_store_append (store, &iter3, &iter2);
521 gtk_tree_store_set (store, &iter3,
526 gtk_tree_store_append (store, &iter3, &iter2);
527 gtk_tree_store_set (store, &iter3,
532 gtk_tree_store_append (store, &iter3, &iter2);
533 gtk_tree_store_set (store, &iter3,
538 gtk_tree_store_append (store, &iter, NULL);
539 gtk_tree_store_set (store, &iter,
544 gtk_tree_store_append (store, &iter2, &iter);
545 gtk_tree_store_set (store, &iter2,
550 gtk_tree_store_append (store, &iter2, &iter);
551 gtk_tree_store_set (store, &iter2,
556 gtk_tree_store_append (store, &iter2, &iter);
557 gtk_tree_store_set (store, &iter2,
562 gtk_tree_store_append (store, &iter2, &iter);
563 gtk_tree_store_set (store, &iter2,
568 gtk_tree_store_append (store, &iter2, &iter);
569 gtk_tree_store_set (store, &iter2,
574 gtk_tree_store_append (store, &iter2, &iter);
575 gtk_tree_store_set (store, &iter2,
580 gtk_tree_store_append (store, &iter2, &iter);
581 gtk_tree_store_set (store, &iter2,
586 gtk_tree_store_append (store, &iter2, &iter);
587 gtk_tree_store_set (store, &iter2,
588 0, "choanoflagellates",
592 gtk_tree_store_append (store, &iter2, &iter);
593 gtk_tree_store_set (store, &iter2,
598 gtk_tree_store_append (store, &iter2, &iter);
599 gtk_tree_store_set (store, &iter2,
604 gtk_tree_store_append (store, &iter2, &iter);
605 gtk_tree_store_set (store, &iter2,
610 gtk_tree_store_append (store, &iter2, &iter);
611 gtk_tree_store_set (store, &iter2,
616 gtk_tree_store_append (store, &iter2, &iter);
617 gtk_tree_store_set (store, &iter2,
622 gtk_tree_store_append (store, &iter2, &iter);
623 gtk_tree_store_set (store, &iter2,
628 gtk_tree_store_append (store, &iter2, &iter);
629 gtk_tree_store_set (store, &iter2,
630 0, "crytomonads et al",
634 gtk_tree_store_append (store, &iter, NULL);
635 gtk_tree_store_set (store, &iter,
640 gtk_tree_store_append (store, &iter2, &iter);
641 gtk_tree_store_set (store, &iter2,
646 gtk_tree_store_append (store, &iter2, &iter);
647 gtk_tree_store_set (store, &iter2,
652 gtk_tree_store_append (store, &iter2, &iter);
653 gtk_tree_store_set (store, &iter2,
657 return GTK_TREE_MODEL (store);
662 static GtkTreeModel *
663 create_capital_tree (void)
665 GtkTreeIter iter, iter2;
668 store = gtk_tree_store_new (1, G_TYPE_STRING);
670 gtk_tree_store_append (store, &iter, NULL);
671 gtk_tree_store_set (store, &iter, 0, "A - B", -1);
673 gtk_tree_store_append (store, &iter2, &iter);
674 gtk_tree_store_set (store, &iter2, 0, "Albany", -1);
676 gtk_tree_store_append (store, &iter2, &iter);
677 gtk_tree_store_set (store, &iter2, 0, "Annapolis", -1);
679 gtk_tree_store_append (store, &iter2, &iter);
680 gtk_tree_store_set (store, &iter2, 0, "Atlanta", -1);
682 gtk_tree_store_append (store, &iter2, &iter);
683 gtk_tree_store_set (store, &iter2, 0, "Augusta", -1);
685 gtk_tree_store_append (store, &iter2, &iter);
686 gtk_tree_store_set (store, &iter2, 0, "Austin", -1);
688 gtk_tree_store_append (store, &iter2, &iter);
689 gtk_tree_store_set (store, &iter2, 0, "Baton Rouge", -1);
691 gtk_tree_store_append (store, &iter2, &iter);
692 gtk_tree_store_set (store, &iter2, 0, "Bismarck", -1);
694 gtk_tree_store_append (store, &iter2, &iter);
695 gtk_tree_store_set (store, &iter2, 0, "Boise", -1);
697 gtk_tree_store_append (store, &iter2, &iter);
698 gtk_tree_store_set (store, &iter2, 0, "Boston", -1);
700 gtk_tree_store_append (store, &iter, NULL);
701 gtk_tree_store_set (store, &iter, 0, "C - D", -1);
703 gtk_tree_store_append (store, &iter2, &iter);
704 gtk_tree_store_set (store, &iter2, 0, "Carson City", -1);
706 gtk_tree_store_append (store, &iter2, &iter);
707 gtk_tree_store_set (store, &iter2, 0, "Charleston", -1);
709 gtk_tree_store_append (store, &iter2, &iter);
710 gtk_tree_store_set (store, &iter2, 0, "Cheyenne", -1);
712 gtk_tree_store_append (store, &iter2, &iter);
713 gtk_tree_store_set (store, &iter2, 0, "Columbia", -1);
715 gtk_tree_store_append (store, &iter2, &iter);
716 gtk_tree_store_set (store, &iter2, 0, "Columbus", -1);
718 gtk_tree_store_append (store, &iter2, &iter);
719 gtk_tree_store_set (store, &iter2, 0, "Concord", -1);
721 gtk_tree_store_append (store, &iter2, &iter);
722 gtk_tree_store_set (store, &iter2, 0, "Denver", -1);
724 gtk_tree_store_append (store, &iter2, &iter);
725 gtk_tree_store_set (store, &iter2, 0, "Des Moines", -1);
727 gtk_tree_store_append (store, &iter2, &iter);
728 gtk_tree_store_set (store, &iter2, 0, "Dover", -1);
731 gtk_tree_store_append (store, &iter, NULL);
732 gtk_tree_store_set (store, &iter, 0, "E - J", -1);
734 gtk_tree_store_append (store, &iter2, &iter);
735 gtk_tree_store_set (store, &iter2, 0, "Frankfort", -1);
737 gtk_tree_store_append (store, &iter2, &iter);
738 gtk_tree_store_set (store, &iter2, 0, "Harrisburg", -1);
740 gtk_tree_store_append (store, &iter2, &iter);
741 gtk_tree_store_set (store, &iter2, 0, "Hartford", -1);
743 gtk_tree_store_append (store, &iter2, &iter);
744 gtk_tree_store_set (store, &iter2, 0, "Helena", -1);
746 gtk_tree_store_append (store, &iter2, &iter);
747 gtk_tree_store_set (store, &iter2, 0, "Honolulu", -1);
749 gtk_tree_store_append (store, &iter2, &iter);
750 gtk_tree_store_set (store, &iter2, 0, "Indianapolis", -1);
752 gtk_tree_store_append (store, &iter2, &iter);
753 gtk_tree_store_set (store, &iter2, 0, "Jackson", -1);
755 gtk_tree_store_append (store, &iter2, &iter);
756 gtk_tree_store_set (store, &iter2, 0, "Jefferson City", -1);
758 gtk_tree_store_append (store, &iter2, &iter);
759 gtk_tree_store_set (store, &iter2, 0, "Juneau", -1);
762 gtk_tree_store_append (store, &iter, NULL);
763 gtk_tree_store_set (store, &iter, 0, "K - O", -1);
765 gtk_tree_store_append (store, &iter2, &iter);
766 gtk_tree_store_set (store, &iter2, 0, "Lansing", -1);
768 gtk_tree_store_append (store, &iter2, &iter);
769 gtk_tree_store_set (store, &iter2, 0, "Lincoln", -1);
771 gtk_tree_store_append (store, &iter2, &iter);
772 gtk_tree_store_set (store, &iter2, 0, "Little Rock", -1);
774 gtk_tree_store_append (store, &iter2, &iter);
775 gtk_tree_store_set (store, &iter2, 0, "Madison", -1);
777 gtk_tree_store_append (store, &iter2, &iter);
778 gtk_tree_store_set (store, &iter2, 0, "Montgomery", -1);
780 gtk_tree_store_append (store, &iter2, &iter);
781 gtk_tree_store_set (store, &iter2, 0, "Montpelier", -1);
783 gtk_tree_store_append (store, &iter2, &iter);
784 gtk_tree_store_set (store, &iter2, 0, "Nashville", -1);
786 gtk_tree_store_append (store, &iter2, &iter);
787 gtk_tree_store_set (store, &iter2, 0, "Oklahoma City", -1);
789 gtk_tree_store_append (store, &iter2, &iter);
790 gtk_tree_store_set (store, &iter2, 0, "Olympia", -1);
793 gtk_tree_store_append (store, &iter, NULL);
794 gtk_tree_store_set (store, &iter, 0, "P - S", -1);
796 gtk_tree_store_append (store, &iter2, &iter);
797 gtk_tree_store_set (store, &iter2, 0, "Phoenix", -1);
799 gtk_tree_store_append (store, &iter2, &iter);
800 gtk_tree_store_set (store, &iter2, 0, "Pierre", -1);
802 gtk_tree_store_append (store, &iter2, &iter);
803 gtk_tree_store_set (store, &iter2, 0, "Providence", -1);
805 gtk_tree_store_append (store, &iter2, &iter);
806 gtk_tree_store_set (store, &iter2, 0, "Raleigh", -1);
808 gtk_tree_store_append (store, &iter2, &iter);
809 gtk_tree_store_set (store, &iter2, 0, "Richmond", -1);
811 gtk_tree_store_append (store, &iter2, &iter);
812 gtk_tree_store_set (store, &iter2, 0, "Sacramento", -1);
814 gtk_tree_store_append (store, &iter2, &iter);
815 gtk_tree_store_set (store, &iter2, 0, "Salem", -1);
817 gtk_tree_store_append (store, &iter2, &iter);
818 gtk_tree_store_set (store, &iter2, 0, "Salt Lake City", -1);
820 gtk_tree_store_append (store, &iter2, &iter);
821 gtk_tree_store_set (store, &iter2, 0, "Santa Fe", -1);
823 gtk_tree_store_append (store, &iter2, &iter);
824 gtk_tree_store_set (store, &iter2, 0, "Springfield", -1);
826 gtk_tree_store_append (store, &iter2, &iter);
827 gtk_tree_store_set (store, &iter2, 0, "St. Paul", -1);
830 gtk_tree_store_append (store, &iter, NULL);
831 gtk_tree_store_set (store, &iter, 0, "T - Z", -1);
833 gtk_tree_store_append (store, &iter2, &iter);
834 gtk_tree_store_set (store, &iter2, 0, "Tallahassee", -1);
836 gtk_tree_store_append (store, &iter2, &iter);
837 gtk_tree_store_set (store, &iter2, 0, "Topeka", -1);
839 gtk_tree_store_append (store, &iter2, &iter);
840 gtk_tree_store_set (store, &iter2, 0, "Trenton", -1);
842 return GTK_TREE_MODEL (store);
846 capital_sensitive (GtkCellLayout *cell_layout,
847 GtkCellRenderer *cell,
848 GtkTreeModel *tree_model,
854 sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
856 g_object_set (cell, "sensitive", sensitive, NULL);
860 capital_animation (gpointer data)
862 static gint insert_count = 0;
863 GtkTreeModel *model = GTK_TREE_MODEL (data);
865 GtkTreeIter iter, parent;
867 switch (insert_count % 8)
870 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0);
871 gtk_tree_store_set (GTK_TREE_STORE (model),
877 path = gtk_tree_path_new_from_indices (0, -1);
878 gtk_tree_model_get_iter (model, &parent, path);
879 gtk_tree_path_free (path);
880 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0);
881 gtk_tree_store_set (GTK_TREE_STORE (model),
887 path = gtk_tree_path_new_from_indices (0, -1);
888 gtk_tree_model_get_iter (model, &parent, path);
889 gtk_tree_path_free (path);
890 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1);
891 gtk_tree_store_set (GTK_TREE_STORE (model),
897 path = gtk_tree_path_new_from_indices (0, -1);
898 gtk_tree_model_get_iter (model, &parent, path);
899 gtk_tree_path_free (path);
900 gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2);
901 gtk_tree_store_set (GTK_TREE_STORE (model),
907 path = gtk_tree_path_new_from_indices (0, 2, -1);
908 gtk_tree_model_get_iter (model, &iter, path);
909 gtk_tree_path_free (path);
910 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
914 path = gtk_tree_path_new_from_indices (0, 1, -1);
915 gtk_tree_model_get_iter (model, &iter, path);
916 gtk_tree_path_free (path);
917 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
921 path = gtk_tree_path_new_from_indices (0, 0, -1);
922 gtk_tree_model_get_iter (model, &iter, path);
923 gtk_tree_path_free (path);
924 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
928 path = gtk_tree_path_new_from_indices (0, -1);
929 gtk_tree_model_get_iter (model, &iter, path);
930 gtk_tree_path_free (path);
931 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
943 setup_combo_entry (GtkComboBoxText *combo)
945 gtk_combo_box_text_append_text (combo,
947 gtk_combo_box_text_append_text (combo,
949 gtk_combo_box_text_append_text (combo,
950 "la la la dum de dum la la la la la la boom de da la la");
951 gtk_combo_box_text_append_text (combo,
953 gtk_combo_box_text_append_text (combo,
955 gtk_combo_box_text_append_text (combo,
957 gtk_combo_box_text_append_text (combo,
959 gtk_combo_box_text_append_text (combo,
961 gtk_combo_box_text_append_text (combo,
963 gtk_combo_box_text_append_text (combo,
965 gtk_combo_box_text_append_text (combo,
967 gtk_combo_box_text_append_text (combo,
969 gtk_combo_box_text_append_text (combo,
971 gtk_combo_box_text_append_text (combo,
973 gtk_combo_box_text_append_text (combo,
975 gtk_combo_box_text_append_text (combo,
977 gtk_combo_box_text_append_text (combo,
979 gtk_combo_box_text_append_text (combo,
981 gtk_combo_box_text_append_text (combo,
983 gtk_combo_box_text_append_text (combo,
985 gtk_combo_box_text_append_text (combo,
987 gtk_combo_box_text_append_text (combo,
989 gtk_combo_box_text_append_text (combo,
991 gtk_combo_box_text_append_text (combo,
993 gtk_combo_box_text_append_text (combo,
998 set_sensitive (GtkCellLayout *cell_layout,
999 GtkCellRenderer *cell,
1000 GtkTreeModel *tree_model,
1008 path = gtk_tree_model_get_path (tree_model, iter);
1009 indices = gtk_tree_path_get_indices (path);
1010 sensitive = indices[0] != 1;
1011 gtk_tree_path_free (path);
1013 g_object_set (cell, "sensitive", sensitive, NULL);
1017 is_separator (GtkTreeModel *model,
1024 path = gtk_tree_model_get_path (model, iter);
1025 result = gtk_tree_path_get_indices (path)[0] == 4;
1026 gtk_tree_path_free (path);
1033 displayed_row_changed (GtkComboBox *combo,
1039 row = gtk_combo_box_get_active (combo);
1040 path = gtk_tree_path_new_from_indices (row, -1);
1041 gtk_cell_view_set_displayed_row (cell, path);
1042 gtk_tree_path_free (path);
1046 main (int argc, char **argv)
1048 GtkWidget *window, *cellview, *mainbox;
1049 GtkWidget *combobox, *comboboxtext, *comboboxgrid;
1050 GtkWidget *tmp, *boom;
1051 GtkCellRenderer *renderer;
1053 GtkTreeModel *model;
1058 gtk_init (&argc, &argv);
1060 if (g_getenv ("RTL"))
1061 gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
1063 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1064 gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1065 g_signal_connect (window, "destroy", gtk_main_quit, NULL);
1067 mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
1068 gtk_container_add (GTK_CONTAINER (window), mainbox);
1071 tmp = gtk_frame_new ("GtkCellView");
1072 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1074 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1075 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1076 gtk_container_add (GTK_CONTAINER (tmp), boom);
1078 cellview = gtk_cell_view_new ();
1079 renderer = gtk_cell_renderer_pixbuf_new ();
1080 pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
1081 GTK_ICON_SIZE_BUTTON, NULL);
1083 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1086 g_object_set (renderer, "pixbuf", pixbuf, NULL);
1088 renderer = gtk_cell_renderer_text_new ();
1089 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1092 g_object_set (renderer, "text", "la la la", NULL);
1093 gtk_container_add (GTK_CONTAINER (boom), cellview);
1095 /* GtkComboBox list */
1096 tmp = gtk_frame_new ("GtkComboBox (list)");
1097 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1099 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1100 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1101 gtk_container_add (GTK_CONTAINER (tmp), boom);
1103 model = create_list_blaat ();
1104 combobox = gtk_combo_box_new_with_model (model);
1105 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1106 g_object_unref (model);
1107 gtk_container_add (GTK_CONTAINER (boom), combobox);
1109 renderer = gtk_cell_renderer_pixbuf_new ();
1110 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1113 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1116 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1121 renderer = gtk_cell_renderer_text_new ();
1122 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1125 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1128 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1132 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1133 is_separator, NULL, NULL);
1135 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1137 /* GtkComboBox dynamic list */
1138 tmp = gtk_frame_new ("GtkComboBox (dynamic list)");
1139 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1141 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1142 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1143 gtk_container_add (GTK_CONTAINER (tmp), boom);
1145 model = create_empty_list_blaat ();
1146 combobox = gtk_combo_box_new_with_model (model);
1147 g_signal_connect (combobox, "notify::popup-shown",
1148 G_CALLBACK (populate_list_blaat), combobox);
1150 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1151 g_object_unref (model);
1152 gtk_container_add (GTK_CONTAINER (boom), combobox);
1154 renderer = gtk_cell_renderer_pixbuf_new ();
1155 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1158 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1161 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1166 renderer = gtk_cell_renderer_text_new ();
1167 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1170 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1173 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1177 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1178 is_separator, NULL, NULL);
1180 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1181 gtk_combo_box_set_title (GTK_COMBO_BOX (combobox), "Dynamic list");
1183 /* GtkComboBox custom entry */
1184 tmp = gtk_frame_new ("GtkComboBox (custom)");
1185 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1187 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1188 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1189 gtk_container_add (GTK_CONTAINER (tmp), boom);
1191 model = create_list_blaat ();
1192 combobox = gtk_combo_box_new_with_model (model);
1193 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1194 g_object_unref (model);
1195 gtk_container_add (GTK_CONTAINER (boom), combobox);
1197 renderer = gtk_cell_renderer_pixbuf_new ();
1198 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1201 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1204 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1209 renderer = gtk_cell_renderer_text_new ();
1210 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1213 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1216 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1220 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1221 is_separator, NULL, NULL);
1223 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1225 tmp = gtk_cell_view_new ();
1226 gtk_widget_show (tmp);
1227 gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
1229 renderer = gtk_cell_renderer_text_new ();
1230 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE);
1231 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
1235 color.blue = 0xffff;
1237 gtk_cell_view_set_background_color (GTK_CELL_VIEW (tmp), &color);
1238 displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
1239 g_signal_connect (combobox, "changed", G_CALLBACK (displayed_row_changed), tmp);
1241 gtk_container_add (GTK_CONTAINER (combobox), tmp);
1243 /* GtkComboBox tree */
1244 tmp = gtk_frame_new ("GtkComboBox (tree)");
1245 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1247 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1248 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1249 gtk_container_add (GTK_CONTAINER (tmp), boom);
1251 model = create_tree_blaat ();
1252 combobox = gtk_combo_box_new_with_model (model);
1253 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1254 g_object_unref (model);
1255 gtk_container_add (GTK_CONTAINER (boom), combobox);
1257 renderer = gtk_cell_renderer_pixbuf_new ();
1258 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1261 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1264 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1269 renderer = gtk_cell_renderer_text_new ();
1270 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1273 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1276 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1280 gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox),
1281 is_separator, NULL, NULL);
1283 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1285 g_timeout_add (1000, (GSourceFunc) animation_timer, model);
1288 /* GtkComboBox (grid mode) */
1289 tmp = gtk_frame_new ("GtkComboBox (grid mode)");
1290 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1292 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1293 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1294 gtk_container_add (GTK_CONTAINER (tmp), boom);
1296 comboboxgrid = create_combo_box_grid_demo ();
1297 gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
1300 /* GtkComboBoxEntry */
1301 tmp = gtk_frame_new ("GtkComboBox with entry");
1302 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1304 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1305 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1306 gtk_container_add (GTK_CONTAINER (tmp), boom);
1308 comboboxtext = gtk_combo_box_text_new_with_entry ();
1309 setup_combo_entry (GTK_COMBO_BOX_TEXT (comboboxtext));
1310 gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
1313 /* Phylogenetic tree */
1314 tmp = gtk_frame_new ("What are you ?");
1315 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1317 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1318 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1319 gtk_container_add (GTK_CONTAINER (tmp), boom);
1321 model = create_phylogenetic_tree ();
1322 combobox = gtk_combo_box_new_with_model (model);
1323 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1324 g_object_unref (model);
1325 gtk_container_add (GTK_CONTAINER (boom), combobox);
1327 renderer = gtk_cell_renderer_text_new ();
1328 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1331 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1335 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1339 tmp = gtk_frame_new ("Where are you ?");
1340 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1342 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1343 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1344 gtk_container_add (GTK_CONTAINER (tmp), boom);
1346 model = create_capital_tree ();
1347 combobox = gtk_combo_box_new_with_model (model);
1348 gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1349 g_object_unref (model);
1350 gtk_container_add (GTK_CONTAINER (boom), combobox);
1351 renderer = gtk_cell_renderer_text_new ();
1352 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1355 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1358 gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1362 path = gtk_tree_path_new_from_indices (0, 8, -1);
1363 gtk_tree_model_get_iter (model, &iter, path);
1364 gtk_tree_path_free (path);
1365 gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
1368 gdk_threads_add_timeout (1000, (GSourceFunc) capital_animation, model);
1371 /* Ellipsizing growing combos */
1372 tmp = gtk_frame_new ("Unconstrained Menu");
1373 gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1375 boom = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
1376 gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1377 gtk_container_add (GTK_CONTAINER (tmp), boom);
1379 model = create_list_long ();
1380 combobox = gtk_combo_box_new_with_model (model);
1381 g_object_unref (model);
1382 gtk_container_add (GTK_CONTAINER (boom), combobox);
1383 renderer = gtk_cell_renderer_text_new ();
1384 g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
1386 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
1387 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1389 gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1390 gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox), FALSE);
1392 gtk_widget_show_all (window);