]> Pileus Git - ~andy/gtk/blob - tests/testtreefocus.c
Ignore the sgml directory made by gtkdoc. Use gtk_window_set_resizable
[~andy/gtk] / tests / testtreefocus.c
1 #include <gtk/gtk.h>
2
3 typedef struct _TreeStruct TreeStruct;
4 struct _TreeStruct
5 {
6   const gchar *label;
7   gboolean alex;
8   gboolean havoc;
9   gboolean tim;
10   gboolean owen;
11   gboolean dave;
12   gboolean world_holiday; /* shared by the european hackers */
13   TreeStruct *children;
14 };
15
16
17 static TreeStruct january[] =
18 {
19   {"New Years Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
20   {"Presidential Inauguration", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
21   {"Martin Luther King Jr. day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
22   { NULL }
23 };
24
25 static TreeStruct february[] =
26 {
27   { "Presidents' Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
28   { "Groundhog Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
29   { "Valentine's Day", FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, NULL },
30   { NULL }
31 };
32
33 static TreeStruct march[] =
34 {
35   { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
36   { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
37   { NULL }
38 };
39
40 static TreeStruct april[] =
41 {
42   { "April Fools' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
43   { "Army Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
44   { "Earth Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
45   { "Administrative Professionals' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
46   { NULL }
47 };
48
49 static TreeStruct may[] =
50 {
51   { "Nurses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
52   { "National Day of Prayer", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
53   { "Mothers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
54   { "Armed Forces Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
55   { "Memorial Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
56   { NULL }
57 };
58
59 static TreeStruct june[] =
60 {
61   { "June Fathers' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
62   { "Juneteenth (Liberation of Slaves)", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
63   { "Flag Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
64   { NULL }
65 };
66
67 static TreeStruct july[] =
68 {
69   { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
70   { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
71   { NULL }
72 };
73
74 static TreeStruct august[] =
75 {
76   { "Air Force Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
77   { "Coast Guard Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
78   { "Friendship Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
79   { NULL }
80 };
81
82 static TreeStruct september[] =
83 {
84   { "Grandparents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
85   { "Citizenship Day or Constitution Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
86   { "Labor Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
87   { NULL }
88 };
89
90 static TreeStruct october[] =
91 {
92   { "National Children's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
93   { "Bosses' Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
94   { "Sweetest Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
95   { "Mother-in-Law's Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
96   { "Navy Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
97   { "Columbus Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
98   { "Halloween", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
99   { NULL }
100 };
101
102 static TreeStruct november[] =
103 {
104   { "Marine Corps Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
105   { "Veterans' Day", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
106   { "Thanksgiving", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
107   { NULL }
108 };
109
110 static TreeStruct december[] =
111 {
112   { "Pearl Harbor Remembrance Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
113   { "Christmas", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL },
114   { "Kwanzaa", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
115   { NULL }
116 };
117
118
119 static TreeStruct toplevel[] =
120 {
121   {"January", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, january},
122   {"February", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, february},
123   {"March", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, march},
124   {"April", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, april},
125   {"May", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, may},
126   {"June", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, june},
127   {"July", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, july},
128   {"August", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, august},
129   {"September", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, september},
130   {"October", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, october},
131   {"November", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, november},
132   {"December", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, december},
133   {NULL}
134 };
135
136
137 enum
138 {
139   HOLIDAY_COLUMN = 0,
140   ALEX_COLUMN,
141   HAVOC_COLUMN,
142   TIM_COLUMN,
143   OWEN_COLUMN,
144   DAVE_COLUMN,
145   VISIBLE_COLUMN,
146   WORLD_COLUMN,
147   NUM_COLUMNS
148 };
149
150 static GtkTreeModel *
151 make_model (void)
152 {
153   GtkTreeStore *model;
154   TreeStruct *month = toplevel;
155   GtkTreeIter iter;
156
157   model = gtk_tree_store_new (NUM_COLUMNS,
158                               G_TYPE_STRING,
159                               G_TYPE_BOOLEAN,
160                               G_TYPE_BOOLEAN,
161                               G_TYPE_BOOLEAN,
162                               G_TYPE_BOOLEAN,
163                               G_TYPE_BOOLEAN,
164                               G_TYPE_BOOLEAN,
165                               G_TYPE_BOOLEAN);
166
167   while (month->label)
168     {
169       TreeStruct *holiday = month->children;
170
171       gtk_tree_store_append (model, &iter, NULL);
172       gtk_tree_store_set (model, &iter,
173                           HOLIDAY_COLUMN, month->label,
174                           ALEX_COLUMN, FALSE,
175                           HAVOC_COLUMN, FALSE,
176                           TIM_COLUMN, FALSE,
177                           OWEN_COLUMN, FALSE,
178                           DAVE_COLUMN, FALSE,
179                           VISIBLE_COLUMN, FALSE,
180                           WORLD_COLUMN, FALSE,
181                           -1);
182       while (holiday->label)
183         {
184           GtkTreeIter child_iter;
185
186           gtk_tree_store_append (model, &child_iter, &iter);
187           gtk_tree_store_set (model, &child_iter,
188                               HOLIDAY_COLUMN, holiday->label,
189                               ALEX_COLUMN, holiday->alex,
190                               HAVOC_COLUMN, holiday->havoc,
191                               TIM_COLUMN, holiday->tim,
192                               OWEN_COLUMN, holiday->owen,
193                               DAVE_COLUMN, holiday->dave,
194                               VISIBLE_COLUMN, TRUE,
195                               WORLD_COLUMN, holiday->world_holiday,
196                               -1);
197
198           holiday ++;
199         }
200       month ++;
201     }
202
203   return GTK_TREE_MODEL (model);
204 }
205
206 static void
207 alex_toggled (GtkCellRendererToggle *cell,
208               gchar                 *path_str,
209               gpointer               data)
210 {
211   GtkTreeModel *model = (GtkTreeModel *) data;
212   GtkTreeIter iter;
213   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
214   gboolean alex;
215
216   gtk_tree_model_get_iter (model, &iter, path);
217   gtk_tree_model_get (model, &iter, ALEX_COLUMN, &alex, -1);
218
219   alex = !alex;
220   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, ALEX_COLUMN, alex, -1);
221
222   gtk_tree_path_free (path);
223 }
224
225 static void
226 havoc_toggled (GtkCellRendererToggle *cell,
227                gchar                 *path_str,
228                gpointer               data)
229 {
230   GtkTreeModel *model = (GtkTreeModel *) data;
231   GtkTreeIter iter;
232   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
233   gboolean havoc;
234
235   gtk_tree_model_get_iter (model, &iter, path);
236   gtk_tree_model_get (model, &iter, HAVOC_COLUMN, &havoc, -1);
237
238   havoc = !havoc;
239   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, HAVOC_COLUMN, havoc, -1);
240
241   gtk_tree_path_free (path);
242 }
243
244 static void
245 owen_toggled (GtkCellRendererToggle *cell,
246               gchar                 *path_str,
247               gpointer               data)
248 {
249   GtkTreeModel *model = (GtkTreeModel *) data;
250   GtkTreeIter iter;
251   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
252   gboolean owen;
253
254   gtk_tree_model_get_iter (model, &iter, path);
255   gtk_tree_model_get (model, &iter, OWEN_COLUMN, &owen, -1);
256
257   owen = !owen;
258   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, OWEN_COLUMN, owen, -1);
259
260   gtk_tree_path_free (path);
261 }
262
263 static void
264 tim_toggled (GtkCellRendererToggle *cell,
265              gchar                 *path_str,
266              gpointer               data)
267 {
268   GtkTreeModel *model = (GtkTreeModel *) data;
269   GtkTreeIter iter;
270   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
271   gboolean tim;
272
273   gtk_tree_model_get_iter (model, &iter, path);
274   gtk_tree_model_get (model, &iter, TIM_COLUMN, &tim, -1);
275
276   tim = !tim;
277   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, TIM_COLUMN, tim, -1);
278
279   gtk_tree_path_free (path);
280 }
281
282 static void
283 dave_toggled (GtkCellRendererToggle *cell,
284               gchar                 *path_str,
285               gpointer               data)
286 {
287   GtkTreeModel *model = (GtkTreeModel *) data;
288   GtkTreeIter iter;
289   GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
290   gboolean dave;
291
292   gtk_tree_model_get_iter (model, &iter, path);
293   gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
294
295   dave = !dave;
296   gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
297
298   gtk_tree_path_free (path);
299 }
300
301 int
302 main (int argc, char *argv[])
303 {
304   GtkWidget *window;
305   GtkWidget *vbox;
306   GtkWidget *scrolled_window;
307   GtkWidget *tree_view;
308   GtkTreeModel *model;
309   GtkCellRenderer *renderer;
310   gint col_offset;
311   GtkTreeViewColumn *column;
312
313   gtk_init (&argc, &argv);
314
315   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
316   gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
317   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
318   vbox = gtk_vbox_new (FALSE, 8);
319   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
320   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan's Holiday Card Planning Sheet"), FALSE, FALSE, 0);
321   gtk_container_add (GTK_CONTAINER (window), vbox);
322
323   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
324   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
325   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
326   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
327
328   model = make_model ();
329   tree_view = gtk_tree_view_new_with_model (model);
330   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
331   gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
332                                GTK_TREE_SELECTION_MULTI);
333   renderer = gtk_cell_renderer_text_new ();
334   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
335                                                             -1, "Holiday",
336                                                             renderer,
337                                                             "text", HOLIDAY_COLUMN, NULL);
338   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
339   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
340   g_object_unref (renderer);
341
342   /* Alex Column */
343   renderer = gtk_cell_renderer_toggle_new ();
344   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (alex_toggled), model);
345
346   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
347   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
348                                                             -1, "Alex",
349                                                             renderer,
350                                                             "active", ALEX_COLUMN,
351                                                             "visible", VISIBLE_COLUMN,
352                                                             "can_activate", WORLD_COLUMN,
353                                                             NULL);
354   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
355   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
356   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
357   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
358   g_object_unref (renderer);
359
360   /* Havoc Column */
361   renderer = gtk_cell_renderer_toggle_new ();
362   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (havoc_toggled), model);
363
364   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
365   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
366                                                             -1, "Havoc",
367                                                             renderer,
368                                                             "active", HAVOC_COLUMN,
369                                                             "visible", VISIBLE_COLUMN,
370                                                             NULL);
371   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
372   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
373   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
374   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
375   g_object_unref (renderer);
376
377   /* Tim Column */
378   renderer = gtk_cell_renderer_toggle_new ();
379   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (tim_toggled), model);
380
381   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
382   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
383                                                -1, "Tim",
384                                                renderer,
385                                                "active", TIM_COLUMN,
386                                                "visible", VISIBLE_COLUMN,
387                                                "can_activate", WORLD_COLUMN,
388                                                NULL);
389   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
390   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
391   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
392   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
393   g_object_unref (renderer);
394
395   /* Owen Column */
396   renderer = gtk_cell_renderer_toggle_new ();
397   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (owen_toggled), model);
398   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
399   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
400                                                -1, "Owen",
401                                                renderer,
402                                                "active", OWEN_COLUMN,
403                                                "visible", VISIBLE_COLUMN,
404                                                NULL);
405   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
406   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
407   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
408   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
409   g_object_unref (renderer);
410
411   /* Owen Column */
412   renderer = gtk_cell_renderer_toggle_new ();
413   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (dave_toggled), model);
414   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
415   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
416                                                -1, "Dave",
417                                                renderer,
418                                                "active", DAVE_COLUMN,
419                                                "visible", VISIBLE_COLUMN,
420                                                NULL);
421   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
422   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
423   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
424   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
425   g_object_unref (renderer);
426
427   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
428
429   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
430                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
431                       NULL);
432   gtk_window_set_default_size (GTK_WINDOW (window),
433                                650, 400);
434   gtk_widget_show_all (window);
435
436   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
437   gtk_window_set_title (GTK_WINDOW (window), "Model");
438   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
439   vbox = gtk_vbox_new (FALSE, 8);
440   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
441   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
442   gtk_container_add (GTK_CONTAINER (window), vbox);
443
444   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
445   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
446   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
447   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
448
449
450   tree_view = gtk_tree_view_new_with_model (model);
451   g_object_unref (G_OBJECT (model));
452   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
453
454   renderer = gtk_cell_renderer_text_new ();
455   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
456                                                -1, "Holiday Column",
457                                                renderer,
458                                                "text", 0, NULL);
459   g_object_unref (renderer);
460
461   renderer = gtk_cell_renderer_text_new ();
462   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
463                                                -1, "Alex Column",
464                                                renderer,
465                                                "text", 1, NULL);
466   g_object_unref (renderer);
467
468   renderer = gtk_cell_renderer_text_new ();
469   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
470                                                -1, "Havoc Column",
471                                                renderer,
472                                                "text", 2, NULL);
473   g_object_unref (renderer);
474
475   renderer = gtk_cell_renderer_text_new ();
476   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
477                                                -1, "Tim Column",
478                                                renderer,
479                                                "text", 3, NULL);
480   g_object_unref (renderer);
481
482   renderer = gtk_cell_renderer_text_new ();
483   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
484                                                -1, "Owen Column",
485                                                renderer,
486                                                "text", 4, NULL);
487   g_object_unref (renderer);
488
489   renderer = gtk_cell_renderer_text_new ();
490   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
491                                                -1, "Dave Column",
492                                                renderer,
493                                                "text", 5, NULL);
494   g_object_unref (renderer);
495
496   renderer = gtk_cell_renderer_text_new ();
497   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
498                                                -1, "Visible Column",
499                                                renderer,
500                                                "text", 6, NULL);
501   g_object_unref (renderer);
502
503   renderer = gtk_cell_renderer_text_new ();
504   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
505                                                -1, "World Holiday",
506                                                renderer,
507                                                "text", 7, NULL);
508   g_object_unref (renderer);
509
510   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
511                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
512                       NULL);
513                            
514   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
515
516
517   gtk_window_set_default_size (GTK_WINDOW (window),
518                                650, 400);
519
520   gtk_widget_show_all (window);
521   gtk_main ();
522
523   return 0;
524 }
525