/* Week view composite widget for gncal * * Copyright (C) 1998 The Free Software Foundation * * Author: Arturo Espinosa * * Heavily based on Federico Mena's week view. * */ #include "gncal-year-view.h" static void gncal_year_view_init (GncalYearView *yview); static void select_day(GtkWidget *widget, gpointer data) { int i; GncalYearView *yview; yview = GNCAL_YEAR_VIEW(data); for (i = 0; i < 12; i++) gtk_signal_handler_block(GTK_OBJECT(yview->calendar[i]), yview->handler[i]); for (i = 0; i < 12; i++) if (GTK_CALENDAR(yview->calendar[i]) != GTK_CALENDAR(widget)) gtk_calendar_select_day(GTK_CALENDAR(yview->calendar[i]), 0); for (i = 0; i < 12; i++) gtk_signal_handler_unblock(GTK_OBJECT(yview->calendar[i]), yview->handler[i]); } guint gncal_year_view_get_type (void) { static guint year_view_type = 0; if (!year_view_type) { GtkTypeInfo year_view_info = { "GncalYearView", sizeof (GncalYearView), sizeof (GncalYearViewClass), (GtkClassInitFunc) NULL, (GtkObjectInitFunc) gncal_year_view_init, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL }; year_view_type = gtk_type_unique (gtk_table_get_type (), &year_view_info); } return year_view_type; } static void gncal_year_view_init (GncalYearView *yview) { int i; for (i = 0; i < 12; i++) { yview->calendar[i] = NULL; yview->handler [i] = 0; } yview->year_label = NULL; yview->year = 0; } GtkWidget * gncal_year_view_new (time_t date) { struct tm my_tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; char monthbuff[40]; GncalYearView *yview; GtkWidget *frame, *vbox, *label; struct tm *tmptm; int i, x, y; yview = gtk_type_new (gncal_year_view_get_type ()); tmptm = localtime(&date); yview->year = tmptm->tm_year; my_tm.tm_mon = tmptm->tm_year; yview->year_label = gtk_label_new(""); gtk_table_attach (GTK_TABLE (yview), GTK_WIDGET (yview->year_label), 1, 2, 0, 1, 0, 0, 0, 5); gtk_widget_show(GTK_WIDGET(yview->year_label)); for (x = 0; x < 3; x++) for (y = 0; y < 4; y++) { i = y * 3 + x; yview->calendar[i] = gtk_calendar_new(); gtk_calendar_display_options(GTK_CALENDAR(yview->calendar[i]), GTK_CALENDAR_SHOW_DAY_NAMES); frame = gtk_frame_new(NULL); vbox = gtk_vbox_new(0,0); yview->handler[i] = gtk_signal_connect(GTK_OBJECT(yview->calendar[i]), "day_selected", GTK_SIGNAL_FUNC(select_day), (gpointer *) yview); my_tm.tm_mon = i; strftime(monthbuff, 40, "%B", &my_tm); label = gtk_label_new(monthbuff); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_box_pack_start(GTK_BOX(vbox), label, 0, 0, 0); gtk_box_pack_start(GTK_BOX(vbox), yview->calendar[i], 0, 0, 0); gtk_table_attach (GTK_TABLE (yview), GTK_WIDGET (frame), x, x + 1, y + 1, y + 2, 0, 0, 0, 0); gtk_widget_show (frame); gtk_widget_show (vbox); gtk_widget_show (GTK_WIDGET (yview->calendar[i])); } gncal_year_view_set (yview, date); return GTK_WIDGET (yview); } void gncal_year_view_set (GncalYearView *yview, time_t date) { int i; char buff[10]; struct tm *tmptm; tmptm = localtime(&date); yview->year = tmptm->tm_year; snprintf(buff, 10, "%d", yview->year + 1900); gtk_label_set(GTK_LABEL(yview->year_label), buff); for (i = 0; i < 12; i++) { gtk_calendar_select_month (GTK_CALENDAR(yview->calendar[i]), i, yview->year); } } /*void gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags) { g_return_if_fail (wview != NULL); g_return_if_fail (GNCAL_IS_YEAR_VIEW (wview)); update (wview, TRUE, ico, flags); }*/