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