From b707ff2b15af01713ebac9a572b798485bb4b288 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Tue, 21 Apr 1998 23:55:49 +0000 Subject: Made it use GncalDayPanel. 1998-04-21 Federico Mena Quintero * gnome-cal.c: Made it use GncalDayPanel. * gncal-day-panel.c: New widget for the day view in the main calendar toplevel. It basically takes care of everything gnome-cal did by hand with respect to the day view. * Makefile.am (gnomecal_SOURCES): Added gncal-day-panel.[ch] to the rules. * main.c: Added a separator between the About menu item and the help topics. svn path=/trunk/; revision=177 --- calendar/ChangeLog | 14 +++ calendar/Makefile.am | 2 + calendar/TODO | 14 +-- calendar/gncal-day-panel.c | 198 +++++++++++++++++++++++++++++++++++++++++ calendar/gncal-day-panel.h | 61 +++++++++++++ calendar/gncal-week-view.h | 2 +- calendar/gncal.desktop | 1 + calendar/gnome-cal.c | 127 ++++++-------------------- calendar/gnome-cal.h | 4 +- calendar/gui/Makefile.am | 2 + calendar/gui/gncal-day-panel.c | 198 +++++++++++++++++++++++++++++++++++++++++ calendar/gui/gncal-day-panel.h | 61 +++++++++++++ calendar/gui/gncal-week-view.h | 2 +- calendar/gui/gncal.desktop | 1 + calendar/gui/gnome-cal.c | 127 ++++++-------------------- calendar/gui/gnome-cal.h | 4 +- calendar/gui/main.c | 1 + calendar/main.c | 1 + 18 files changed, 597 insertions(+), 223 deletions(-) create mode 100644 calendar/gncal-day-panel.c create mode 100644 calendar/gncal-day-panel.h create mode 100644 calendar/gui/gncal-day-panel.c create mode 100644 calendar/gui/gncal-day-panel.h diff --git a/calendar/ChangeLog b/calendar/ChangeLog index b31b6bad5b..6c62cf7a7f 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,17 @@ +1998-04-21 Federico Mena Quintero + + * gnome-cal.c: Made it use GncalDayPanel. + + * gncal-day-panel.c: New widget for the day view in the main + calendar toplevel. It basically takes care of everything + gnome-cal did by hand with respect to the day view. + + * Makefile.am (gnomecal_SOURCES): Added gncal-day-panel.[ch] to + the rules. + + * main.c: Added a separator between the About menu item and the + help topics. + 1998-04-20 Miguel de Icaza * eventedit.c (ee_ok): Mark the event as non-new after accepting changes. diff --git a/calendar/Makefile.am b/calendar/Makefile.am index 15e7bf5f95..9c433a771e 100644 --- a/calendar/Makefile.am +++ b/calendar/Makefile.am @@ -16,6 +16,8 @@ gnomecal_SOURCES = \ calendar.h \ calobj.c \ calobj.h \ + gncal-day-panel.c \ + gncal-day-panel.h \ gncal-day-view.c \ gncal-day-view.h \ gncal-full-day.c \ diff --git a/calendar/TODO b/calendar/TODO index 9b42850111..53ce932311 100644 --- a/calendar/TODO +++ b/calendar/TODO @@ -1,16 +1,8 @@ -Calendar object: - -- The warnings spitted when you open the event editor to edit an - existing calendar object happen because the alarm loading code is - not yet finished. - Gnome date selection widget: - Make the displayed date be localized properly -- use strftime(). -Full day view widget: - -- Eliminate flicker when dragging a selection. +Full day widget: - Display alarm/whatever flags somewhere. @@ -27,10 +19,10 @@ Week view: Day view: -- Add a calendar and a to-do list widget. +- Highlight the days with appointments in the calendar. General: -- Ask the user whether to save the calendar when he quits the program. +- See that the views synchronize when you do a gnome_calendar_goto(). - Write online help. Nice help. Lots of help. diff --git a/calendar/gncal-day-panel.c b/calendar/gncal-day-panel.c new file mode 100644 index 0000000000..d546cda34f --- /dev/null +++ b/calendar/gncal-day-panel.c @@ -0,0 +1,198 @@ +/* Day view notebook panel for gncal + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena + */ + +#include "gncal-day-panel.h" +#include "main.h" +#include "timeutil.h" + + +guint +gncal_day_panel_get_type (void) +{ + static guint day_panel_type = 0; + + if (!day_panel_type) { + GtkTypeInfo day_panel_info = { + "GncalDayPanel", + sizeof (GncalDayPanel), + sizeof (GncalDayPanelClass), + (GtkClassInitFunc) NULL, + (GtkObjectInitFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL + }; + + day_panel_type = gtk_type_unique (gtk_table_get_type (), &day_panel_info); + } + + return day_panel_type; +} + +static void +day_view_range_activated (GncalFullDay *fullday, GncalDayPanel *dpanel) +{ + iCalObject *ical; + + ical = ical_new ("", user_name, ""); + ical->new = 1; + + gncal_full_day_selection_range (fullday, &ical->dtstart, &ical->dtend); + + gnome_calendar_add_object (dpanel->calendar, ical); + gncal_full_day_focus_child (fullday, ical); +} + +static void +full_day_mapped (GtkWidget *widget, GncalDayPanel *dpanel) +{ + GtkAdjustment *adj; + + adj = gtk_scrolled_window_get_vadjustment (dpanel->fullday_sw); + + adj->value = gncal_full_day_get_day_start_yoffset (GNCAL_FULL_DAY (widget)); + gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed"); +} + +static void +calendar_day_selected (GtkCalendar *calendar, GncalDayPanel *dpanel) +{ + gint y, m, d; + struct tm tm; + + gtk_calendar_get_date (calendar, &y, &m, &d); + + tm.tm_year = y; + tm.tm_mon = m; + tm.tm_mday = d; + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + + gnome_calendar_goto (dpanel->calendar, mktime (&tm)); +} + +GtkWidget * +gncal_day_panel_new (GnomeCalendar *calendar, time_t start_of_day) +{ + GncalDayPanel *dpanel; + GtkWidget *w; + + g_return_val_if_fail (calendar != NULL, NULL); + + dpanel = gtk_type_new (gncal_day_panel_get_type ()); + + gtk_container_border_width (GTK_CONTAINER (dpanel), 4); + gtk_table_set_row_spacings (GTK_TABLE (dpanel), 4); + gtk_table_set_col_spacings (GTK_TABLE (dpanel), 4); + + dpanel->calendar = calendar; + + /* Date label */ + + w = gtk_label_new (""); + dpanel->date_label = GTK_LABEL (w); + gtk_table_attach (GTK_TABLE (dpanel), w, + 1, 2, 0, 1, + GTK_FILL | GTK_SHRINK, + GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* Full day */ + + w = gtk_scrolled_window_new (NULL, NULL); + dpanel->fullday_sw = GTK_SCROLLED_WINDOW (w); + gtk_scrolled_window_set_policy (dpanel->fullday_sw, + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_table_attach (GTK_TABLE (dpanel), w, + 1, 2, 1, 3, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + w = gncal_full_day_new (calendar, time_start_of_day (start_of_day), time_end_of_day (start_of_day)); + dpanel->fullday = GNCAL_FULL_DAY (w); + gtk_signal_connect (GTK_OBJECT (dpanel->fullday), "range_activated", + (GtkSignalFunc) day_view_range_activated, + dpanel); + gtk_container_add (GTK_CONTAINER (dpanel->fullday_sw), w); + gtk_widget_show (w); + + /* When the full day widget gets mapped, we'll scroll the list to the proper initial position */ + + gtk_signal_connect (GTK_OBJECT (dpanel->fullday), "map", + (GtkSignalFunc) full_day_mapped, + dpanel); + + /* Gtk calendar */ + + w = gtk_calendar_new (); + dpanel->gtk_calendar = GTK_CALENDAR (w); + gtk_calendar_display_options (dpanel->gtk_calendar, + GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES); + dpanel->day_selected_id = gtk_signal_connect (GTK_OBJECT (dpanel->gtk_calendar), "day_selected", + (GtkSignalFunc) calendar_day_selected, + dpanel); + gtk_table_attach (GTK_TABLE (dpanel), w, + 0, 1, 1, 2, + GTK_FILL | GTK_SHRINK, + GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* To-do */ + + w = gtk_button_new_with_label ("TODO"); + dpanel->todo_list = w; + gtk_table_attach (GTK_TABLE (dpanel), w, + 0, 1, 2, 3, + GTK_FILL | GTK_SHRINK, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* Done */ + + gncal_day_panel_set (dpanel, start_of_day); + + return GTK_WIDGET (dpanel); +} + +void +gncal_day_panel_update (GncalDayPanel *dpanel, iCalObject *ico, int flags) +{ + g_return_if_fail (dpanel != NULL); + g_return_if_fail (GNCAL_IS_DAY_PANEL (dpanel)); + + gncal_full_day_update (dpanel->fullday, ico, flags); +} + +void +gncal_day_panel_set (GncalDayPanel *dpanel, time_t start_of_day) +{ + char buf[256]; + struct tm *tm; + + g_return_if_fail (dpanel != NULL); + g_return_if_fail (GNCAL_IS_DAY_PANEL (dpanel)); + + dpanel->start_of_day = time_start_of_day (start_of_day); + + strftime (buf, sizeof (buf), "%a %b %d %Y", localtime (&dpanel->start_of_day)); + gtk_label_set (GTK_LABEL (dpanel->date_label), buf); + + gncal_full_day_set_bounds (dpanel->fullday, dpanel->start_of_day, time_end_of_day (dpanel->start_of_day)); + + tm = localtime (&dpanel->start_of_day); + gtk_calendar_select_month (dpanel->gtk_calendar, tm->tm_mon, tm->tm_year + 1900); + + gtk_signal_handler_block (GTK_OBJECT (dpanel->gtk_calendar), dpanel->day_selected_id); + gtk_calendar_select_day (dpanel->gtk_calendar, tm->tm_mday); + gtk_signal_handler_unblock (GTK_OBJECT (dpanel->gtk_calendar), dpanel->day_selected_id); +} diff --git a/calendar/gncal-day-panel.h b/calendar/gncal-day-panel.h new file mode 100644 index 0000000000..aefbd5a3f9 --- /dev/null +++ b/calendar/gncal-day-panel.h @@ -0,0 +1,61 @@ +/* Day view notebook panel for gncal + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena + */ + +#ifndef GNCAL_DAY_PANEL_H +#define GNCAL_DAY_PANEL_H + +#include +#include +#include +#include +#include +#include "gnome-cal.h" +#include "gncal-full-day.h" + + +BEGIN_GNOME_DECLS + + +#define GNCAL_DAY_PANEL(obj) GTK_CHECK_CAST (obj, gncal_day_panel_get_type (), GncalDayPanel) +#define GNCAL_DAY_PANEL_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gncal_day_panel_get_type (), GncalDayPanelClass) +#define GNCAL_IS_DAY_PANEL(obj) GTK_CHECK_TYPE (obj, gncal_day_panel_get_type ()) + + +typedef struct _GncalDayPanel GncalDayPanel; +typedef struct _GncalDayPanelClass GncalDayPanelClass; + +struct _GncalDayPanel { + GtkTable table; + + GnomeCalendar *calendar; /* the calendar we are associated to */ + + time_t start_of_day; + + GtkLabel *date_label; + GncalFullDay *fullday; + GtkScrolledWindow *fullday_sw; + GtkCalendar *gtk_calendar; + GtkWidget *todo_list; + + guint day_selected_id; +}; + +struct _GncalDayPanelClass { + GtkTableClass parent_class; +}; + + +guint gncal_day_panel_get_type (void); +GtkWidget *gncal_day_panel_new (GnomeCalendar *calendar, time_t start_of_day); + +void gncal_day_panel_update (GncalDayPanel *dpanel, iCalObject *ico, int flags); +void gncal_day_panel_set (GncalDayPanel *dpanel, time_t start_of_day); + + +END_GNOME_DECLS + +#endif diff --git a/calendar/gncal-week-view.h b/calendar/gncal-week-view.h index 9df1e35b91..16dfa40eb0 100644 --- a/calendar/gncal-week-view.h +++ b/calendar/gncal-week-view.h @@ -12,8 +12,8 @@ #include #include #include -#include "gncal-day-view.h" #include "gnome-cal.h" +#include "gncal-day-view.h" BEGIN_GNOME_DECLS diff --git a/calendar/gncal.desktop b/calendar/gncal.desktop index 6c784e9c7b..840965c27c 100644 --- a/calendar/gncal.desktop +++ b/calendar/gncal.desktop @@ -4,6 +4,7 @@ Name[es]=Calendario Name[fr]=Calendrier Name[de]=Kalender Comment=Calendar application +Comment[es]=Calendario de Gnome Comment[fr]=Calendrier Gnome Comment[de]=Gnome Kalender Exec=gnomecal diff --git a/calendar/gnome-cal.c b/calendar/gnome-cal.c index bc26be5c92..a71e7fb343 100644 --- a/calendar/gnome-cal.c +++ b/calendar/gnome-cal.c @@ -11,15 +11,13 @@ #include #include "calendar.h" #include "gnome-cal.h" -#include "gncal-full-day.h" -#include "gncal-year-view.h" +#include "gncal-day-panel.h" #include "gncal-week-view.h" +#include "gncal-year-view.h" #include "timeutil.h" #include "views.h" #include "main.h" -static void gnome_calendar_init (GnomeCalendar *gcal); - GnomeApp *parent_class; guint @@ -32,7 +30,7 @@ gnome_calendar_get_type (void) sizeof(GnomeCalendar), sizeof(GnomeCalendarClass), (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) gnome_calendar_init, + (GtkObjectInitFunc) NULL, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL, }; @@ -42,70 +40,6 @@ gnome_calendar_get_type (void) return gnome_calendar_type; } -static void -day_view_range_activated (GncalFullDay *fullday, GnomeCalendar *gcal) -{ - iCalObject *ical; - - ical = ical_new ("", user_name, ""); - ical->new = 1; - - gncal_full_day_selection_range (fullday, &ical->dtstart, &ical->dtend); - - gnome_calendar_add_object (gcal, ical); - gncal_full_day_focus_child (fullday, ical); -} - -static void -set_day_view_label (GnomeCalendar *gcal, time_t t) -{ - static char buf[256]; - - strftime (buf, sizeof (buf), "%a %b %d %Y", localtime (&t)); - gtk_label_set (GTK_LABEL (gcal->day_view_label), buf); -} - -static void -setup_day_view (GnomeCalendar *gcal, time_t now) -{ - GtkTable *t; - GtkWidget *sw; - - time_t a, b; - - a = time_start_of_day (now); - b = time_end_of_day (now); - - gcal->day_view = gncal_full_day_new (gcal, a, b); - gtk_signal_connect (GTK_OBJECT (gcal->day_view), "range_activated", - (GtkSignalFunc) day_view_range_activated, - gcal); - - t = (GtkTable *) gcal->day_view_container = gtk_table_new (0, 0, 0); - gtk_container_border_width (GTK_CONTAINER (t), 4); - gtk_table_set_row_spacings (t, 4); - gtk_table_set_col_spacings (t, 4); - - gcal->day_view_label = gtk_label_new (""); - set_day_view_label (gcal, now); - gtk_table_attach (t, gcal->day_view_label, 0, 1, 0, 1, - GTK_FILL | GTK_SHRINK, - GTK_FILL | GTK_SHRINK, - 0, 0); - - sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_table_attach (t, sw, 0, 1, 1, 2, - GTK_FILL | GTK_EXPAND | GTK_SHRINK, - GTK_FILL | GTK_EXPAND | GTK_SHRINK, - 0, 0); - gtk_container_add (GTK_CONTAINER (sw), gcal->day_view); - - gtk_widget_show_all (GTK_WIDGET (t)); -} - static void setup_widgets (GnomeCalendar *gcal) { @@ -114,13 +48,12 @@ setup_widgets (GnomeCalendar *gcal) now = time (NULL); gcal->notebook = gtk_notebook_new (); + gcal->day_view = gncal_day_panel_new (gcal, now); gcal->week_view = gncal_week_view_new (gcal, now); gcal->year_view = gncal_year_view_new (gcal, now); gcal->task_view = tasks_create (gcal); - setup_day_view (gcal, now); - - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->day_view_container, gtk_label_new (_("Day View"))); + gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->day_view, gtk_label_new (_("Day View"))); gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->week_view, gtk_label_new (_("Week View"))); gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->year_view, gtk_label_new (_("Year View"))); /* gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->task_view, gtk_label_new (_("Todo"))); */ @@ -131,16 +64,6 @@ setup_widgets (GnomeCalendar *gcal) } -static void -gnome_calendar_init(GnomeCalendar *gcal) -{ - gcal->cal = 0; - gcal->day_view = 0; - gcal->week_view = 0; - gcal->year_view = 0; - gcal->event_editor = 0; -} - static GtkWidget * get_current_page (GnomeCalendar *gcal) { @@ -153,17 +76,17 @@ gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time) GtkWidget *current = get_current_page (gcal); g_assert (new_time != -1); - if (current == gcal->week_view) + if (current == gcal->day_view) + gncal_day_panel_set (GNCAL_DAY_PANEL (gcal->day_view), new_time); + else if (current == gcal->week_view) gncal_week_view_set (GNCAL_WEEK_VIEW (gcal->week_view), new_time); - else if (current == gcal->day_view_container){ - gncal_full_day_set_bounds (GNCAL_FULL_DAY (gcal->day_view), - time_start_of_day (new_time), - time_end_of_day (new_time)); - set_day_view_label (gcal, new_time); - } else if (current == gcal->year_view) + else if (current == gcal->year_view) gncal_year_view_set (GNCAL_YEAR_VIEW (gcal->year_view), new_time); - else - printf ("My penguin is gone!\n"); + else { + g_warning ("My penguin is gone!"); + g_assert_not_reached (); + } + gcal->current_display = new_time; } @@ -173,22 +96,24 @@ gnome_calendar_direction (GnomeCalendar *gcal, int direction) GtkWidget *cp = get_current_page (gcal); time_t new_time; - if (cp == gcal->week_view) - new_time = time_add_day (gcal->current_display, 7 * direction); - else if (cp == gcal->day_view_container) + if (cp == gcal->day_view) new_time = time_add_day (gcal->current_display, 1 * direction); + else if (cp == gcal->week_view) + new_time = time_add_day (gcal->current_display, 7 * direction); else if (cp == gcal->year_view) new_time = time_add_year (gcal->current_display, 1 * direction); - else + else { g_warning ("Weee! Where did the penguin go?"); - + g_assert_not_reached (); + } + gnome_calendar_goto (gcal, new_time); } void gnome_calendar_next (GnomeCalendar *gcal) { -gnome_calendar_direction (gcal, 1); + gnome_calendar_direction (gcal, 1); } void @@ -229,7 +154,7 @@ gnome_calendar_new (char *title) static void gnome_calendar_update_all (GnomeCalendar *cal, iCalObject *object, int flags) { - gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view), object, flags); + gncal_day_panel_update (GNCAL_DAY_PANEL (cal->day_view), object, flags); gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view), object, flags); gncal_year_view_update (GNCAL_YEAR_VIEW (cal->year_view), object, flags); } @@ -358,14 +283,14 @@ calendar_notify (time_t time, void *data) if (ico->malarm.enabled && ico->malarm.trigger == time){ char *command; time_t app = ico->malarm.trigger + ico->malarm.offset; - + command = g_copy_strings ("mail -s '", _("Reminder of your appointment at "), ctime (&app), "' '", ico->malarm.data, "' ", NULL); execute (command, 1); - + g_free (command); return; } @@ -383,5 +308,3 @@ calendar_notify (time_t time, void *data) return; } } - - diff --git a/calendar/gnome-cal.h b/calendar/gnome-cal.h index 88e5fc5b6d..653244b075 100644 --- a/calendar/gnome-cal.h +++ b/calendar/gnome-cal.h @@ -25,10 +25,8 @@ typedef struct { time_t current_display; GtkWidget *notebook; - GtkWidget *week_view; GtkWidget *day_view; - GtkWidget *day_view_container; - GtkWidget *day_view_label; + GtkWidget *week_view; GtkWidget *year_view; GtkWidget *task_view; void *event_editor; diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am index 15e7bf5f95..9c433a771e 100644 --- a/calendar/gui/Makefile.am +++ b/calendar/gui/Makefile.am @@ -16,6 +16,8 @@ gnomecal_SOURCES = \ calendar.h \ calobj.c \ calobj.h \ + gncal-day-panel.c \ + gncal-day-panel.h \ gncal-day-view.c \ gncal-day-view.h \ gncal-full-day.c \ diff --git a/calendar/gui/gncal-day-panel.c b/calendar/gui/gncal-day-panel.c new file mode 100644 index 0000000000..d546cda34f --- /dev/null +++ b/calendar/gui/gncal-day-panel.c @@ -0,0 +1,198 @@ +/* Day view notebook panel for gncal + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena + */ + +#include "gncal-day-panel.h" +#include "main.h" +#include "timeutil.h" + + +guint +gncal_day_panel_get_type (void) +{ + static guint day_panel_type = 0; + + if (!day_panel_type) { + GtkTypeInfo day_panel_info = { + "GncalDayPanel", + sizeof (GncalDayPanel), + sizeof (GncalDayPanelClass), + (GtkClassInitFunc) NULL, + (GtkObjectInitFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL + }; + + day_panel_type = gtk_type_unique (gtk_table_get_type (), &day_panel_info); + } + + return day_panel_type; +} + +static void +day_view_range_activated (GncalFullDay *fullday, GncalDayPanel *dpanel) +{ + iCalObject *ical; + + ical = ical_new ("", user_name, ""); + ical->new = 1; + + gncal_full_day_selection_range (fullday, &ical->dtstart, &ical->dtend); + + gnome_calendar_add_object (dpanel->calendar, ical); + gncal_full_day_focus_child (fullday, ical); +} + +static void +full_day_mapped (GtkWidget *widget, GncalDayPanel *dpanel) +{ + GtkAdjustment *adj; + + adj = gtk_scrolled_window_get_vadjustment (dpanel->fullday_sw); + + adj->value = gncal_full_day_get_day_start_yoffset (GNCAL_FULL_DAY (widget)); + gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed"); +} + +static void +calendar_day_selected (GtkCalendar *calendar, GncalDayPanel *dpanel) +{ + gint y, m, d; + struct tm tm; + + gtk_calendar_get_date (calendar, &y, &m, &d); + + tm.tm_year = y; + tm.tm_mon = m; + tm.tm_mday = d; + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + + gnome_calendar_goto (dpanel->calendar, mktime (&tm)); +} + +GtkWidget * +gncal_day_panel_new (GnomeCalendar *calendar, time_t start_of_day) +{ + GncalDayPanel *dpanel; + GtkWidget *w; + + g_return_val_if_fail (calendar != NULL, NULL); + + dpanel = gtk_type_new (gncal_day_panel_get_type ()); + + gtk_container_border_width (GTK_CONTAINER (dpanel), 4); + gtk_table_set_row_spacings (GTK_TABLE (dpanel), 4); + gtk_table_set_col_spacings (GTK_TABLE (dpanel), 4); + + dpanel->calendar = calendar; + + /* Date label */ + + w = gtk_label_new (""); + dpanel->date_label = GTK_LABEL (w); + gtk_table_attach (GTK_TABLE (dpanel), w, + 1, 2, 0, 1, + GTK_FILL | GTK_SHRINK, + GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* Full day */ + + w = gtk_scrolled_window_new (NULL, NULL); + dpanel->fullday_sw = GTK_SCROLLED_WINDOW (w); + gtk_scrolled_window_set_policy (dpanel->fullday_sw, + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_table_attach (GTK_TABLE (dpanel), w, + 1, 2, 1, 3, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + w = gncal_full_day_new (calendar, time_start_of_day (start_of_day), time_end_of_day (start_of_day)); + dpanel->fullday = GNCAL_FULL_DAY (w); + gtk_signal_connect (GTK_OBJECT (dpanel->fullday), "range_activated", + (GtkSignalFunc) day_view_range_activated, + dpanel); + gtk_container_add (GTK_CONTAINER (dpanel->fullday_sw), w); + gtk_widget_show (w); + + /* When the full day widget gets mapped, we'll scroll the list to the proper initial position */ + + gtk_signal_connect (GTK_OBJECT (dpanel->fullday), "map", + (GtkSignalFunc) full_day_mapped, + dpanel); + + /* Gtk calendar */ + + w = gtk_calendar_new (); + dpanel->gtk_calendar = GTK_CALENDAR (w); + gtk_calendar_display_options (dpanel->gtk_calendar, + GTK_CALENDAR_SHOW_HEADING | GTK_CALENDAR_SHOW_DAY_NAMES); + dpanel->day_selected_id = gtk_signal_connect (GTK_OBJECT (dpanel->gtk_calendar), "day_selected", + (GtkSignalFunc) calendar_day_selected, + dpanel); + gtk_table_attach (GTK_TABLE (dpanel), w, + 0, 1, 1, 2, + GTK_FILL | GTK_SHRINK, + GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* To-do */ + + w = gtk_button_new_with_label ("TODO"); + dpanel->todo_list = w; + gtk_table_attach (GTK_TABLE (dpanel), w, + 0, 1, 2, 3, + GTK_FILL | GTK_SHRINK, + GTK_EXPAND | GTK_FILL | GTK_SHRINK, + 0, 0); + gtk_widget_show (w); + + /* Done */ + + gncal_day_panel_set (dpanel, start_of_day); + + return GTK_WIDGET (dpanel); +} + +void +gncal_day_panel_update (GncalDayPanel *dpanel, iCalObject *ico, int flags) +{ + g_return_if_fail (dpanel != NULL); + g_return_if_fail (GNCAL_IS_DAY_PANEL (dpanel)); + + gncal_full_day_update (dpanel->fullday, ico, flags); +} + +void +gncal_day_panel_set (GncalDayPanel *dpanel, time_t start_of_day) +{ + char buf[256]; + struct tm *tm; + + g_return_if_fail (dpanel != NULL); + g_return_if_fail (GNCAL_IS_DAY_PANEL (dpanel)); + + dpanel->start_of_day = time_start_of_day (start_of_day); + + strftime (buf, sizeof (buf), "%a %b %d %Y", localtime (&dpanel->start_of_day)); + gtk_label_set (GTK_LABEL (dpanel->date_label), buf); + + gncal_full_day_set_bounds (dpanel->fullday, dpanel->start_of_day, time_end_of_day (dpanel->start_of_day)); + + tm = localtime (&dpanel->start_of_day); + gtk_calendar_select_month (dpanel->gtk_calendar, tm->tm_mon, tm->tm_year + 1900); + + gtk_signal_handler_block (GTK_OBJECT (dpanel->gtk_calendar), dpanel->day_selected_id); + gtk_calendar_select_day (dpanel->gtk_calendar, tm->tm_mday); + gtk_signal_handler_unblock (GTK_OBJECT (dpanel->gtk_calendar), dpanel->day_selected_id); +} diff --git a/calendar/gui/gncal-day-panel.h b/calendar/gui/gncal-day-panel.h new file mode 100644 index 0000000000..aefbd5a3f9 --- /dev/null +++ b/calendar/gui/gncal-day-panel.h @@ -0,0 +1,61 @@ +/* Day view notebook panel for gncal + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena + */ + +#ifndef GNCAL_DAY_PANEL_H +#define GNCAL_DAY_PANEL_H + +#include +#include +#include +#include +#include +#include "gnome-cal.h" +#include "gncal-full-day.h" + + +BEGIN_GNOME_DECLS + + +#define GNCAL_DAY_PANEL(obj) GTK_CHECK_CAST (obj, gncal_day_panel_get_type (), GncalDayPanel) +#define GNCAL_DAY_PANEL_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gncal_day_panel_get_type (), GncalDayPanelClass) +#define GNCAL_IS_DAY_PANEL(obj) GTK_CHECK_TYPE (obj, gncal_day_panel_get_type ()) + + +typedef struct _GncalDayPanel GncalDayPanel; +typedef struct _GncalDayPanelClass GncalDayPanelClass; + +struct _GncalDayPanel { + GtkTable table; + + GnomeCalendar *calendar; /* the calendar we are associated to */ + + time_t start_of_day; + + GtkLabel *date_label; + GncalFullDay *fullday; + GtkScrolledWindow *fullday_sw; + GtkCalendar *gtk_calendar; + GtkWidget *todo_list; + + guint day_selected_id; +}; + +struct _GncalDayPanelClass { + GtkTableClass parent_class; +}; + + +guint gncal_day_panel_get_type (void); +GtkWidget *gncal_day_panel_new (GnomeCalendar *calendar, time_t start_of_day); + +void gncal_day_panel_update (GncalDayPanel *dpanel, iCalObject *ico, int flags); +void gncal_day_panel_set (GncalDayPanel *dpanel, time_t start_of_day); + + +END_GNOME_DECLS + +#endif diff --git a/calendar/gui/gncal-week-view.h b/calendar/gui/gncal-week-view.h index 9df1e35b91..16dfa40eb0 100644 --- a/calendar/gui/gncal-week-view.h +++ b/calendar/gui/gncal-week-view.h @@ -12,8 +12,8 @@ #include #include #include -#include "gncal-day-view.h" #include "gnome-cal.h" +#include "gncal-day-view.h" BEGIN_GNOME_DECLS diff --git a/calendar/gui/gncal.desktop b/calendar/gui/gncal.desktop index 6c784e9c7b..840965c27c 100644 --- a/calendar/gui/gncal.desktop +++ b/calendar/gui/gncal.desktop @@ -4,6 +4,7 @@ Name[es]=Calendario Name[fr]=Calendrier Name[de]=Kalender Comment=Calendar application +Comment[es]=Calendario de Gnome Comment[fr]=Calendrier Gnome Comment[de]=Gnome Kalender Exec=gnomecal diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index bc26be5c92..a71e7fb343 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -11,15 +11,13 @@ #include #include "calendar.h" #include "gnome-cal.h" -#include "gncal-full-day.h" -#include "gncal-year-view.h" +#include "gncal-day-panel.h" #include "gncal-week-view.h" +#include "gncal-year-view.h" #include "timeutil.h" #include "views.h" #include "main.h" -static void gnome_calendar_init (GnomeCalendar *gcal); - GnomeApp *parent_class; guint @@ -32,7 +30,7 @@ gnome_calendar_get_type (void) sizeof(GnomeCalendar), sizeof(GnomeCalendarClass), (GtkClassInitFunc) NULL, - (GtkObjectInitFunc) gnome_calendar_init, + (GtkObjectInitFunc) NULL, (GtkArgSetFunc) NULL, (GtkArgGetFunc) NULL, }; @@ -42,70 +40,6 @@ gnome_calendar_get_type (void) return gnome_calendar_type; } -static void -day_view_range_activated (GncalFullDay *fullday, GnomeCalendar *gcal) -{ - iCalObject *ical; - - ical = ical_new ("", user_name, ""); - ical->new = 1; - - gncal_full_day_selection_range (fullday, &ical->dtstart, &ical->dtend); - - gnome_calendar_add_object (gcal, ical); - gncal_full_day_focus_child (fullday, ical); -} - -static void -set_day_view_label (GnomeCalendar *gcal, time_t t) -{ - static char buf[256]; - - strftime (buf, sizeof (buf), "%a %b %d %Y", localtime (&t)); - gtk_label_set (GTK_LABEL (gcal->day_view_label), buf); -} - -static void -setup_day_view (GnomeCalendar *gcal, time_t now) -{ - GtkTable *t; - GtkWidget *sw; - - time_t a, b; - - a = time_start_of_day (now); - b = time_end_of_day (now); - - gcal->day_view = gncal_full_day_new (gcal, a, b); - gtk_signal_connect (GTK_OBJECT (gcal->day_view), "range_activated", - (GtkSignalFunc) day_view_range_activated, - gcal); - - t = (GtkTable *) gcal->day_view_container = gtk_table_new (0, 0, 0); - gtk_container_border_width (GTK_CONTAINER (t), 4); - gtk_table_set_row_spacings (t, 4); - gtk_table_set_col_spacings (t, 4); - - gcal->day_view_label = gtk_label_new (""); - set_day_view_label (gcal, now); - gtk_table_attach (t, gcal->day_view_label, 0, 1, 0, 1, - GTK_FILL | GTK_SHRINK, - GTK_FILL | GTK_SHRINK, - 0, 0); - - sw = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_table_attach (t, sw, 0, 1, 1, 2, - GTK_FILL | GTK_EXPAND | GTK_SHRINK, - GTK_FILL | GTK_EXPAND | GTK_SHRINK, - 0, 0); - gtk_container_add (GTK_CONTAINER (sw), gcal->day_view); - - gtk_widget_show_all (GTK_WIDGET (t)); -} - static void setup_widgets (GnomeCalendar *gcal) { @@ -114,13 +48,12 @@ setup_widgets (GnomeCalendar *gcal) now = time (NULL); gcal->notebook = gtk_notebook_new (); + gcal->day_view = gncal_day_panel_new (gcal, now); gcal->week_view = gncal_week_view_new (gcal, now); gcal->year_view = gncal_year_view_new (gcal, now); gcal->task_view = tasks_create (gcal); - setup_day_view (gcal, now); - - gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->day_view_container, gtk_label_new (_("Day View"))); + gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->day_view, gtk_label_new (_("Day View"))); gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->week_view, gtk_label_new (_("Week View"))); gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->year_view, gtk_label_new (_("Year View"))); /* gtk_notebook_append_page (GTK_NOTEBOOK (gcal->notebook), gcal->task_view, gtk_label_new (_("Todo"))); */ @@ -131,16 +64,6 @@ setup_widgets (GnomeCalendar *gcal) } -static void -gnome_calendar_init(GnomeCalendar *gcal) -{ - gcal->cal = 0; - gcal->day_view = 0; - gcal->week_view = 0; - gcal->year_view = 0; - gcal->event_editor = 0; -} - static GtkWidget * get_current_page (GnomeCalendar *gcal) { @@ -153,17 +76,17 @@ gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time) GtkWidget *current = get_current_page (gcal); g_assert (new_time != -1); - if (current == gcal->week_view) + if (current == gcal->day_view) + gncal_day_panel_set (GNCAL_DAY_PANEL (gcal->day_view), new_time); + else if (current == gcal->week_view) gncal_week_view_set (GNCAL_WEEK_VIEW (gcal->week_view), new_time); - else if (current == gcal->day_view_container){ - gncal_full_day_set_bounds (GNCAL_FULL_DAY (gcal->day_view), - time_start_of_day (new_time), - time_end_of_day (new_time)); - set_day_view_label (gcal, new_time); - } else if (current == gcal->year_view) + else if (current == gcal->year_view) gncal_year_view_set (GNCAL_YEAR_VIEW (gcal->year_view), new_time); - else - printf ("My penguin is gone!\n"); + else { + g_warning ("My penguin is gone!"); + g_assert_not_reached (); + } + gcal->current_display = new_time; } @@ -173,22 +96,24 @@ gnome_calendar_direction (GnomeCalendar *gcal, int direction) GtkWidget *cp = get_current_page (gcal); time_t new_time; - if (cp == gcal->week_view) - new_time = time_add_day (gcal->current_display, 7 * direction); - else if (cp == gcal->day_view_container) + if (cp == gcal->day_view) new_time = time_add_day (gcal->current_display, 1 * direction); + else if (cp == gcal->week_view) + new_time = time_add_day (gcal->current_display, 7 * direction); else if (cp == gcal->year_view) new_time = time_add_year (gcal->current_display, 1 * direction); - else + else { g_warning ("Weee! Where did the penguin go?"); - + g_assert_not_reached (); + } + gnome_calendar_goto (gcal, new_time); } void gnome_calendar_next (GnomeCalendar *gcal) { -gnome_calendar_direction (gcal, 1); + gnome_calendar_direction (gcal, 1); } void @@ -229,7 +154,7 @@ gnome_calendar_new (char *title) static void gnome_calendar_update_all (GnomeCalendar *cal, iCalObject *object, int flags) { - gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view), object, flags); + gncal_day_panel_update (GNCAL_DAY_PANEL (cal->day_view), object, flags); gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view), object, flags); gncal_year_view_update (GNCAL_YEAR_VIEW (cal->year_view), object, flags); } @@ -358,14 +283,14 @@ calendar_notify (time_t time, void *data) if (ico->malarm.enabled && ico->malarm.trigger == time){ char *command; time_t app = ico->malarm.trigger + ico->malarm.offset; - + command = g_copy_strings ("mail -s '", _("Reminder of your appointment at "), ctime (&app), "' '", ico->malarm.data, "' ", NULL); execute (command, 1); - + g_free (command); return; } @@ -383,5 +308,3 @@ calendar_notify (time_t time, void *data) return; } } - - diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h index 88e5fc5b6d..653244b075 100644 --- a/calendar/gui/gnome-cal.h +++ b/calendar/gui/gnome-cal.h @@ -25,10 +25,8 @@ typedef struct { time_t current_display; GtkWidget *notebook; - GtkWidget *week_view; GtkWidget *day_view; - GtkWidget *day_view_container; - GtkWidget *day_view_label; + GtkWidget *week_view; GtkWidget *year_view; GtkWidget *task_view; void *event_editor; diff --git a/calendar/gui/main.c b/calendar/gui/main.c index 14a4a183a1..0f70bb1cd4 100644 --- a/calendar/gui/main.c +++ b/calendar/gui/main.c @@ -298,6 +298,7 @@ static GnomeUIInfo gnome_cal_file_menu [] = { static GnomeUIInfo gnome_cal_about_menu [] = { { GNOME_APP_UI_ITEM, N_("About"), NULL, about_calendar_cmd, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT }, + GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_HELP ("cal"), GNOMEUIINFO_END }; diff --git a/calendar/main.c b/calendar/main.c index 14a4a183a1..0f70bb1cd4 100644 --- a/calendar/main.c +++ b/calendar/main.c @@ -298,6 +298,7 @@ static GnomeUIInfo gnome_cal_file_menu [] = { static GnomeUIInfo gnome_cal_about_menu [] = { { GNOME_APP_UI_ITEM, N_("About"), NULL, about_calendar_cmd, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT }, + GNOMEUIINFO_SEPARATOR, GNOMEUIINFO_HELP ("cal"), GNOMEUIINFO_END }; -- cgit v1.2.3