diff options
author | Federico Mena Quintero <federico@nuclecu.unam.mx> | 1998-08-30 09:29:19 +0800 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1998-08-30 09:29:19 +0800 |
commit | e0d99122ab17d9bf356cf793b41aec6b6d6016b1 (patch) | |
tree | b2f202ce6ea0b927a8fa4929034c84af223ef782 /calendar/timeutil.c | |
parent | 9b6991077bd564348e9dd229ca523bdaa8239ed1 (diff) | |
download | gsoc2013-evolution-e0d99122ab17d9bf356cf793b41aec6b6d6016b1.tar.gz gsoc2013-evolution-e0d99122ab17d9bf356cf793b41aec6b6d6016b1.tar.zst gsoc2013-evolution-e0d99122ab17d9bf356cf793b41aec6b6d6016b1.zip |
Centralized marking of month items. We now have a little utility function
Centralized marking of month items. We now have a little utility
function to colorify the days in a month item that have events
scheduled for them. This is currently used by the year view and
the go-to dialog. Fixed buglets here and there.
1998-08-29 Federico Mena Quintero <federico@nuclecu.unam.mx>
* mark.[ch]: New files with utility functions to mark calendars
with their events.
* mark.c (mark_month_item): New public function to mark a month
item with events.
(unmark_month_item): New public function to unmark all the days in
a month item to their default appearance.
* year-view.c (year_view_set): Use the new unmark_month_item() and
mark_month_item() to mark the months with events.
* goto.c (update): New function that updates the calendar in the
Go-to dialog by marking the days.
* timeutil.c (time_year_begin): Modified to take a time_t value.
(time_year_end): Likewise.
(time_month_begin): Actually implemented this function, which was
in the header file but not here.
(time_days_in_month): New public function that returns the number
of days in a month.
* Makefile.am (gnomecal_SOURCES): Added mark.[ch] to the sources.
* year-view.c (unmark_days): Use unmark_month_item().
* gncal-full-day.c (gncal_full_day_destroy): Fixed crash when
destroying the full day view. The full day's destroy method is
unusual in that it destroys the list of child widgets itself, as
it does not have a remove method, so it needs to reset the list to
NULL.
svn path=/trunk/; revision=351
Diffstat (limited to 'calendar/timeutil.c')
-rw-r--r-- | calendar/timeutil.c | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/calendar/timeutil.c b/calendar/timeutil.c index 670a29609b..5d4008e75d 100644 --- a/calendar/timeutil.c +++ b/calendar/timeutil.c @@ -171,6 +171,30 @@ time_day_hour (time_t t, int hour) return mktime (&tm); } +/* Number of days in a month, for normal and leap years */ +static const int days_in_month[2][12] = { + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } +}; + +/* Returns whether the specified year is a leap year */ +static int +is_leap_year (int year) +{ + if (year <= 1752) + return !(year % 4); + else + return (!(year % 4) && (year % 100)) || !(year % 400); +} + +int +time_days_in_month (int year, int month) +{ + g_return_val_if_fail (year >= 1900, 0); + g_return_val_if_fail ((month >= 0) && (month < 12), 0); + + return days_in_month [is_leap_year (year)][month]; +} time_t time_from_day (int year, int month, int day) @@ -213,36 +237,60 @@ time_end_of_day (time_t t) } time_t -time_year_begin (int year) +time_year_begin (time_t t) { struct tm tm; - time_t retval; - + + tm = *localtime (&t); tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; - tm.tm_year = year - 1900; tm.tm_mon = 0; tm.tm_mday = 1; - tm.tm_isdst = -1; - - retval = mktime (&tm); - return retval; + + return mktime (&tm); } time_t -time_year_end (int year) +time_year_end (time_t t) { struct tm tm; - + + tm = *localtime (&t); tm.tm_hour = 23; tm.tm_min = 59; tm.tm_sec = 59; - tm.tm_year = year - 1900; tm.tm_mon = 11; tm.tm_mday = 31; - tm.tm_isdst = -1; - + + return mktime (&tm); +} + +time_t +time_month_begin (time_t t) +{ + struct tm tm; + + tm = *localtime (&t); + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_mday = 1; + + return mktime (&tm); +} + +time_t +time_month_end (time_t t) +{ + struct tm tm; + + tm = *localtime (&t); + tm.tm_hour = 23; + tm.tm_min = 59; + tm.tm_sec = 59; + tm.tm_mday = time_days_in_month (tm.tm_year + 1900, tm.tm_mon); + return mktime (&tm); } |