]> Pileus Git - ~andy/gtk/blob - tests/testtreefocus.c
changed new_with_types to just plain new, fixing the number of columns,
[~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   GtkTreeSelection *selection;
313
314   gtk_init (&argc, &argv);
315
316   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
317   gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
318   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
319   vbox = gtk_vbox_new (FALSE, 8);
320   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
321   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan's Holiday Card Planning Sheet"), FALSE, FALSE, 0);
322   gtk_container_add (GTK_CONTAINER (window), vbox);
323
324   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
325   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
326   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
327   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
328
329   model = make_model ();
330   tree_view = gtk_tree_view_new_with_model (model);
331   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
332   gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
333                                GTK_TREE_SELECTION_MULTI);
334   renderer = gtk_cell_renderer_text_new ();
335   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
336                                                             -1, "Holiday",
337                                                             renderer,
338                                                             "text", HOLIDAY_COLUMN, NULL);
339   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
340   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
341   g_object_unref (renderer);
342
343   /* Alex Column */
344   renderer = gtk_cell_renderer_toggle_new ();
345   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (alex_toggled), model);
346
347   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
348   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
349                                                             -1, "Alex",
350                                                             renderer,
351                                                             "active", ALEX_COLUMN,
352                                                             "visible", VISIBLE_COLUMN,
353                                                             "can_activate", WORLD_COLUMN,
354                                                             NULL);
355   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
356   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
357   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
358   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
359   g_object_unref (renderer);
360
361   /* Havoc Column */
362   renderer = gtk_cell_renderer_toggle_new ();
363   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (havoc_toggled), model);
364
365   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
366   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
367                                                             -1, "Havoc",
368                                                             renderer,
369                                                             "active", HAVOC_COLUMN,
370                                                             "visible", VISIBLE_COLUMN,
371                                                             NULL);
372   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
373   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
374   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
375   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
376   g_object_unref (renderer);
377
378   /* Tim Column */
379   renderer = gtk_cell_renderer_toggle_new ();
380   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (tim_toggled), model);
381
382   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
383   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
384                                                -1, "Tim",
385                                                renderer,
386                                                "active", TIM_COLUMN,
387                                                "visible", VISIBLE_COLUMN,
388                                                "can_activate", WORLD_COLUMN,
389                                                NULL);
390   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
391   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
392   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
393   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
394   g_object_unref (renderer);
395
396   /* Owen Column */
397   renderer = gtk_cell_renderer_toggle_new ();
398   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (owen_toggled), model);
399   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
400   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
401                                                -1, "Owen",
402                                                renderer,
403                                                "active", OWEN_COLUMN,
404                                                "visible", VISIBLE_COLUMN,
405                                                NULL);
406   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
407   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
408   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
409   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
410   g_object_unref (renderer);
411
412   /* Owen Column */
413   renderer = gtk_cell_renderer_toggle_new ();
414   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (dave_toggled), model);
415   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
416   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
417                                                -1, "Dave",
418                                                renderer,
419                                                "active", DAVE_COLUMN,
420                                                "visible", VISIBLE_COLUMN,
421                                                NULL);
422   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
423   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
424   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
425   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
426   g_object_unref (renderer);
427
428   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
429
430   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
431                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
432                       NULL);
433   gtk_window_set_default_size (GTK_WINDOW (window),
434                                650, 400);
435   gtk_widget_show_all (window);
436
437   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
438   gtk_window_set_title (GTK_WINDOW (window), "Model");
439   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
440   vbox = gtk_vbox_new (FALSE, 8);
441   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
442   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
443   gtk_container_add (GTK_CONTAINER (window), vbox);
444
445   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
446   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
447   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
448   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
449
450
451   tree_view = gtk_tree_view_new_with_model (model);
452   g_object_unref (G_OBJECT (model));
453   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
454
455   renderer = gtk_cell_renderer_text_new ();
456   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
457                                                -1, "Holiday Column",
458                                                renderer,
459                                                "text", 0, NULL);
460   g_object_unref (renderer);
461
462   renderer = gtk_cell_renderer_text_new ();
463   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
464                                                -1, "Alex Column",
465                                                renderer,
466                                                "text", 1, NULL);
467   g_object_unref (renderer);
468
469   renderer = gtk_cell_renderer_text_new ();
470   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
471                                                -1, "Havoc Column",
472                                                renderer,
473                                                "text", 2, NULL);
474   g_object_unref (renderer);
475
476   renderer = gtk_cell_renderer_text_new ();
477   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
478                                                -1, "Tim Column",
479                                                renderer,
480                                                "text", 3, NULL);
481   g_object_unref (renderer);
482
483   renderer = gtk_cell_renderer_text_new ();
484   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
485                                                -1, "Owen Column",
486                                                renderer,
487                                                "text", 4, NULL);
488   g_object_unref (renderer);
489
490   renderer = gtk_cell_renderer_text_new ();
491   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
492                                                -1, "Dave Column",
493                                                renderer,
494                                                "text", 5, NULL);
495   g_object_unref (renderer);
496
497   renderer = gtk_cell_renderer_text_new ();
498   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
499                                                -1, "Visible Column",
500                                                renderer,
501                                                "text", 6, NULL);
502   g_object_unref (renderer);
503
504   renderer = gtk_cell_renderer_text_new ();
505   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
506                                                -1, "World Holiday",
507                                                renderer,
508                                                "text", 7, NULL);
509   g_object_unref (renderer);
510
511   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
512                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
513                       NULL);
514                            
515   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
516
517
518   gtk_window_set_default_size (GTK_WINDOW (window),
519                                650, 400);
520
521   gtk_widget_show_all (window);
522   gtk_main ();
523
524   return 0;
525 }
526