diff options
-rw-r--r-- | calendar/gui/view-utils.c | 113 | ||||
-rw-r--r-- | calendar/gui/view-utils.h | 26 | ||||
-rw-r--r-- | calendar/view-utils.c | 113 | ||||
-rw-r--r-- | calendar/view-utils.h | 26 |
4 files changed, 278 insertions, 0 deletions
diff --git a/calendar/gui/view-utils.c b/calendar/gui/view-utils.c new file mode 100644 index 0000000000..6b317fd70e --- /dev/null +++ b/calendar/gui/view-utils.c @@ -0,0 +1,113 @@ +/* Miscellaneous utility functions for the calendar view widgets + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena <federico@nuclecu.unam.mx> + */ + +#include <string.h> +#include "view-utils.h" + + +/* FIXME: remove this function later */ + +static GList * +calendar_get_events_in_range (Calendar *cal, time_t start, time_t end, GCompareFunc sort_func) +{ + static iCalObject objs[24]; + static int ready = 0; + int i; + GList *list; + + if (!ready) { + struct tm tm; + time_t tim; + + ready = 1; + + for (i = 0; i < 24; i++) { + tim = time (NULL); + tm = *localtime (&tim); + + tm.tm_hour = i; + tm.tm_min = 0; + tm.tm_sec = 0; + objs[i].dtstart = mktime (&tm); + + tm.tm_hour = i; + tm.tm_min = 30; + tm.tm_sec = 0; + objs[i].dtend = mktime (&tm); + + objs[i].summary = "Ir a chingar a tu madre"; + } + } + + list = NULL; + + for (i = 0; i < 8; i++) + list = g_list_append (list, &objs[i]); + + return list; +} + +void +view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, + int flags, Calendar *calendar, time_t start, time_t end) +{ + int font_height; + int x, y, max_y; + char buf[512]; + int len; + struct tm tm_start, tm_end; + char *str; + iCalObject *ico; + GList *the_list, *list; + + gdk_gc_set_clip_rectangle (gc, area); + + font_height = widget->style->font->ascent + widget->style->font->descent; + + 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) { + ico = list->data; + + tm_start = *localtime (&ico->dtstart); + tm_end = *localtime (&ico->dtend); + str = ico->summary; + + if (flags & VIEW_UTILS_DRAW_END) { + strftime (buf, 512, "%X - ", &tm_start); + len = strlen (buf); + strftime (buf + len, 512 - len, "%X ", &tm_end); + } else + strftime (buf, 512, "%X ", &tm_start); + + gdk_draw_string (window, + widget->style->font, + gc, + area->x, + y + widget->style->font->ascent, + buf); + + if (flags & VIEW_UTILS_DRAW_SPLIT) { + y += font_height; + x = widget->style->font->ascent; /* some indentation */ + } else + x = gdk_string_width (widget->style->font, buf); + + gdk_draw_string (window, + widget->style->font, + gc, + x, + 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 new file mode 100644 index 0000000000..c334bbd6d3 --- /dev/null +++ b/calendar/gui/view-utils.h @@ -0,0 +1,26 @@ +/* Miscellaneous utility functions for the calendar view widgets + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena <federico@nuclecu.unam.mx> + */ + +#ifndef VIEW_UTILS_H +#define VIEW_UTILS_H + + +#include <gtk/gtk.h> +#include "calendar.h" + + +enum { + VIEW_UTILS_DRAW_END = 1 << 0, + VIEW_UTILS_DRAW_SPLIT = 1 << 1 +}; + + +void view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, + int flags, Calendar *calendar, time_t start, time_t end); + + +#endif diff --git a/calendar/view-utils.c b/calendar/view-utils.c new file mode 100644 index 0000000000..6b317fd70e --- /dev/null +++ b/calendar/view-utils.c @@ -0,0 +1,113 @@ +/* Miscellaneous utility functions for the calendar view widgets + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena <federico@nuclecu.unam.mx> + */ + +#include <string.h> +#include "view-utils.h" + + +/* FIXME: remove this function later */ + +static GList * +calendar_get_events_in_range (Calendar *cal, time_t start, time_t end, GCompareFunc sort_func) +{ + static iCalObject objs[24]; + static int ready = 0; + int i; + GList *list; + + if (!ready) { + struct tm tm; + time_t tim; + + ready = 1; + + for (i = 0; i < 24; i++) { + tim = time (NULL); + tm = *localtime (&tim); + + tm.tm_hour = i; + tm.tm_min = 0; + tm.tm_sec = 0; + objs[i].dtstart = mktime (&tm); + + tm.tm_hour = i; + tm.tm_min = 30; + tm.tm_sec = 0; + objs[i].dtend = mktime (&tm); + + objs[i].summary = "Ir a chingar a tu madre"; + } + } + + list = NULL; + + for (i = 0; i < 8; i++) + list = g_list_append (list, &objs[i]); + + return list; +} + +void +view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, + int flags, Calendar *calendar, time_t start, time_t end) +{ + int font_height; + int x, y, max_y; + char buf[512]; + int len; + struct tm tm_start, tm_end; + char *str; + iCalObject *ico; + GList *the_list, *list; + + gdk_gc_set_clip_rectangle (gc, area); + + font_height = widget->style->font->ascent + widget->style->font->descent; + + 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) { + ico = list->data; + + tm_start = *localtime (&ico->dtstart); + tm_end = *localtime (&ico->dtend); + str = ico->summary; + + if (flags & VIEW_UTILS_DRAW_END) { + strftime (buf, 512, "%X - ", &tm_start); + len = strlen (buf); + strftime (buf + len, 512 - len, "%X ", &tm_end); + } else + strftime (buf, 512, "%X ", &tm_start); + + gdk_draw_string (window, + widget->style->font, + gc, + area->x, + y + widget->style->font->ascent, + buf); + + if (flags & VIEW_UTILS_DRAW_SPLIT) { + y += font_height; + x = widget->style->font->ascent; /* some indentation */ + } else + x = gdk_string_width (widget->style->font, buf); + + gdk_draw_string (window, + widget->style->font, + gc, + x, + y + widget->style->font->ascent, + str); + } + + g_list_free (the_list); + + gdk_gc_set_clip_rectangle (gc, NULL); +} diff --git a/calendar/view-utils.h b/calendar/view-utils.h new file mode 100644 index 0000000000..c334bbd6d3 --- /dev/null +++ b/calendar/view-utils.h @@ -0,0 +1,26 @@ +/* Miscellaneous utility functions for the calendar view widgets + * + * Copyright (C) 1998 The Free Software Foundation + * + * Author: Federico Mena <federico@nuclecu.unam.mx> + */ + +#ifndef VIEW_UTILS_H +#define VIEW_UTILS_H + + +#include <gtk/gtk.h> +#include "calendar.h" + + +enum { + VIEW_UTILS_DRAW_END = 1 << 0, + VIEW_UTILS_DRAW_SPLIT = 1 << 1 +}; + + +void view_utils_draw_events (GtkWidget *widget, GdkWindow *window, GdkGC *gc, GdkRectangle *area, + int flags, Calendar *calendar, time_t start, time_t end); + + +#endif |