~canonical-dx-team/ubuntu/maverick/gtk+2.0/menuproxy

« back to all changes in this revision

Viewing changes to tests/testtreefocus.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2007-05-04 12:24:25 UTC
  • mfrom: (1.1.21 upstream)
  • Revision ID: james.westby@ubuntu.com-20070504122425-0m8midgzrp40y8w2
Tags: 2.10.12-1ubuntu1
* Sync with Debian
* New upstream version:
  Fixed bugs:
  - 379414 file chooser warnings when changing path in the entry
  - 418585 GtkFileChooserDefault sizing code is not DPI independent
  - 419568 Crash in search if start with special letter
  - 435062 build dies with icon cache validation
  - 379399 Segfault to call gtk_print_operation_run twice.
  - 387889 cups backend has problems when there are too many printers
  - 418531 invalid read to gtkicontheme.c gtk_icon_theme_lookup_icon...
  - 423916 crash in color scheme code
  - 424042 Segmentation fault while quickly pressing Alt+arrows
  - 415260 Protect against negative indices when setting values in G...
  - 419171 XGetVisualInfo() may not set nxvisuals
  - 128852 Gdk cursors don't look good on win32
  - 344657 Ctrl-H doesn't toggle "Show Hidden Files" setting
  - 345345 PrintOperation::paginate is not emitted for class handler
  - 347567 GtkPrintOperation::end-print is not emitted if it's cance...
  - 369112 gtk_ui_manager_add_ui should accept unnamed separator
  - 392015 Selected menu item invisible on Windows Vista
  - 399253 MS-Windows Theme Bottom Tab placement rendering glitches
  - 399425 gtk_input_dialog_fill_axes() adds child to gtkscrolledwin...
  - 403251 [patch] little memory leak in GtkPrintJob
  - 403267 [patch] memory leak in GtkPageSetupUnixDialog
  - 403470 MS-Windows Theme tab placement other than on top leaks a ...
  - 404506 Windows system fonts that have multi-byte font names cann...
  - 405089 Incorrect window placement for GtkEventBox private window
  - 405515 Minor leak in gtkfilesystemmodel.c
  - 405539 gdk_pixbuf_save() for PNG saver can return FALSE without ...
  - 415681 gdk_window_clear_area includes an extra line and column o...
  - 418219 GtkRecentChooser should apply filter before sorting and c...
  - 418403 Scroll to printer after selecting it from settings
  - 421985 _gtk_print_operation_platform_backend_launch_preview
  - 421990 gtk_print_job_get_surface
  - 421993 gtk_print_operation_init
  - 423064 Conditional jump or move depends on uninitialised value(s...
  - 423722 Fix printing header in gtk-demo
  - 424168 gtk_print_operation_run on async preview
  - 425655 Don't install gtk+-unix-print-2.0.pc on non-UNIX platforms
  - 425786 GDK segfaults if XineramaQueryScreens fails
  - 428665 Lpr Backend gets stuck in infinite loop during gtk_enumer...
  - 429902 GtkPrintOperation leaks cairo contextes
  - 431997 First delay of GdkPixbufAnimationIter is wrong
  - 433242 Inconsistent scroll arrow position calculations
  - 433972 Placing gtk.Expander inside a gtk.TextView() changes gtk....
  - 434261 _gtk_toolbar_elide_underscores incorrectly handles some s...
  - 383354 ctrl-L should make 'Location' entry disappear
  - 418673 gtk_recent_manager_add_item
  - 429732 gtk_accel_group_finalize accesses invalid memory
  - 435028 WM_CLIENT_LEADER is wrong on the leader_window
  - 431067 Background of the header window is not updated
  - 338843 add recent files support inside the ui manager
  - 148535 add drop shadow to menus, tooltips, etc. under Windows XP
* debian/control.in:
  - Conflicts on ubuntulooks (<= 0.9.11-1)
* debian/patches/15_default-fallback-icon-theme.patch:
  - patch from Debian, fallback on gnome icon theme

Show diffs side-by-side

added added

removed removed

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