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;
313 gtk_init (&argc, &argv);
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);
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);
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_TREE_SELECTION_MULTI);
333 renderer = gtk_cell_renderer_text_new ();
334 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
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 g_object_unref (renderer);
343 renderer = gtk_cell_renderer_toggle_new ();
344 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (alex_toggled), model);
346 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
347 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
350 "active", ALEX_COLUMN,
351 "visible", VISIBLE_COLUMN,
352 "can_activate", WORLD_COLUMN,
354 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
355 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
356 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
357 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
358 g_object_unref (renderer);
361 renderer = gtk_cell_renderer_toggle_new ();
362 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (havoc_toggled), model);
364 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
365 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
368 "active", HAVOC_COLUMN,
369 "visible", VISIBLE_COLUMN,
371 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
372 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
373 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
374 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
375 g_object_unref (renderer);
378 renderer = gtk_cell_renderer_toggle_new ();
379 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (tim_toggled), model);
381 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
382 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
385 "active", TIM_COLUMN,
386 "visible", VISIBLE_COLUMN,
387 "can_activate", WORLD_COLUMN,
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_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
392 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
393 g_object_unref (renderer);
396 renderer = gtk_cell_renderer_toggle_new ();
397 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (owen_toggled), model);
398 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
399 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
402 "active", OWEN_COLUMN,
403 "visible", VISIBLE_COLUMN,
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_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
408 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
409 g_object_unref (renderer);
412 renderer = gtk_cell_renderer_toggle_new ();
413 g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (dave_toggled), model);
414 g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
415 col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
418 "active", DAVE_COLUMN,
419 "visible", VISIBLE_COLUMN,
421 column = gtk_tree_view_get_column (GTK_TREE_VIEW (tree_view), col_offset - 1);
422 gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED);
423 gtk_tree_view_column_set_width (GTK_TREE_VIEW_COLUMN (column), 50);
424 gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
425 g_object_unref (renderer);
427 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
429 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
430 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
432 gtk_window_set_default_size (GTK_WINDOW (window),
434 gtk_widget_show_all (window);
436 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
437 gtk_window_set_title (GTK_WINDOW (window), "Model");
438 gtk_signal_connect (GTK_OBJECT (window), "destroy", gtk_main_quit, NULL);
439 vbox = gtk_vbox_new (FALSE, 8);
440 gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
441 gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("The model revealed"), FALSE, FALSE, 0);
442 gtk_container_add (GTK_CONTAINER (window), vbox);
444 scrolled_window = gtk_scrolled_window_new (NULL, NULL);
445 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_ETCHED_IN);
446 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
447 gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
450 tree_view = gtk_tree_view_new_with_model (model);
451 g_object_unref (G_OBJECT (model));
452 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
454 renderer = gtk_cell_renderer_text_new ();
455 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
456 -1, "Holiday Column",
459 g_object_unref (renderer);
461 renderer = gtk_cell_renderer_text_new ();
462 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
466 g_object_unref (renderer);
468 renderer = gtk_cell_renderer_text_new ();
469 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
473 g_object_unref (renderer);
475 renderer = gtk_cell_renderer_text_new ();
476 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
480 g_object_unref (renderer);
482 renderer = gtk_cell_renderer_text_new ();
483 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
487 g_object_unref (renderer);
489 renderer = gtk_cell_renderer_text_new ();
490 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
494 g_object_unref (renderer);
496 renderer = gtk_cell_renderer_text_new ();
497 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
498 -1, "Visible Column",
501 g_object_unref (renderer);
503 renderer = gtk_cell_renderer_text_new ();
504 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
508 g_object_unref (renderer);
510 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
511 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
514 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
517 gtk_window_set_default_size (GTK_WINDOW (window),
520 gtk_widget_show_all (window);