]> Pileus Git - ~andy/gtk/blob - tests/testtreefocus.c
Fix to use GtkSelectionMode. ditto ditto ditto.
[~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_SELECTION_MULTIPLE);
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
341   /* Alex Column */
342   renderer = gtk_cell_renderer_toggle_new ();
343   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (alex_toggled), model);
344
345   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
346   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
347                                                             -1, "Alex",
348                                                             renderer,
349                                                             "active", ALEX_COLUMN,
350                                                             "visible", VISIBLE_COLUMN,
351                                                             "can_activate", WORLD_COLUMN,
352                                                             NULL);
353   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
354   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
355   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
356   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
357
358   /* Havoc Column */
359   renderer = gtk_cell_renderer_toggle_new ();
360   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (havoc_toggled), model);
361
362   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
363   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
364                                                             -1, "Havoc",
365                                                             renderer,
366                                                             "active", HAVOC_COLUMN,
367                                                             "visible", VISIBLE_COLUMN,
368                                                             NULL);
369   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
370   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
371   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
372   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
373
374   /* Tim Column */
375   renderer = gtk_cell_renderer_toggle_new ();
376   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (tim_toggled), model);
377
378   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
379   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
380                                                -1, "Tim",
381                                                renderer,
382                                                "active", TIM_COLUMN,
383                                                "visible", VISIBLE_COLUMN,
384                                                "can_activate", WORLD_COLUMN,
385                                                NULL);
386   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
387   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
388   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
389   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
390
391   /* Owen Column */
392   renderer = gtk_cell_renderer_toggle_new ();
393   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (owen_toggled), model);
394   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
395   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
396                                                -1, "Owen",
397                                                renderer,
398                                                "active", OWEN_COLUMN,
399                                                "visible", VISIBLE_COLUMN,
400                                                NULL);
401   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
402   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
403   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
404   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
405
406   /* Owen Column */
407   renderer = gtk_cell_renderer_toggle_new ();
408   g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (dave_toggled), model);
409   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
410   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
411                                                -1, "Dave",
412                                                renderer,
413                                                "active", DAVE_COLUMN,
414                                                "visible", VISIBLE_COLUMN,
415                                                NULL);
416   column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
417   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
418   gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
419   gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
420
421   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
422
423   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
424                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
425                       NULL);
426   gtk_window_set_default_size (GTK_WINDOW (window),
427                                650, 400);
428   gtk_widget_show_all (window);
429
430   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
431   gtk_window_set_title (GTK_WINDOW (window), "Model");
432   gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
433   vbox = gtk_vbox_new (FALSE, 8);
434   gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
435   gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
436   gtk_container_add (GTK_CONTAINER (window), vbox);
437
438   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
439   gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
440   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
441   gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
442
443
444   tree_view = gtk_tree_view_new_with_model (model);
445   g_object_unref (G_OBJECT (model));
446   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
447
448   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
449                                                -1, "Holiday Column",
450                                                gtk_cell_renderer_text_new (),
451                                                "text", 0, NULL);
452
453   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
454                                                -1, "Alex Column",
455                                                gtk_cell_renderer_text_new (),
456                                                "text", 1, NULL);
457
458   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
459                                                -1, "Havoc Column",
460                                                gtk_cell_renderer_text_new (),
461                                                "text", 2, NULL);
462
463   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
464                                                -1, "Tim Column",
465                                                gtk_cell_renderer_text_new (),
466                                                "text", 3, NULL);
467
468   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
469                                                -1, "Owen Column",
470                                                gtk_cell_renderer_text_new (),
471                                                "text", 4, NULL);
472
473   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
474                                                -1, "Dave Column",
475                                                gtk_cell_renderer_text_new (),
476                                                "text", 5, NULL);
477
478   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
479                                                -1, "Visible Column",
480                                                gtk_cell_renderer_text_new (),
481                                                "text", 6, NULL);
482
483   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
484                                                -1, "World Holiday",
485                                                gtk_cell_renderer_text_new (),
486                                                "text", 7, NULL);
487
488   gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
489                       GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
490                       NULL);
491                            
492   gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
493
494
495   gtk_window_set_default_size (GTK_WINDOW (window),
496                                650, 400);
497
498   gtk_widget_show_all (window);
499   gtk_main ();
500
501   return 0;
502 }
503