aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/timeutil.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@nuclecu.unam.mx>1998-08-30 09:29:19 +0800
committerArturo Espinosa <unammx@src.gnome.org>1998-08-30 09:29:19 +0800
commite0d99122ab17d9bf356cf793b41aec6b6d6016b1 (patch)
treeb2f202ce6ea0b927a8fa4929034c84af223ef782 /calendar/timeutil.c
parent9b6991077bd564348e9dd229ca523bdaa8239ed1 (diff)
downloadgsoc2013-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.c74
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);
}