aboutsummaryrefslogblamecommitdiffstats
path: root/calendar/view-utils.c
blob: 6b317fd70e1f19d4e5e89a3bbb4f39f91da2c1a8 (plain) (tree)
















































































































                                                                                                      
/* 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);
}