diff options
author | Damon Chaplin <damon@ximian.com> | 2001-05-29 10:18:00 +0800 |
---|---|---|
committer | Damon Chaplin <damon@src.gnome.org> | 2001-05-29 10:18:00 +0800 |
commit | ff523035dd2592f6ff25955e7f1e379f24640347 (patch) | |
tree | 586ea9b1c89726cace082c42865d82d61db5eb19 /calendar/cal-util | |
parent | aaa9b9bb2ab4ff9fba2a6b9cc68fbc7fdfaa71bc (diff) | |
download | gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar.gz gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar.bz2 gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar.lz gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar.xz gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.tar.zst gsoc2013-evolution-ff523035dd2592f6ff25955e7f1e379f24640347.zip |
new files to contain layout code split off from EDayView an EWeekView, so
2001-05-28 Damon Chaplin <damon@ximian.com>
* gui/e-week-view-layout.[hc]:
* gui/e-day-view-layout.[hc]: new files to contain layout code split
off from EDayView an EWeekView, so we can use it for printing.
* gui/print.c: rewritten to use the same layout code as the EDayView
and EWeekView widgets.
* gui/gnome-cal.c (gnome_calendar_get_task_pad_cal_client): added
function so we can get the CalClient used for the TaskPad for printing.
* gui/Makefile.am (evolution_calendar_SOURCES): added
e-day-view-layout.[hc] amd e-week-view-layout.[hc].
* cal-util/timeutil.c (time_week_begin):
(time_week_end): added week_start_day argument.
* cal-util/cal-recur.c: added comments describing problems in it.
svn path=/trunk/; revision=10037
Diffstat (limited to 'calendar/cal-util')
-rw-r--r-- | calendar/cal-util/cal-recur.c | 18 | ||||
-rw-r--r-- | calendar/cal-util/timeutil.c | 26 | ||||
-rw-r--r-- | calendar/cal-util/timeutil.h | 41 |
3 files changed, 54 insertions, 31 deletions
diff --git a/calendar/cal-util/cal-recur.c b/calendar/cal-util/cal-recur.c index 0b4f114484..8ac6f771d9 100644 --- a/calendar/cal-util/cal-recur.c +++ b/calendar/cal-util/cal-recur.c @@ -84,6 +84,24 @@ * the BYSETPOS property is used to select which of the occurrences are * finally output. If BYSETPOS is not specified then all the occurrences are * output. + * + * + * FIXME: I think there are a few errors in this code: + * + * 1) I'm not sure it should be generating events in parallel like it says + * above. That needs to be checked. + * + * 2) I didn't think about timezone changes when implementing this. I just + * assumed all the occurrences of the event would be in local time. + * But when clocks go back or forwards due to daylight-saving time, some + * special handling may be needed, especially for the shorter frequencies. + * e.g. for a MINUTELY frequency it should probably iterate over all the + * minutes before and after clocks go back (i.e. some may be the same local + * time but have different UTC offsets). For longer frequencies, if an + * occurrence lands on the overlapping or non-existant time when clocks + * go back/forward, then it may need to choose which of the times to use + * or move the time forward or something. I'm not sure this is clear in the + * spec. */ /* Define this for some debugging output. */ diff --git a/calendar/cal-util/timeutil.c b/calendar/cal-util/timeutil.c index 764ec5d078..7bb4c904ec 100644 --- a/calendar/cal-util/timeutil.c +++ b/calendar/cal-util/timeutil.c @@ -319,35 +319,45 @@ time_month_end (time_t t) return mktime (&tm); } +/* Returns the start of the week. week_start_day should use the same values + as mktime(), i.e. 0 (Sun) to 6 (Sat). */ time_t -time_week_begin (time_t t) +time_week_begin (time_t t, int week_start_day) { struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ + int offset; tm = *localtime (&t); + + /* Calculate the current offset from the week start day. */ + offset = (tm.tm_wday + 7 - week_start_day) % 7; + tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; - tm.tm_mday -= tm.tm_wday; + tm.tm_mday -= offset; tm.tm_isdst = -1; return mktime (&tm); } +/* Returns the end of the week. week_start_day should use the same values + as mktime(), i.e. 0 (Sun) to 6 (Sat). */ time_t -time_week_end (time_t t) +time_week_end (time_t t, int week_start_day) { struct tm tm; - - /* FIXME: make it take week_starts_on_monday into account */ + int offset; tm = *localtime (&t); + + /* Calculate the current offset from the week start day. */ + offset = (tm.tm_wday + 7 - week_start_day) % 7; + tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; - tm.tm_mday += 7 - tm.tm_wday; + tm.tm_mday += 7 - offset; tm.tm_isdst = -1; return mktime (&tm); diff --git a/calendar/cal-util/timeutil.h b/calendar/cal-util/timeutil.h index 04f1ca4867..3907a11b8c 100644 --- a/calendar/cal-util/timeutil.h +++ b/calendar/cal-util/timeutil.h @@ -26,41 +26,36 @@ time_t time_add_month (time_t time, int months); time_t time_add_year (time_t time, int years); -/* Returns the number of days in the specified month. Years are full years (starting from year 1). - * Months are in [0, 11]. - */ +/* Returns the number of days in the specified month. Years are full years + (starting from year 1). Months are in [0, 11]. */ int time_days_in_month (int year, int month); -/* Converts the specified date to a time_t at the start of the specified day. Years are full years - * (starting from year 1). Months are in [0, 11]. Days are 1-based. - */ +/* Converts the specified date to a time_t at the start of the specified day. + Years are full years (starting from year 1). Months are in [0, 11]. + Days are 1-based. */ time_t time_from_day (int year, int month, int day); -/* For the functions below, time ranges are considered to contain the start time, but not the end - * time. - */ +/* For the functions below, time ranges are considered to contain the start + time, but not the end time. */ -/* These two functions take a time value and return the beginning or end of the corresponding year, - * respectively. - */ +/* These two functions take a time value and return the beginning or end of + the corresponding year, respectively. */ time_t time_year_begin (time_t t); time_t time_year_end (time_t t); -/* These two functions take a time value and return the beginning or end of the corresponding month, - * respectively. - */ +/* These two functions take a time value and return the beginning or end of + the corresponding month, respectively. */ time_t time_month_begin (time_t t); time_t time_month_end (time_t t); -/* These functions take a time value and return the beginning or end of the corresponding week, - * respectively. This takes into account the global week_starts_on_monday flag. - */ -time_t time_week_begin (time_t t); -time_t time_week_end (time_t t); +/* These functions take a time value and return the beginning or end of the + corresponding week, respectively. week_start_day should use the same values + as mktime(), i.e. 0 (Sun) to 6 (Sat). */ +time_t time_week_begin (time_t t, int week_start_day); +time_t time_week_end (time_t t, int week_start_day); -/* These two functions take a time value and return the beginning or end of the corresponding day, - * respectively. - */ +/* These two functions take a time value and return the beginning or end of + the corresponding day, respectively. */ time_t time_day_begin (time_t t); time_t time_day_end (time_t t); |