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