aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/contacts-map/geo-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/contacts-map/geo-utils.c')
-rw-r--r--plugins/contacts-map/geo-utils.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/plugins/contacts-map/geo-utils.c b/plugins/contacts-map/geo-utils.c
new file mode 100644
index 0000000000..3f7473cab4
--- /dev/null
+++ b/plugins/contacts-map/geo-utils.c
@@ -0,0 +1,102 @@
+#include "geo-utils.h"
+
+static gboolean is_clutter_initialized = FALSE;
+
+void
+get_min_max (gdouble *min_lat, gdouble *max_lat,
+ gdouble *min_lng, gdouble *max_lng,
+ gdouble lat, gdouble lng)
+{
+ if (lat < *min_lat)
+ *min_lat = lat;
+ else if (lat > *max_lat)
+ *max_lat = lat;
+
+ if (lng < *min_lng)
+ *min_lng = lng;
+ else if (lng > *max_lng)
+ *max_lng = lng;
+}
+
+void
+add_marker (ChamplainLayer *layer, gdouble lat, gdouble lng, EContact *contact)
+{
+ ClutterActor *marker;
+
+ gchar *contact_name = e_contact_get (contact, E_CONTACT_FULL_NAME);
+ marker = champlain_marker_new_with_text (contact_name, "Serif 8", NULL, NULL);
+ g_free (contact_name);
+
+ champlain_marker_set_use_markup (CHAMPLAIN_MARKER (marker), FALSE);
+ champlain_base_marker_set_position (CHAMPLAIN_BASE_MARKER (marker), lat, lng);
+
+ champlain_layer_add_marker (layer, CHAMPLAIN_BASE_MARKER(marker));
+}
+
+GeoclueGeocode*
+get_geocoder (void)
+{
+ GeoclueGeocode *geocoder = NULL;
+
+ /* Create new GeoclueGeocode */
+ geocoder = geoclue_geocode_new ("org.freedesktop.Geoclue.Providers.Yahoo",
+ "/org/freedesktop/Geoclue/Providers/Yahoo");
+
+ return geocoder;
+}
+
+GHashTable *
+get_geoclue_from_address (const EContactAddress* addr)
+{
+ GHashTable *address = geoclue_address_details_new ();
+
+ g_hash_table_insert (address, g_strdup (GEOCLUE_ADDRESS_KEY_POSTALCODE), g_strdup ((*addr).code));
+ g_hash_table_insert (address, g_strdup (GEOCLUE_ADDRESS_KEY_COUNTRY), g_strdup ((*addr).country));
+ g_hash_table_insert (address, g_strdup (GEOCLUE_ADDRESS_KEY_LOCALITY), g_strdup ((*addr).locality));
+ g_hash_table_insert (address, g_strdup (GEOCLUE_ADDRESS_KEY_STREET), g_strdup ((*addr).street));
+
+ return address;
+}
+
+void
+init_map (ChamplainView **view, GtkWidget **widget)
+{
+ if (!is_clutter_initialized) {
+ gtk_clutter_init (NULL, NULL);
+ is_clutter_initialized = TRUE;
+ }
+
+ *widget = gtk_champlain_embed_new ();
+ *view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (*widget));
+
+ champlain_view_set_show_license (*view, FALSE);
+
+ g_object_set (G_OBJECT (*view), "scroll-mode", CHAMPLAIN_SCROLL_MODE_KINETIC,
+ "zoom-level", 9, NULL);
+}
+
+void
+create_map_window (GtkWidget *map_widget, const gchar *title)
+{
+ GtkWidget *window, *viewport;
+
+ /* create the main, top level, window */
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ /* give the window a 10px wide border */
+ gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+ /* give it the title */
+ gtk_window_set_title (GTK_WINDOW (window), title );
+
+ gtk_widget_set_size_request (map_widget, 300, 300);
+
+ viewport = gtk_frame_new (NULL);
+ gtk_container_add (GTK_CONTAINER (viewport), map_widget);
+
+ /* and insert it into the main window */
+ gtk_container_add (GTK_CONTAINER (window), viewport);
+
+ /* make sure that everything, window and label, are visible */
+ gtk_widget_show_all (window);
+}