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_with_types (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);
332 renderer = gtk_cell_renderer_text_new ();
333 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
336 "text", HOLIDAY_COLUMN, NULL);
337 g_object_unref (renderer);
340 renderer = gtk_cell_renderer_toggle_new ();
341 g_signal_connect_data (G_OBJECT (renderer), "toggled", alex_toggled, model, NULL, FALSE, FALSE);
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),
347 "active", ALEX_COLUMN,
348 "visible", VISIBLE_COLUMN,
349 "can_activate", WORLD_COLUMN,
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);
357 renderer = gtk_cell_renderer_toggle_new ();
358 g_signal_connect_data (G_OBJECT (renderer), "toggled", havoc_toggled, model, NULL, FALSE, FALSE);
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),
364 "active", HAVOC_COLUMN,
365 "visible", VISIBLE_COLUMN,
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);
373 renderer = gtk_cell_renderer_toggle_new ();
374 g_signal_connect_data (G_OBJECT (renderer), "toggled", tim_toggled, model, NULL, FALSE, FALSE);
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),
380 "active", TIM_COLUMN,
381 "visible", VISIBLE_COLUMN,
382 "can_activate", WORLD_COLUMN,
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);
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),
396 "active", OWEN_COLUMN,
397 "visible", VISIBLE_COLUMN,
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);
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),
411 "active", DAVE_COLUMN,
412 "visible", VISIBLE_COLUMN,
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);
419 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
421 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
422 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
424 gtk_window_set_default_size (GTK_WINDOW (window),
426 gtk_widget_show_all (window);
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);
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);
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);
446 renderer = gtk_cell_renderer_text_new ();
447 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
448 -1, "Holiday Column",
451 g_object_unref (renderer);
453 renderer = gtk_cell_renderer_text_new ();
454 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
458 g_object_unref (renderer);
460 renderer = gtk_cell_renderer_text_new ();
461 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
465 g_object_unref (renderer);
467 renderer = gtk_cell_renderer_text_new ();
468 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
472 g_object_unref (renderer);
474 renderer = gtk_cell_renderer_text_new ();
475 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
479 g_object_unref (renderer);
481 renderer = gtk_cell_renderer_text_new ();
482 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
486 g_object_unref (renderer);
488 renderer = gtk_cell_renderer_text_new ();
489 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
490 -1, "Visible Column",
493 g_object_unref (renderer);
495 renderer = gtk_cell_renderer_text_new ();
496 gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
500 g_object_unref (renderer);
502 gtk_signal_connect (GTK_OBJECT (tree_view), "realize",
503 GTK_SIGNAL_FUNC (gtk_tree_view_expand_all),
506 gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
509 gtk_window_set_default_size (GTK_WINDOW (window),
512 gtk_widget_show_all (window);