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