From 4517358debc8bcd761a469e901bae160704deaf2 Mon Sep 17 00:00:00 2001 From: Damon Chaplin <damon@ximian.com> Date: Thu, 14 Jun 2001 06:00:21 +0000 Subject: new dialog for setting the time zone. 2001-06-14 Damon Chaplin <damon@ximian.com> * gui/dialogs/e-timezone-dialog.[hc]: * gui/dialogs/e-timezone-dialog.glade: new dialog for setting the time zone. * gui/dialogs/Makefile.am: added timezone dialog files. * idl/evolution-calendar.idl: added CalTimezoneInfo struct and seq, and getBuiltinTimezoneInfo method. * pcs/cal.c (impl_Cal_get_builtin_timezone_info): implemented method. (cal_class_init): added method to epv. * cal-client/cal-client.c (struct CalClientPrivate): added timezone_info array to contain cached info on builtin timezone city names and coordinates. (cal_client_get_builtin_timezone_info): new function to get the info about builtin timezones. * cal-client/cal-client.h: added CalTimezoneInfo struct, to contain the city names and coords of the builtin timezones. svn path=/trunk/; revision=10223 --- calendar/pcs/cal.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'calendar/pcs/cal.c') diff --git a/calendar/pcs/cal.c b/calendar/pcs/cal.c index 6eb951133b..a76d3a7f38 100644 --- a/calendar/pcs/cal.c +++ b/calendar/pcs/cal.c @@ -21,6 +21,7 @@ */ #include <config.h> +#include <ical.h> #include "cal.h" #include "query.h" @@ -377,6 +378,46 @@ impl_Cal_get_query (PortableServer_Servant servant, return query_copy; } +/* Cal::getBuiltinTimezoneInfo method */ +static GNOME_Evolution_Calendar_CalTimezoneInfoSeq * +impl_Cal_get_builtin_timezone_info (PortableServer_Servant servant, + CORBA_Environment *ev) +{ + GNOME_Evolution_Calendar_CalTimezoneInfoSeq *seq; + icalarray *zones; + icaltimezone *zone; + int n, i; + char *location; + + zones = icaltimezone_get_builtin_timezones (); + if (!zones) { + CORBA_exception_set (ev, CORBA_USER_EXCEPTION, + ex_GNOME_Evolution_Calendar_Cal_NotFound, + NULL); + return CORBA_OBJECT_NIL; + } + + n = zones->num_elements; + + seq = GNOME_Evolution_Calendar_CalTimezoneInfoSeq__alloc (); + CORBA_sequence_set_release (seq, TRUE); + seq->_length = n; + seq->_buffer = CORBA_sequence_GNOME_Evolution_Calendar_CalTimezoneInfo_allocbuf (n); + + /* Fill the sequence */ + + for (i = 0; i < n; i++) { + zone = icalarray_element_at (zones, i); + location = icaltimezone_get_location (zone); + + seq->_buffer[i].location = CORBA_string_dup (location); + seq->_buffer[i].latitude = icaltimezone_get_latitude (zone); + seq->_buffer[i].longitude = icaltimezone_get_longitude (zone); + } + + return seq; +} + /** * cal_construct: * @cal: A calendar client interface. @@ -507,6 +548,7 @@ cal_class_init (CalClass *klass) epv->updateObject = impl_Cal_update_object; epv->removeObject = impl_Cal_remove_object; epv->getQuery = impl_Cal_get_query; + epv->getBuiltinTimezoneInfo = impl_Cal_get_builtin_timezone_info; } -- cgit v1.2.3