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