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