3 typedef struct _TreeStruct TreeStruct;
12 gboolean world_holiday; /* shared by the european hackers */
17 static TreeStruct january[] =
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 },
25 static TreeStruct february[] =
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 },
33 static TreeStruct march[] =
35 { "National Tree Planting Day", FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL },
36 { "St Patrick's Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
40 static TreeStruct april[] =
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 },
49 static TreeStruct may[] =
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 },
59 static TreeStruct june[] =
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 },
67 static TreeStruct july[] =
69 { "Parents' Day", FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, NULL },
70 { "Independence Day", FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, NULL },
74 static TreeStruct august[] =
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 },
82 static TreeStruct september[] =
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 },
90 static TreeStruct october[] =
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 },
102 static TreeStruct november[] =
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 },
110 static TreeStruct december[] =
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 },
119 static TreeStruct toplevel[] =
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},
150 static GtkTreeModel *
154 TreeStruct *month = toplevel;
157 model = gtk_tree_store_new (NUM_COLUMNS,
169 TreeStruct *holiday = month->children;
171 gtk_tree_store_append (model, &iter, NULL);
172 gtk_tree_store_set (model, &iter,
173 HOLIDAY_COLUMN, month->label,
179 VISIBLE_COLUMN, FALSE,
182 while (holiday->label)
184 GtkTreeIter child_iter;
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,
203 return GTK_TREE_MODEL (model);
207 alex_toggled (GtkCellRendererToggle *cell,
211 GtkTreeModel *model = (GtkTreeModel *) data;
213 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
216 gtk_tree_model_get_iter (model, &iter, path);
217 gtk_tree_model_get (model, &iter, ALEX_COLUMN, &alex, -1);
220 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, ALEX_COLUMN, alex, -1);
222 gtk_tree_path_free (path);
226 havoc_toggled (GtkCellRendererToggle *cell,
230 GtkTreeModel *model = (GtkTreeModel *) data;
232 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
235 gtk_tree_model_get_iter (model, &iter, path);
236 gtk_tree_model_get (model, &iter, HAVOC_COLUMN, &havoc, -1);
239 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, HAVOC_COLUMN, havoc, -1);
241 gtk_tree_path_free (path);
245 owen_toggled (GtkCellRendererToggle *cell,
249 GtkTreeModel *model = (GtkTreeModel *) data;
251 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
254 gtk_tree_model_get_iter (model, &iter, path);
255 gtk_tree_model_get (model, &iter, OWEN_COLUMN, &owen, -1);
258 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, OWEN_COLUMN, owen, -1);
260 gtk_tree_path_free (path);
264 tim_toggled (GtkCellRendererToggle *cell,
268 GtkTreeModel *model = (GtkTreeModel *) data;
270 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
273 gtk_tree_model_get_iter (model, &iter, path);
274 gtk_tree_model_get (model, &iter, TIM_COLUMN, &tim, -1);
277 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, TIM_COLUMN, tim, -1);
279 gtk_tree_path_free (path);
283 dave_toggled (GtkCellRendererToggle *cell,
287 GtkTreeModel *model = (GtkTreeModel *) data;
289 GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
292 gtk_tree_model_get_iter (model, &iter, path);
293 gtk_tree_model_get (model, &iter, DAVE_COLUMN, &dave, -1);
296 gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DAVE_COLUMN, dave, -1);
298 gtk_tree_path_free (path);
302 main (int argc, char *argv[])
306 GtkWidget *scrolled_window;
307 GtkWidget *tree_view;
309 GtkCellRenderer *renderer;
311 GtkTreeViewColumn *column;
312 GtkTreeSelection *selection;
314 gtk_init (&argc, &argv);
316 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
317 gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
318 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
319 vbox = gtk_vbox_new (FALSE, 8);
320 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
321 gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Jonathan's Holiday Card Planning Sheet"), FALSE, FALSE, 0);
322 gtk_container_add (GTK_CONTAINER (window), vbox);
324 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
325 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
326 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
327 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
329 model = make_model ();
330 tree_view = gtk_tree_view_new_with_model (model);
331 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
332 gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)),
333 GTK_TREE_SELECTION_MULTI);
334 renderer = gtk_cell_renderer_text_new ();
335 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
338 "text", HOLIDAY_COLUMN, NULL);
339 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
340 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
341 g_object_unref (renderer);
344 renderer = gtk_cell_renderer_toggle_new ();
345 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (alex_toggled), model);
347 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
348 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
351 "active", ALEX_COLUMN,
352 "visible", VISIBLE_COLUMN,
353 "can_activate", WORLD_COLUMN,
355 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
356 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
357 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
358 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
359 g_object_unref (renderer);
362 renderer = gtk_cell_renderer_toggle_new ();
363 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (havoc_toggled), model);
365 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
366 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
369 "active", HAVOC_COLUMN,
370 "visible", VISIBLE_COLUMN,
372 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
373 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
374 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
375 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
376 g_object_unref (renderer);
379 renderer = gtk_cell_renderer_toggle_new ();
380 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (tim_toggled), model);
382 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
383 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
386 "active", TIM_COLUMN,
387 "visible", VISIBLE_COLUMN,
388 "can_activate", WORLD_COLUMN,
390 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
391 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
392 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
393 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
394 g_object_unref (renderer);
397 renderer = gtk_cell_renderer_toggle_new ();
398 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (owen_toggled), model);
399 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
400 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
403 "active", OWEN_COLUMN,
404 "visible", VISIBLE_COLUMN,
406 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
407 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
408 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
409 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
410 g_object_unref (renderer);
413 renderer = gtk_cell_renderer_toggle_new ();
414 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (dave_toggled), model);
415 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
416 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
419 "active", DAVE_COLUMN,
420 "visible", VISIBLE_COLUMN,
422 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
423 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
424 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
425 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
426 g_object_unref (renderer);
428 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
430 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
431 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
433 gtk_window_set_default_size (GTK_WINDOW (window),
435 gtk_widget_show_all (window);
437 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
438 gtk_window_set_title (GTK_WINDOW (window), "Model");
439 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
440 vbox = gtk_vbox_new (FALSE, 8);
441 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
442 gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
443 gtk_container_add (GTK_CONTAINER (window), vbox);
445 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
446 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
447 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
448 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
451 tree_view = gtk_tree_view_new_with_model (model);
452 g_object_unref (G_OBJECT (model));
453 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
455 renderer = gtk_cell_renderer_text_new ();
456 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
457 -1, "Holiday Column",
460 g_object_unref (renderer);
462 renderer = gtk_cell_renderer_text_new ();
463 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
467 g_object_unref (renderer);
469 renderer = gtk_cell_renderer_text_new ();
470 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
474 g_object_unref (renderer);
476 renderer = gtk_cell_renderer_text_new ();
477 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
481 g_object_unref (renderer);
483 renderer = gtk_cell_renderer_text_new ();
484 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
488 g_object_unref (renderer);
490 renderer = gtk_cell_renderer_text_new ();
491 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
495 g_object_unref (renderer);
497 renderer = gtk_cell_renderer_text_new ();
498 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
499 -1, "Visible Column",
502 g_object_unref (renderer);
504 renderer = gtk_cell_renderer_text_new ();
505 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
509 g_object_unref (renderer);
511 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
512 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
515 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
518 gtk_window_set_default_size (GTK_WINDOW (window),
521 gtk_widget_show_all (window);