From f6963100c2509175cbd22b1556273ddbc0dd4e7d Mon Sep 17 00:00:00 2001 From: Miguel de Icaza Date: Thu, 2 Apr 1998 20:35:12 +0000 Subject: Day events are now cached inside the widget. They get initialized at this 1998-04-02 Miguel de Icaza * gncal-day-view.c (gncal_day_view_update): Day events are now cached inside the widget. They get initialized at this time. * view-utils.c (view_utils_draw_events): Use the list of events. svn path=/trunk/; revision=95 --- calendar/gui/gncal-day-view.c | 28 +++++++++++++++++++--------- calendar/gui/gncal-day-view.h | 12 ++++++------ calendar/gui/gncal-week-view.c | 6 +++--- calendar/gui/gncal-week-view.h | 6 +++--- calendar/gui/gnome-cal.c | 8 +++++--- calendar/gui/gnome-cal.h | 1 + calendar/gui/main.c | 4 ++-- calendar/gui/view-utils.c | 14 +++++--------- calendar/gui/view-utils.h | 2 +- 9 files changed, 45 insertions(+), 36 deletions(-) (limited to 'calendar/gui') diff --git a/calendar/gui/gncal-day-view.c b/calendar/gui/gncal-day-view.c index ce0b363c62..eef854322d 100644 --- a/calendar/gui/gncal-day-view.c +++ b/calendar/gui/gncal-day-view.c @@ -93,24 +93,26 @@ gncal_day_view_destroy (GtkObject *object) if (dview->day_str) g_free (dview->day_str); - + if (dview->events) + g_list_free (dview->events); + if (GTK_OBJECT_CLASS (parent_class)->destroy) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } GtkWidget * -gncal_day_view_new (Calendar *calendar, time_t lower, time_t upper) +gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper) { GncalDayView *dview; -#if 0 + g_return_val_if_fail (calendar != NULL, NULL); -#endif + dview = gtk_type_new (gncal_day_view_get_type ()); dview->calendar = calendar; - dview->lower = lower; - dview->upper = upper; - + dview->lower = lower; + dview->upper = upper; + dview->events = 0; gncal_day_view_update (dview); return GTK_WIDGET (dview); @@ -268,7 +270,7 @@ gncal_day_view_expose (GtkWidget *widget, GdkEventExpose *event) widget->style->fg_gc[GTK_STATE_NORMAL], &rect, VIEW_UTILS_DRAW_END | VIEW_UTILS_DRAW_SPLIT, - dview->calendar, + dview->events, dview->lower, dview->upper); @@ -288,10 +290,18 @@ gncal_day_view_update (GncalDayView *dview) g_free (dview->day_str); tm = *localtime (&dview->lower); - strftime (buf, 256, "%A %d", &tm); + strftime (buf, sizeof (buf)-1, "%A %d", &tm); dview->day_str = g_strdup (buf); gtk_widget_draw (GTK_WIDGET (dview), NULL); + + if (dview->events) + g_list_free (dview->events); + + dview->events = calendar_get_events_in_range (dview->calendar->cal, + dview->lower, + dview->upper, + calendar_compare_by_dtstart); } void diff --git a/calendar/gui/gncal-day-view.h b/calendar/gui/gncal-day-view.h index e17eabcab7..80e8a6299f 100644 --- a/calendar/gui/gncal-day-view.h +++ b/calendar/gui/gncal-day-view.h @@ -12,7 +12,7 @@ #include #include #include "calendar.h" - +#include "gnome-cal.h" BEGIN_GNOME_DECLS @@ -28,13 +28,13 @@ typedef struct _GncalDayViewClass GncalDayViewClass; struct _GncalDayView { GtkWidget widget; - Calendar *calendar; /* the calendar we are associated to */ + GnomeCalendar *calendar;/* the calendar we are associated to */ time_t lower; /* lower and upper times to display */ - time_t upper; - - char *day_str; /* what day is it? */ + time_t upper; /* these include the full day */ + char *day_str; /* what day is it? */ + GList *events; /* the events for the this day */ GtkShadowType shadow_type; }; @@ -44,7 +44,7 @@ struct _GncalDayViewClass { guint gncal_day_view_get_type (void); -GtkWidget *gncal_day_view_new (Calendar *calendar, time_t lower, time_t upper); +GtkWidget *gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper); void gncal_day_view_update (GncalDayView *dview); void gncal_day_view_set_bounds (GncalDayView *dview, time_t lower, time_t upper); diff --git a/calendar/gui/gncal-week-view.c b/calendar/gui/gncal-week-view.c index ced5f13627..f7d3222cfe 100644 --- a/calendar/gui/gncal-week-view.c +++ b/calendar/gui/gncal-week-view.c @@ -49,13 +49,13 @@ gncal_week_view_init (GncalWeekView *wview) } GtkWidget * -gncal_week_view_new (Calendar *calendar, time_t start_of_week) +gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week) { GncalWeekView *wview; int i; -#if 0 + g_return_val_if_fail (calendar != NULL, NULL); -#endif + wview = gtk_type_new (gncal_week_view_get_type ()); wview->table.homogeneous = TRUE; /* FIXME: eeeeeeeeeek, GtkTable does not have a function to set this */ diff --git a/calendar/gui/gncal-week-view.h b/calendar/gui/gncal-week-view.h index c7bfb1a19d..6bf29e40c4 100644 --- a/calendar/gui/gncal-week-view.h +++ b/calendar/gui/gncal-week-view.h @@ -13,7 +13,7 @@ #include #include #include "gncal-day-view.h" - +#include "gnome-cal.h" BEGIN_GNOME_DECLS @@ -29,7 +29,7 @@ typedef struct _GncalWeekViewClass GncalWeekViewClass; struct _GncalWeekView { GtkTable table; - Calendar *calendar; /* the calendar we are associated to */ + GnomeCalendar *calendar; /* the calendar we are associated to */ struct tm start_of_week; @@ -43,7 +43,7 @@ struct _GncalWeekViewClass { guint gncal_week_view_get_type (void); -GtkWidget *gncal_week_view_new (Calendar *calendar, time_t start_of_week); +GtkWidget *gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week); void gncal_week_view_update (GncalWeekView *wview); void gncal_week_view_set (GncalWeekView *wview, time_t start_of_week); diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index 0b22a1a684..7e3755b0dc 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -8,6 +8,7 @@ #include #include "calendar.h" #include "gnome-cal.h" +#include "gncal-week-view.h" #include "views.h" static void gnome_calendar_init (GnomeCalendar *gcal); @@ -38,19 +39,19 @@ static void setup_widgets (GnomeCalendar *gcal) { GtkWidget *notebook; - GtkWidget *day_view, *week_view, *year_view, *task_view; + GtkWidget *day_view, *year_view, *task_view; time_t now; now = time (NULL); notebook = gtk_notebook_new (); day_view = day_view_create (gcal); - week_view = gncal_week_view_new (gcal->cal, now); + gcal->week_view = gncal_week_view_new (gcal, now); year_view = year_view_create (gcal); task_view = tasks_create (gcal); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), day_view, gtk_label_new (_("Day View"))); - gtk_notebook_append_page (GTK_NOTEBOOK (notebook), week_view, gtk_label_new (_("Week View"))); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), gcal->week_view, gtk_label_new (_("Week View"))); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), year_view, gtk_label_new (_("Year View"))); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), task_view, gtk_label_new (_("Tasks"))); @@ -92,4 +93,5 @@ void gnome_calendar_load (GnomeCalendar *gcal, char *file) { calendar_load (gcal->cal, file); + gncal_week_view_update (GNCAL_WEEK_VIEW (gcal->week_view)); } diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h index 2b30bf1f7c..3b2108c560 100644 --- a/calendar/gui/gnome-cal.h +++ b/calendar/gui/gnome-cal.h @@ -20,6 +20,7 @@ BEGIN_GNOME_DECLS typedef struct { GnomeApp gnome_app; Calendar *cal; + GtkWidget *week_view; } GnomeCalendar; typedef struct { diff --git a/calendar/gui/main.c b/calendar/gui/main.c index be54ba2d81..628626dcb8 100644 --- a/calendar/gui/main.c +++ b/calendar/gui/main.c @@ -163,7 +163,7 @@ GnomeUIInfo gnome_cal_file_menu [] = { 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_HELP ("midnight-commander"), + GNOMEUIINFO_HELP ("cal"), GNOMEUIINFO_END }; @@ -182,7 +182,7 @@ GnomeUIInfo gnome_toolbar [] = { { GNOME_APP_UI_ITEM, N_("Next"), N_("Next"), /*previous_clicked*/0, 0, 0, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD }, - + GNOMEUIINFO_END }; diff --git a/calendar/gui/view-utils.c b/calendar/gui/view-utils.c index 6b317fd70e..6e8c4044dd 100644 --- a/calendar/gui/view-utils.c +++ b/calendar/gui/view-utils.c @@ -11,6 +11,7 @@ /* FIXME: remove this function later */ +#if 0 static GList * calendar_get_events_in_range (Calendar *cal, time_t start, time_t end, GCompareFunc sort_func) { @@ -50,10 +51,10 @@ calendar_get_events_in_range (Calendar *cal, time_t start, time_t end, GCompareF return list; } - +#endif void view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, - int flags, Calendar *calendar, time_t start, time_t end) + int flags, GList *events, time_t start, time_t end) { int font_height; int x, y, max_y; @@ -62,7 +63,7 @@ view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRect struct tm tm_start, tm_end; char *str; iCalObject *ico; - GList *the_list, *list; + GList *list; gdk_gc_set_clip_rectangle (gc, area); @@ -70,9 +71,7 @@ view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRect max_y = area->y + area->height - font_height * ((flags & VIEW_UTILS_DRAW_SPLIT) ? 2 : 1); - the_list = calendar_get_events_in_range (calendar, start, end, calendar_compare_by_dtstart); - - for (y = area->y, list = the_list; (y < max_y) && list; y += font_height, list = list->next) { + for (y = area->y, list = events; (y < max_y) && list; y += font_height, list = list->next) { ico = list->data; tm_start = *localtime (&ico->dtstart); @@ -106,8 +105,5 @@ view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRect y + widget->style->font->ascent, str); } - - g_list_free (the_list); - gdk_gc_set_clip_rectangle (gc, NULL); } diff --git a/calendar/gui/view-utils.h b/calendar/gui/view-utils.h index c334bbd6d3..ea6e885eb0 100644 --- a/calendar/gui/view-utils.h +++ b/calendar/gui/view-utils.h @@ -20,7 +20,7 @@ enum { void view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, - int flags, Calendar *calendar, time_t start, time_t end); + int flags, GList *events, time_t start, time_t end); #endif -- cgit v1.2.3