]> Pileus Git - ~andy/gtk/blob - tests/testcombo.c
Add a tearoff-title property, with getter and setter. (#316482, Olexiy
[~andy/gtk] / tests / testcombo.c
1 /* testcombo.c
2  * Copyright (C) 2003  Kristian Rietveld
3  *
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.
8  *
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.
13  *
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.
18  */
19 #include <config.h>
20 #include <gtk/gtk.h>
21
22 #include <string.h>
23 #include <stdio.h>
24
25 /**
26  * oh yes, this test app surely has a lot of ugly code
27  */
28
29 /* grid combo demo */
30 static GdkPixbuf *
31 create_color_pixbuf (const char *color)
32 {
33         GdkPixbuf *pixbuf;
34         GdkColor col;
35
36         int x;
37         int num;
38         int rowstride;
39         guchar *pixels, *p;
40
41         if (!gdk_color_parse (color, &col))
42                 return NULL;
43
44         pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
45                                  FALSE, 8,
46                                  16, 16);
47
48         rowstride = gdk_pixbuf_get_rowstride (pixbuf);
49         p = pixels = gdk_pixbuf_get_pixels (pixbuf);
50
51         num = gdk_pixbuf_get_width (pixbuf) *
52                 gdk_pixbuf_get_height (pixbuf);
53
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;
58                 p += 3;
59         }
60
61         return pixbuf;
62 }
63
64 static GtkWidget *
65 create_combo_box_grid_demo (void)
66 {
67         GtkWidget *combo;
68         GtkTreeIter iter;
69         GtkCellRenderer *cell = gtk_cell_renderer_pixbuf_new ();
70         GtkListStore *store;
71
72         store = gtk_list_store_new (1, GDK_TYPE_PIXBUF);
73
74         combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
75         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
76                                     cell, TRUE);
77         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo),
78                                         cell, "pixbuf", 0, NULL);
79         gtk_combo_box_set_wrap_width (GTK_COMBO_BOX (combo),
80                                       3);
81
82         /* first row */
83         gtk_list_store_append (store, &iter);
84         gtk_list_store_set (store, &iter,
85                             0, create_color_pixbuf ("red"),
86                             -1);
87
88         gtk_list_store_append (store, &iter);
89         gtk_list_store_set (store, &iter,
90                             0, create_color_pixbuf ("green"),
91                             -1);
92
93         gtk_list_store_append (store, &iter);
94         gtk_list_store_set (store, &iter,
95                             0, create_color_pixbuf ("blue"),
96                             -1);
97
98         /* second row */
99         gtk_list_store_append (store, &iter);
100         gtk_list_store_set (store, &iter,
101                             0, create_color_pixbuf ("yellow"),
102                             -1);
103
104         gtk_list_store_append (store, &iter);
105         gtk_list_store_set (store, &iter,
106                             0, create_color_pixbuf ("black"),
107                             -1);
108
109         gtk_list_store_append (store, &iter);
110         gtk_list_store_set (store, &iter,
111                             0, create_color_pixbuf ("white"),
112                             -1);
113
114         /* third row */
115         gtk_list_store_append (store, &iter);
116         gtk_list_store_set (store, &iter,
117                             0, create_color_pixbuf ("gray"),
118                             -1);
119
120         gtk_list_store_append (store, &iter);
121         gtk_list_store_set (store, &iter,
122                             0, create_color_pixbuf ("snow"),
123                             -1);
124
125         gtk_list_store_append (store, &iter);
126         gtk_list_store_set (store, &iter,
127                             0, create_color_pixbuf ("magenta"),
128                             -1);
129
130         g_object_unref (store);
131
132         gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
133
134         return combo;
135 }
136
137 /* blaat */
138 static GtkTreeModel *
139 create_tree_blaat (void)
140 {
141         GdkPixbuf *pixbuf;
142         GtkWidget *cellview;
143         GtkTreeIter iter, iter2;
144         GtkTreeStore *store;
145
146         cellview = gtk_cell_view_new ();
147
148         store = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_BOOLEAN);
149
150         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
151                                          GTK_ICON_SIZE_BUTTON, NULL);
152         gtk_tree_store_append (store, &iter, NULL);
153         gtk_tree_store_set (store, &iter,
154                             0, pixbuf,
155                             1, "gtk-stock-dialog-warning",
156                             2, FALSE,
157                             -1);
158
159         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_STOP,
160                                          GTK_ICON_SIZE_BUTTON, NULL);
161         gtk_tree_store_append (store, &iter2, &iter);                          
162         gtk_tree_store_set (store, &iter2,
163                             0, pixbuf,
164                             1, "gtk-stock-stop",
165                             2, FALSE,
166                             -1);
167
168         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
169                                          GTK_ICON_SIZE_BUTTON, NULL);
170         gtk_tree_store_append (store, &iter2, &iter);                          
171         gtk_tree_store_set (store, &iter2,
172                             0, pixbuf,
173                             1, "gtk-stock-new",
174                             2, FALSE,
175                             -1);
176
177         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
178                                          GTK_ICON_SIZE_BUTTON, NULL);
179         gtk_tree_store_append (store, &iter, NULL);
180         gtk_tree_store_set (store, &iter,
181                             0, pixbuf,
182                             1, "gtk-stock-clear",
183                             2, FALSE,
184                             -1);
185
186 #if 0
187         gtk_tree_store_append (store, &iter, NULL);
188         gtk_tree_store_set (store, &iter,
189                             0, NULL,
190                             1, "separator",
191                             2, TRUE,
192                             -1);
193 #endif
194
195         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_OPEN,
196                                          GTK_ICON_SIZE_BUTTON, NULL);
197         gtk_tree_store_append (store, &iter, NULL);
198         gtk_tree_store_set (store, &iter,
199                             0, pixbuf,
200                             1, "gtk-stock-open",
201                             2, FALSE,
202                             -1);
203
204         gtk_widget_destroy (cellview);
205
206         return GTK_TREE_MODEL (store);
207 }
208
209 static GtkTreeModel *
210 create_empty_list_blaat (void)
211 {
212         GdkPixbuf *pixbuf;
213         GtkWidget *cellview;
214         GtkTreeIter iter;
215         GtkListStore *store;
216
217         cellview = gtk_cell_view_new ();
218
219         store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
220
221         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
222                                          GTK_ICON_SIZE_BUTTON, NULL);
223         gtk_list_store_append (store, &iter);
224         gtk_list_store_set (store, &iter,
225                             0, pixbuf,
226                             1, "gtk-stock-dialog-warning",
227                             -1);
228
229         gtk_widget_destroy (cellview);
230
231         return GTK_TREE_MODEL (store);
232 }
233
234 static void
235 populate_list_blaat (gpointer data)
236 {
237   GtkComboBox *combo_box = GTK_COMBO_BOX (data);
238   GtkListStore *store;
239   GdkPixbuf *pixbuf;
240   GtkWidget *cellview;
241   GtkTreeIter iter;
242   
243   store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_box));
244
245   gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
246
247   if (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter))
248     return;
249
250   cellview = gtk_cell_view_new ();
251   
252   pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_STOP,
253                                    GTK_ICON_SIZE_BUTTON, NULL);
254   gtk_list_store_append (store, &iter);                        
255   gtk_list_store_set (store, &iter,
256                       0, pixbuf,
257                       1, "gtk-stock-stop",
258                       -1);
259   
260   pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
261                                    GTK_ICON_SIZE_BUTTON, NULL);
262   gtk_list_store_append (store, &iter);                        
263   gtk_list_store_set (store, &iter,
264                       0, pixbuf,
265                       1, "gtk-stock-new",
266                       -1);
267   
268   pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
269                                    GTK_ICON_SIZE_BUTTON, NULL);
270   gtk_list_store_append (store, &iter);
271   gtk_list_store_set (store, &iter,
272                       0, pixbuf,
273                       1, "gtk-stock-clear",
274                       -1);
275   
276   gtk_list_store_append (store, &iter);
277   gtk_list_store_set (store, &iter,
278                       0, NULL,
279                       1, "separator",
280                       -1);
281   
282   pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_OPEN,
283                                    GTK_ICON_SIZE_BUTTON, NULL);
284   gtk_list_store_append (store, &iter);
285   gtk_list_store_set (store, &iter,
286                       0, pixbuf,
287                       1, "gtk-stock-open",
288                       -1);
289   
290   gtk_widget_destroy (cellview);  
291 }
292
293 static GtkTreeModel *
294 create_list_blaat (void)
295 {
296         GdkPixbuf *pixbuf;
297         GtkWidget *cellview;
298         GtkTreeIter iter;
299         GtkListStore *store;
300
301         cellview = gtk_cell_view_new ();
302
303         store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
304
305         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
306                                          GTK_ICON_SIZE_BUTTON, NULL);
307         gtk_list_store_append (store, &iter);
308         gtk_list_store_set (store, &iter,
309                             0, pixbuf,
310                             1, "gtk-stock-dialog-warning",
311                             -1);
312
313         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_STOP,
314                                          GTK_ICON_SIZE_BUTTON, NULL);
315         gtk_list_store_append (store, &iter);                          
316         gtk_list_store_set (store, &iter,
317                             0, pixbuf,
318                             1, "gtk-stock-stop",
319                             -1);
320
321         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_NEW,
322                                          GTK_ICON_SIZE_BUTTON, NULL);
323         gtk_list_store_append (store, &iter);                          
324         gtk_list_store_set (store, &iter,
325                             0, pixbuf,
326                             1, "gtk-stock-new",
327                             -1);
328
329         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_CLEAR,
330                                          GTK_ICON_SIZE_BUTTON, NULL);
331         gtk_list_store_append (store, &iter);
332         gtk_list_store_set (store, &iter,
333                             0, pixbuf,
334                             1, "gtk-stock-clear",
335                             -1);
336
337         gtk_list_store_append (store, &iter);
338         gtk_list_store_set (store, &iter,
339                             0, NULL,
340                             1, "separator",
341                             -1);
342
343         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_OPEN,
344                                          GTK_ICON_SIZE_BUTTON, NULL);
345         gtk_list_store_append (store, &iter);
346         gtk_list_store_set (store, &iter,
347                             0, pixbuf,
348                             1, "gtk-stock-open",
349                             -1);
350
351         gtk_widget_destroy (cellview);
352
353         return GTK_TREE_MODEL (store);
354 }
355
356 /* blaat */
357 static GtkTreeModel *
358 create_phylogenetic_tree (void)
359 {
360         GtkTreeIter iter, iter2, iter3;
361         GtkTreeStore *store;
362
363         store = gtk_tree_store_new (1,G_TYPE_STRING);
364
365         gtk_tree_store_append (store, &iter, NULL);
366         gtk_tree_store_set (store, &iter,
367                             0, "Eubacteria",
368                             -1);
369
370         gtk_tree_store_append (store, &iter2, &iter);                          
371         gtk_tree_store_set (store, &iter2,
372                             0, "Aquifecales",
373                             -1);
374
375         gtk_tree_store_append (store, &iter2, &iter);                          
376         gtk_tree_store_set (store, &iter2,
377                             0, "Thermotogales",
378                             -1);
379
380         gtk_tree_store_append (store, &iter2, &iter);                          
381         gtk_tree_store_set (store, &iter2,
382                             0, "Thermodesulfobacterium",
383                             -1);
384
385         gtk_tree_store_append (store, &iter2, &iter);                          
386         gtk_tree_store_set (store, &iter2,
387                             0, "Thermus-Deinococcus group",
388                             -1);
389
390         gtk_tree_store_append (store, &iter2, &iter);                          
391         gtk_tree_store_set (store, &iter2,
392                             0, "Chloroflecales",
393                             -1);
394
395         gtk_tree_store_append (store, &iter2, &iter);                          
396         gtk_tree_store_set (store, &iter2,
397                             0, "Cyanobacteria",
398                             -1);
399
400         gtk_tree_store_append (store, &iter2, &iter);                          
401         gtk_tree_store_set (store, &iter2,
402                             0, "Firmicutes",
403                             -1);
404
405         gtk_tree_store_append (store, &iter2, &iter);                          
406         gtk_tree_store_set (store, &iter2,
407                             0, "Leptospirillium Group",
408                             -1);
409
410         gtk_tree_store_append (store, &iter2, &iter);                          
411         gtk_tree_store_set (store, &iter2,
412                             0, "Synergistes",
413                             -1);
414         gtk_tree_store_append (store, &iter2, &iter);                          
415         gtk_tree_store_set (store, &iter2,
416                             0, "Chlorobium-Flavobacteria group",
417                             -1);
418         gtk_tree_store_append (store, &iter2, &iter);                          
419         gtk_tree_store_set (store, &iter2,
420                             0, "Chlamydia-Verrucomicrobia group",
421                             -1);
422
423         gtk_tree_store_append (store, &iter3, &iter2);                         
424         gtk_tree_store_set (store, &iter3,
425                             0, "Verrucomicrobia",
426                             -1);
427         gtk_tree_store_append (store, &iter3, &iter2);                         
428         gtk_tree_store_set (store, &iter3,
429                             0, "Chlamydia",
430                             -1);
431
432         gtk_tree_store_append (store, &iter2, &iter);                          
433         gtk_tree_store_set (store, &iter2,
434                             0, "Flexistipes",
435                             -1);
436
437
438         gtk_tree_store_append (store, &iter2, &iter);                          
439         gtk_tree_store_set (store, &iter2,
440                             0, "Fibrobacter group",
441                             -1);
442
443
444         gtk_tree_store_append (store, &iter2, &iter);                          
445         gtk_tree_store_set (store, &iter2,
446                             0, "spirocheteus",
447                             -1);
448
449
450         gtk_tree_store_append (store, &iter2, &iter);                          
451         gtk_tree_store_set (store, &iter2,
452                             0, "Proteobacteria",
453                             -1);
454
455
456         gtk_tree_store_append (store, &iter3, &iter2);                         
457         gtk_tree_store_set (store, &iter3,
458                             0, "alpha",
459                             -1);
460
461
462         gtk_tree_store_append (store, &iter3, &iter2);                         
463         gtk_tree_store_set (store, &iter3,
464                             0, "beta",
465                             -1);
466
467
468         gtk_tree_store_append (store, &iter3, &iter2);                         
469         gtk_tree_store_set (store, &iter3,
470                             0, "delta ",
471                             -1);
472
473
474         gtk_tree_store_append (store, &iter3, &iter2);                         
475         gtk_tree_store_set (store, &iter3,
476                             0, "epsilon",
477                             -1);
478
479
480         gtk_tree_store_append (store, &iter3, &iter2);  
481         gtk_tree_store_set (store, &iter3,
482                             0, "gamma ",
483                             -1);
484
485
486         gtk_tree_store_append (store, &iter, NULL);                            
487         gtk_tree_store_set (store, &iter,
488                             0, "Eukaryotes",
489                             -1);
490
491
492         gtk_tree_store_append (store, &iter2, &iter);                          
493         gtk_tree_store_set (store, &iter2,
494                             0, "Metazoa",
495                             -1);
496
497
498         gtk_tree_store_append (store, &iter2, &iter);                          
499         gtk_tree_store_set (store, &iter2,
500                             0, "Bilateria",
501                             -1);
502
503
504         gtk_tree_store_append (store, &iter2, &iter);                          
505         gtk_tree_store_set (store, &iter2,
506                             0, "Myxozoa",
507                             -1);
508
509
510         gtk_tree_store_append (store, &iter2, &iter);                          
511         gtk_tree_store_set (store, &iter2,
512                             0, "Cnidaria",
513                             -1);
514
515
516         gtk_tree_store_append (store, &iter2, &iter);                          
517         gtk_tree_store_set (store, &iter2,
518                             0, "Ctenophora",
519                             -1);
520
521
522         gtk_tree_store_append (store, &iter2, &iter);                          
523         gtk_tree_store_set (store, &iter2,
524                             0, "Placozoa",
525                             -1);
526
527
528         gtk_tree_store_append (store, &iter2, &iter);                          
529         gtk_tree_store_set (store, &iter2,
530                             0, "Porifera",
531                             -1);
532
533
534         gtk_tree_store_append (store, &iter2, &iter);                          
535         gtk_tree_store_set (store, &iter2,
536                             0, "choanoflagellates",
537                             -1);
538
539
540         gtk_tree_store_append (store, &iter2, &iter);                          
541         gtk_tree_store_set (store, &iter2,
542                             0, "Fungi",
543                             -1);
544
545
546         gtk_tree_store_append (store, &iter2, &iter);                          
547         gtk_tree_store_set (store, &iter2,
548                             0, "Microsporidia",
549                             -1);
550
551
552         gtk_tree_store_append (store, &iter2, &iter);                          
553         gtk_tree_store_set (store, &iter2,
554                             0, "Aleveolates",
555                             -1);
556
557
558         gtk_tree_store_append (store, &iter2, &iter);                          
559         gtk_tree_store_set (store, &iter2,
560                             0, "Stramenopiles",
561                             -1);
562
563
564         gtk_tree_store_append (store, &iter2, &iter);                          
565         gtk_tree_store_set (store, &iter2,
566                             0, "Rhodophyta",
567                             -1);
568
569
570         gtk_tree_store_append (store, &iter2, &iter);                          
571         gtk_tree_store_set (store, &iter2,
572                             0, "Viridaeplantae",
573                             -1);
574
575
576         gtk_tree_store_append (store, &iter2, &iter);                          
577         gtk_tree_store_set (store, &iter2,
578                             0, "crytomonads et al",
579                             -1);
580
581
582         gtk_tree_store_append (store, &iter, NULL);                            
583         gtk_tree_store_set (store, &iter,
584                             0, "Archaea ",
585                             -1);
586
587
588         gtk_tree_store_append (store, &iter2, &iter);                          
589         gtk_tree_store_set (store, &iter2,
590                             0, "Korarchaeota",
591                             -1);
592
593
594         gtk_tree_store_append (store, &iter2, &iter);                          
595         gtk_tree_store_set (store, &iter2,
596                             0, "Crenarchaeota",
597                             -1);
598
599
600         gtk_tree_store_append (store, &iter2, &iter);                          
601         gtk_tree_store_set (store, &iter2,
602                             0, "Buryarchaeota",
603                             -1);
604
605         return GTK_TREE_MODEL (store);
606 }
607
608
609 /* blaat */
610 static GtkTreeModel *
611 create_capital_tree (void)
612 {
613         GtkTreeIter iter, iter2;
614         GtkTreeStore *store;
615
616         store = gtk_tree_store_new (1, G_TYPE_STRING);
617
618         gtk_tree_store_append (store, &iter, NULL);
619         gtk_tree_store_set (store, &iter, 0, "A - B", -1);
620
621         gtk_tree_store_append (store, &iter2, &iter);
622         gtk_tree_store_set (store, &iter2, 0, "Albany", -1);
623
624         gtk_tree_store_append (store, &iter2, &iter);
625         gtk_tree_store_set (store, &iter2, 0, "Annapolis", -1);
626
627         gtk_tree_store_append (store, &iter2, &iter);
628         gtk_tree_store_set (store, &iter2, 0, "Atlanta", -1);
629
630         gtk_tree_store_append (store, &iter2, &iter);
631         gtk_tree_store_set (store, &iter2, 0, "Augusta", -1);
632
633         gtk_tree_store_append (store, &iter2, &iter);
634         gtk_tree_store_set (store, &iter2, 0, "Austin", -1);
635
636         gtk_tree_store_append (store, &iter2, &iter);
637         gtk_tree_store_set (store, &iter2, 0, "Baton Rouge", -1);
638
639         gtk_tree_store_append (store, &iter2, &iter);
640         gtk_tree_store_set (store, &iter2, 0, "Bismarck", -1);
641
642         gtk_tree_store_append (store, &iter2, &iter);
643         gtk_tree_store_set (store, &iter2, 0, "Boise", -1);
644
645         gtk_tree_store_append (store, &iter2, &iter);
646         gtk_tree_store_set (store, &iter2, 0, "Boston", -1);
647
648         gtk_tree_store_append (store, &iter, NULL);
649         gtk_tree_store_set (store, &iter, 0, "C - D", -1);
650
651         gtk_tree_store_append (store, &iter2, &iter);
652         gtk_tree_store_set (store, &iter2, 0, "Carson City", -1);
653
654         gtk_tree_store_append (store, &iter2, &iter);
655         gtk_tree_store_set (store, &iter2, 0, "Charleston", -1);
656
657         gtk_tree_store_append (store, &iter2, &iter);
658         gtk_tree_store_set (store, &iter2, 0, "Cheyenne", -1);
659
660         gtk_tree_store_append (store, &iter2, &iter);
661         gtk_tree_store_set (store, &iter2, 0, "Columbia", -1);
662
663         gtk_tree_store_append (store, &iter2, &iter);
664         gtk_tree_store_set (store, &iter2, 0, "Columbus", -1);
665
666         gtk_tree_store_append (store, &iter2, &iter);
667         gtk_tree_store_set (store, &iter2, 0, "Concord", -1);
668
669         gtk_tree_store_append (store, &iter2, &iter);
670         gtk_tree_store_set (store, &iter2, 0, "Denver", -1);
671
672         gtk_tree_store_append (store, &iter2, &iter);
673         gtk_tree_store_set (store, &iter2, 0, "Des Moines", -1);
674
675         gtk_tree_store_append (store, &iter2, &iter);
676         gtk_tree_store_set (store, &iter2, 0, "Dover", -1);
677
678
679         gtk_tree_store_append (store, &iter, NULL);
680         gtk_tree_store_set (store, &iter, 0, "E - J", -1);
681
682         gtk_tree_store_append (store, &iter2, &iter);
683         gtk_tree_store_set (store, &iter2, 0, "Frankfort", -1);
684
685         gtk_tree_store_append (store, &iter2, &iter);
686         gtk_tree_store_set (store, &iter2, 0, "Harrisburg", -1);
687
688         gtk_tree_store_append (store, &iter2, &iter);
689         gtk_tree_store_set (store, &iter2, 0, "Hartford", -1);
690
691         gtk_tree_store_append (store, &iter2, &iter);
692         gtk_tree_store_set (store, &iter2, 0, "Helena", -1);
693
694         gtk_tree_store_append (store, &iter2, &iter);
695         gtk_tree_store_set (store, &iter2, 0, "Honolulu", -1);
696
697         gtk_tree_store_append (store, &iter2, &iter);
698         gtk_tree_store_set (store, &iter2, 0, "Indianapolis", -1);
699
700         gtk_tree_store_append (store, &iter2, &iter);
701         gtk_tree_store_set (store, &iter2, 0, "Jackson", -1);
702
703         gtk_tree_store_append (store, &iter2, &iter);
704         gtk_tree_store_set (store, &iter2, 0, "Jefferson City", -1);
705
706         gtk_tree_store_append (store, &iter2, &iter);
707         gtk_tree_store_set (store, &iter2, 0, "Juneau", -1);
708
709
710         gtk_tree_store_append (store, &iter, NULL);
711         gtk_tree_store_set (store, &iter, 0, "K - O", -1);
712
713         gtk_tree_store_append (store, &iter2, &iter);
714         gtk_tree_store_set (store, &iter2, 0, "Lansing", -1);
715
716         gtk_tree_store_append (store, &iter2, &iter);
717         gtk_tree_store_set (store, &iter2, 0, "Lincoln", -1);
718
719         gtk_tree_store_append (store, &iter2, &iter);
720         gtk_tree_store_set (store, &iter2, 0, "Little Rock", -1);
721
722         gtk_tree_store_append (store, &iter2, &iter);
723         gtk_tree_store_set (store, &iter2, 0, "Madison", -1);
724
725         gtk_tree_store_append (store, &iter2, &iter);
726         gtk_tree_store_set (store, &iter2, 0, "Montgomery", -1);
727
728         gtk_tree_store_append (store, &iter2, &iter);
729         gtk_tree_store_set (store, &iter2, 0, "Montpelier", -1);
730
731         gtk_tree_store_append (store, &iter2, &iter);
732         gtk_tree_store_set (store, &iter2, 0, "Nashville", -1);
733
734         gtk_tree_store_append (store, &iter2, &iter);
735         gtk_tree_store_set (store, &iter2, 0, "Oklahoma City", -1);
736
737         gtk_tree_store_append (store, &iter2, &iter);
738         gtk_tree_store_set (store, &iter2, 0, "Olympia", -1);
739
740
741         gtk_tree_store_append (store, &iter, NULL);
742         gtk_tree_store_set (store, &iter, 0, "P - S", -1);
743
744         gtk_tree_store_append (store, &iter2, &iter);
745         gtk_tree_store_set (store, &iter2, 0, "Phoenix", -1);
746
747         gtk_tree_store_append (store, &iter2, &iter);
748         gtk_tree_store_set (store, &iter2, 0, "Pierre", -1);
749
750         gtk_tree_store_append (store, &iter2, &iter);
751         gtk_tree_store_set (store, &iter2, 0, "Providence", -1);
752
753         gtk_tree_store_append (store, &iter2, &iter);
754         gtk_tree_store_set (store, &iter2, 0, "Raleigh", -1);
755
756         gtk_tree_store_append (store, &iter2, &iter);
757         gtk_tree_store_set (store, &iter2, 0, "Richmond", -1);
758
759         gtk_tree_store_append (store, &iter2, &iter);
760         gtk_tree_store_set (store, &iter2, 0, "Sacramento", -1);
761
762         gtk_tree_store_append (store, &iter2, &iter);
763         gtk_tree_store_set (store, &iter2, 0, "Salem", -1);
764
765         gtk_tree_store_append (store, &iter2, &iter);
766         gtk_tree_store_set (store, &iter2, 0, "Salt Lake City", -1);
767
768         gtk_tree_store_append (store, &iter2, &iter);
769         gtk_tree_store_set (store, &iter2, 0, "Santa Fe", -1);
770
771         gtk_tree_store_append (store, &iter2, &iter);
772         gtk_tree_store_set (store, &iter2, 0, "Springfield", -1);
773
774         gtk_tree_store_append (store, &iter2, &iter);
775         gtk_tree_store_set (store, &iter2, 0, "St. Paul", -1);
776
777
778         gtk_tree_store_append (store, &iter, NULL);
779         gtk_tree_store_set (store, &iter, 0, "T - Z", -1);
780
781         gtk_tree_store_append (store, &iter2, &iter);
782         gtk_tree_store_set (store, &iter2, 0, "Tallahassee", -1);
783
784         gtk_tree_store_append (store, &iter2, &iter);
785         gtk_tree_store_set (store, &iter2, 0, "Topeka", -1);
786
787         gtk_tree_store_append (store, &iter2, &iter);
788         gtk_tree_store_set (store, &iter2, 0, "Trenton", -1);
789
790         return GTK_TREE_MODEL (store);
791 }
792
793 static void
794 capital_sensitive (GtkCellLayout   *cell_layout,
795                    GtkCellRenderer *cell,
796                    GtkTreeModel    *tree_model,
797                    GtkTreeIter     *iter,
798                    gpointer         data)
799 {
800   gboolean sensitive;
801
802   sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
803
804   g_object_set (cell, "sensitive", sensitive, NULL);
805 }
806
807 static gboolean
808 capital_animation (gpointer data)
809 {
810   static gint insert_count = 0;
811   GtkTreeModel *model = GTK_TREE_MODEL (data);
812   GtkTreePath *path;
813   GtkTreeIter iter, parent;
814
815   switch (insert_count % 8)
816     {
817     case 0:
818       gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, NULL, 0);
819       gtk_tree_store_set (GTK_TREE_STORE (model), 
820                           &iter,
821                           0, "Europe", -1);
822       break;
823
824     case 1:
825       path = gtk_tree_path_new_from_indices (0, -1);
826       gtk_tree_model_get_iter (model, &parent, path);
827       gtk_tree_path_free (path);
828       gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 0);
829       gtk_tree_store_set (GTK_TREE_STORE (model), 
830                           &iter,
831                           0, "Berlin", -1);
832       break;
833
834     case 2:
835       path = gtk_tree_path_new_from_indices (0, -1);
836       gtk_tree_model_get_iter (model, &parent, path);
837       gtk_tree_path_free (path);
838       gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 1);
839       gtk_tree_store_set (GTK_TREE_STORE (model), 
840                           &iter,
841                           0, "London", -1);
842       break;
843
844     case 3:
845       path = gtk_tree_path_new_from_indices (0, -1);
846       gtk_tree_model_get_iter (model, &parent, path);
847       gtk_tree_path_free (path);
848       gtk_tree_store_insert (GTK_TREE_STORE (model), &iter, &parent, 2);
849       gtk_tree_store_set (GTK_TREE_STORE (model), 
850                           &iter,
851                           0, "Paris", -1);
852       break;
853
854     case 4:
855       path = gtk_tree_path_new_from_indices (0, 2, -1);
856       gtk_tree_model_get_iter (model, &iter, path);
857       gtk_tree_path_free (path);
858       gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
859       break;
860
861     case 5:
862       path = gtk_tree_path_new_from_indices (0, 1, -1);
863       gtk_tree_model_get_iter (model, &iter, path);
864       gtk_tree_path_free (path);
865       gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
866       break;
867
868     case 6:
869       path = gtk_tree_path_new_from_indices (0, 0, -1);
870       gtk_tree_model_get_iter (model, &iter, path);
871       gtk_tree_path_free (path);
872       gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
873       break;
874
875     case 7:
876       path = gtk_tree_path_new_from_indices (0, -1);
877       gtk_tree_model_get_iter (model, &iter, path);
878       gtk_tree_path_free (path);
879       gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
880       break;
881
882     default: ;
883
884     }
885   insert_count++;
886
887   return TRUE;
888 }
889
890 static void
891 setup_combo_entry (GtkWidget *entry_box)
892 {
893         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
894                                    "dum de dum");
895         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
896                                    "la la la");
897         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
898                                    "la la la dum de dum la la la la la la boom de da la la");
899         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
900                                    "bloop");
901         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
902                                    "bleep");
903         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
904                                    "klaas");
905         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
906                                    "klaas0");
907         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
908                                    "klaas1");
909         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
910                                    "klaas2");
911         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
912                                    "klaas3");
913         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
914                                    "klaas4");
915         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
916                                    "klaas5");
917         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
918                                    "klaas6");
919         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
920                                    "klaas7");
921         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
922                                    "klaas8");
923         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
924                                    "klaas9");
925         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
926                                    "klaasa");
927         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
928                                    "klaasb");
929         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
930                                    "klaasc");
931         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
932                                    "klaasd");
933         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
934                                    "klaase");
935         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
936                                    "klaasf");
937         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
938                                    "klaas10");
939         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
940                                    "klaas11");
941         gtk_combo_box_append_text (GTK_COMBO_BOX (entry_box),
942                                    "klaas12");
943 }
944
945 static void
946 set_sensitive (GtkCellLayout   *cell_layout,
947                GtkCellRenderer *cell,
948                GtkTreeModel    *tree_model,
949                GtkTreeIter     *iter,
950                gpointer         data)
951 {
952   GtkTreePath *path;
953   gint *indices;
954   gboolean sensitive;
955
956   path = gtk_tree_model_get_path (tree_model, iter);
957   indices = gtk_tree_path_get_indices (path);
958   sensitive = indices[0] != 1;
959   gtk_tree_path_free (path);
960
961   g_object_set (cell, "sensitive", sensitive, NULL);
962 }
963
964 static gboolean
965 is_separator (GtkTreeModel *model,
966               GtkTreeIter  *iter,
967               gpointer      data)
968 {
969   GtkTreePath *path;
970   gboolean result;
971
972   path = gtk_tree_model_get_path (model, iter);
973   result = gtk_tree_path_get_indices (path)[0] == 4;
974   gtk_tree_path_free (path);
975
976   return result;
977   
978 }
979
980 static void
981 displayed_row_changed (GtkComboBox *combo,
982                        GtkCellView *cell)
983 {
984   gint row;
985   GtkTreePath *path;
986
987   row = gtk_combo_box_get_active (combo);
988   path = gtk_tree_path_new_from_indices (row, -1);
989   gtk_cell_view_set_displayed_row (cell, path);
990   gtk_tree_path_free (path);
991 }
992
993 int
994 main (int argc, char **argv)
995 {
996         GtkWidget *window, *cellview, *mainbox;
997         GtkWidget *combobox, *comboboxtext, *comboboxgrid;
998         GtkWidget *tmp, *boom;
999         GtkCellRenderer *renderer;
1000         GdkPixbuf *pixbuf;
1001         GtkTreeModel *model;
1002         GtkTreePath *path;
1003         GtkTreeIter iter;
1004         GdkColor color;
1005         
1006         gtk_init (&argc, &argv);
1007
1008         if (g_getenv ("RTL"))
1009           gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
1010
1011         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1012         gtk_container_set_border_width (GTK_CONTAINER (window), 5);
1013         g_signal_connect (window, "destroy", gtk_main_quit, NULL);
1014
1015         mainbox = gtk_vbox_new (FALSE, 2);
1016         gtk_container_add (GTK_CONTAINER (window), mainbox);
1017
1018         /* GtkCellView */
1019         tmp = gtk_frame_new ("GtkCellView");
1020         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1021
1022         boom = gtk_vbox_new (FALSE, 0);
1023         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1024         gtk_container_add (GTK_CONTAINER (tmp), boom);
1025
1026         cellview = gtk_cell_view_new ();
1027         renderer = gtk_cell_renderer_pixbuf_new ();
1028         pixbuf = gtk_widget_render_icon (cellview, GTK_STOCK_DIALOG_WARNING,
1029                                          GTK_ICON_SIZE_BUTTON, NULL);
1030
1031         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1032                                     renderer,
1033                                     FALSE);
1034         g_object_set (renderer, "pixbuf", pixbuf, NULL);
1035
1036         renderer = gtk_cell_renderer_text_new ();
1037         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cellview),
1038                                     renderer,
1039                                     TRUE);
1040         g_object_set (renderer, "text", "la la la", NULL);
1041         gtk_container_add (GTK_CONTAINER (boom), cellview);
1042
1043         /* GtkComboBox list */
1044         tmp = gtk_frame_new ("GtkComboBox (list)");
1045         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1046
1047         boom = gtk_vbox_new (FALSE, 0);
1048         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1049         gtk_container_add (GTK_CONTAINER (tmp), boom);
1050
1051         model = create_list_blaat ();
1052         combobox = gtk_combo_box_new_with_model (model);
1053         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1054         g_object_unref (model);
1055         gtk_container_add (GTK_CONTAINER (boom), combobox);
1056
1057         renderer = gtk_cell_renderer_pixbuf_new ();
1058         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1059                                     renderer,
1060                                     FALSE);
1061         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1062                                         "pixbuf", 0,
1063                                         NULL);
1064         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1065                                             renderer,
1066                                             set_sensitive,
1067                                             NULL, NULL);
1068
1069         renderer = gtk_cell_renderer_text_new ();
1070         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1071                                     renderer,
1072                                     TRUE);
1073         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1074                                         "text", 1,
1075                                         NULL);
1076         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1077                                             renderer,
1078                                             set_sensitive,
1079                                             NULL, NULL);
1080         gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), 
1081                                               is_separator, NULL, NULL);
1082                                                 
1083         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1084
1085         /* GtkComboBox dynamic list */
1086         tmp = gtk_frame_new ("GtkComboBox (dynamic list)");
1087         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1088
1089         boom = gtk_vbox_new (FALSE, 0);
1090         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1091         gtk_container_add (GTK_CONTAINER (tmp), boom);
1092
1093         model = create_empty_list_blaat ();
1094         combobox = gtk_combo_box_new_with_model (model);
1095         g_signal_connect (combobox, "popup-show", 
1096                           G_CALLBACK (populate_list_blaat), combobox);
1097
1098         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1099         g_object_unref (model);
1100         gtk_container_add (GTK_CONTAINER (boom), combobox);
1101
1102         renderer = gtk_cell_renderer_pixbuf_new ();
1103         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1104                                     renderer,
1105                                     FALSE);
1106         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1107                                         "pixbuf", 0,
1108                                         NULL);
1109         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1110                                             renderer,
1111                                             set_sensitive,
1112                                             NULL, NULL);
1113
1114         renderer = gtk_cell_renderer_text_new ();
1115         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1116                                     renderer,
1117                                     TRUE);
1118         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1119                                         "text", 1,
1120                                         NULL);
1121         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1122                                             renderer,
1123                                             set_sensitive,
1124                                             NULL, NULL);
1125         gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), 
1126                                               is_separator, NULL, NULL);
1127                                                 
1128         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1129         gtk_combo_box_set_title (GTK_COMBO_BOX (combobox), "Dynamic list");
1130
1131         /* GtkComboBox custom entry */
1132         tmp = gtk_frame_new ("GtkComboBox (custom)");
1133         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1134
1135         boom = gtk_vbox_new (FALSE, 0);
1136         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1137         gtk_container_add (GTK_CONTAINER (tmp), boom);
1138
1139         model = create_list_blaat ();
1140         combobox = gtk_combo_box_new_with_model (model);
1141         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1142         g_object_unref (model);
1143         gtk_container_add (GTK_CONTAINER (boom), combobox);
1144
1145         renderer = gtk_cell_renderer_pixbuf_new ();
1146         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1147                                     renderer,
1148                                     FALSE);
1149         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1150                                         "pixbuf", 0,
1151                                         NULL);
1152         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1153                                             renderer,
1154                                             set_sensitive,
1155                                             NULL, NULL);
1156
1157         renderer = gtk_cell_renderer_text_new ();
1158         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1159                                     renderer,
1160                                     TRUE);
1161         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1162                                         "text", 1,
1163                                         NULL);
1164         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1165                                             renderer,
1166                                             set_sensitive,
1167                                             NULL, NULL);
1168         gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), 
1169                                               is_separator, NULL, NULL);
1170                                                 
1171         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1172
1173         tmp = gtk_cell_view_new ();
1174         gtk_widget_show (tmp);
1175         gtk_cell_view_set_model (GTK_CELL_VIEW (tmp), model);
1176
1177         renderer = gtk_cell_renderer_text_new ();
1178         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tmp), renderer, TRUE);
1179         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tmp), renderer,
1180                                         "text", 1,
1181                                         NULL);
1182         color.red = 0xffff;
1183         color.blue = 0xffff;
1184         color.green = 0;
1185         gtk_cell_view_set_background_color (GTK_CELL_VIEW (tmp), &color);
1186         displayed_row_changed (GTK_COMBO_BOX (combobox), GTK_CELL_VIEW (tmp));
1187         g_signal_connect (combobox, "changed", G_CALLBACK (displayed_row_changed), tmp); 
1188            
1189         gtk_container_add (GTK_CONTAINER (combobox), tmp);
1190
1191         /* GtkComboBox tree */
1192         tmp = gtk_frame_new ("GtkComboBox (tree)");
1193         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1194
1195         boom = gtk_vbox_new (FALSE, 0);
1196         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1197         gtk_container_add (GTK_CONTAINER (tmp), boom);
1198
1199         model = create_tree_blaat ();
1200         combobox = gtk_combo_box_new_with_model (model);
1201         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1202         g_object_unref (model);
1203         gtk_container_add (GTK_CONTAINER (boom), combobox);
1204
1205         renderer = gtk_cell_renderer_pixbuf_new ();
1206         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1207                                     renderer,
1208                                     FALSE);
1209         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1210                                         "pixbuf", 0,
1211                                         NULL);
1212         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1213                                             renderer,
1214                                             set_sensitive,
1215                                             NULL, NULL);
1216
1217         renderer = gtk_cell_renderer_text_new ();
1218         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1219                                     renderer,
1220                                     TRUE);
1221         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1222                                         "text", 1,
1223                                         NULL);
1224         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1225                                             renderer,
1226                                             set_sensitive,
1227                                             NULL, NULL);
1228         gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), 
1229                                               is_separator, NULL, NULL);
1230                                                 
1231         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1232 #if 0
1233         g_timeout_add (1000, (GSourceFunc) animation_timer, model);
1234 #endif
1235
1236         /* GtkComboBox (grid mode) */
1237         tmp = gtk_frame_new ("GtkComboBox (grid mode)");
1238         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1239
1240         boom = gtk_vbox_new (FALSE, 0);
1241         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1242         gtk_container_add (GTK_CONTAINER (tmp), boom);
1243
1244         comboboxgrid = create_combo_box_grid_demo ();
1245         gtk_box_pack_start (GTK_BOX (boom), comboboxgrid, FALSE, FALSE, 0);
1246
1247
1248         /* GtkComboBoxEntry */
1249         tmp = gtk_frame_new ("GtkComboBoxEntry");
1250         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1251
1252         boom = gtk_vbox_new (FALSE, 0);
1253         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1254         gtk_container_add (GTK_CONTAINER (tmp), boom);
1255
1256         comboboxtext = gtk_combo_box_entry_new_text ();
1257         setup_combo_entry (comboboxtext);
1258         gtk_container_add (GTK_CONTAINER (boom), comboboxtext);
1259
1260
1261         /* Phylogenetic tree */
1262         tmp = gtk_frame_new ("What are you ?");
1263         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1264
1265         boom = gtk_vbox_new (FALSE, 0);
1266         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1267         gtk_container_add (GTK_CONTAINER (tmp), boom);
1268
1269         model = create_phylogenetic_tree ();
1270         combobox = gtk_combo_box_new_with_model (model);
1271         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1272         g_object_unref (model);
1273         gtk_container_add (GTK_CONTAINER (boom), combobox);
1274
1275         renderer = gtk_cell_renderer_text_new ();
1276         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1277                                     renderer,
1278                                     TRUE);
1279         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1280                                         "text", 0,
1281                                         NULL);
1282         
1283         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
1284
1285
1286         /* Capitals */
1287         tmp = gtk_frame_new ("Where are you ?");
1288         gtk_box_pack_start (GTK_BOX (mainbox), tmp, FALSE, FALSE, 0);
1289
1290         boom = gtk_vbox_new (FALSE, 0);
1291         gtk_container_set_border_width (GTK_CONTAINER (boom), 5);
1292         gtk_container_add (GTK_CONTAINER (tmp), boom);
1293
1294         model = create_capital_tree ();
1295         combobox = gtk_combo_box_new_with_model (model);
1296         gtk_combo_box_set_add_tearoffs (GTK_COMBO_BOX (combobox), TRUE);
1297         g_object_unref (model);
1298         gtk_container_add (GTK_CONTAINER (boom), combobox);
1299         renderer = gtk_cell_renderer_text_new ();
1300         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox),
1301                                     renderer,
1302                                     TRUE);
1303         gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
1304                                         "text", 0,
1305                                         NULL);
1306         gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combobox),
1307                                             renderer,
1308                                             capital_sensitive,
1309                                             NULL, NULL);
1310         path = gtk_tree_path_new_from_indices (0, 8, -1);
1311         gtk_tree_model_get_iter (model, &iter, path);
1312         gtk_tree_path_free (path);
1313         gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
1314
1315 #if 1
1316         g_timeout_add (1000, (GSourceFunc) capital_animation, model);
1317 #endif
1318
1319         gtk_widget_show_all (window);
1320
1321         gtk_main ();
1322
1323         return 0;
1324 }
1325
1326 /* vim:expandtab
1327  */