--- trunk/src/map-tool.c 2009/07/28 13:21:40 33 +++ trunk/src/map-tool.c 2009/07/30 08:29:52 35 @@ -18,19 +18,23 @@ */ #include "gpxview.h" +#include // for isnan #ifdef ENABLE_OSM_GPS_MAP #include "osm-gps-map.h" #endif typedef struct { + appdata_t *appdata; GtkWidget *widget; GtkWidget *zoomin, *zoomout, *gps; gint handler_id; } map_context_t; -static const char *get_proxy_uri(void) { - static char proxy_buffer[64]; +#define PROXY_KEY "/system/http_proxy/" + +static const char *get_proxy_uri(appdata_t *appdata) { + static char proxy_buffer[64] = ""; /* use environment settings if preset */ const char *proxy = g_getenv("http_proxy"); @@ -39,20 +43,30 @@ return proxy; } -#if 0 - /* otherwise try settings */ - if(!settings || !settings->proxy || - !settings->proxy->host) return NULL; - - snprintf(proxy_buffer, sizeof(proxy_buffer), "%s%s:%u", - strncmp(settings->proxy->host, "http://", 7)?"http://":"", - settings->proxy->host, settings->proxy->port); - - proxy_buffer[sizeof(proxy_buffer)-1] = 0; - printf("gconf_proxy: %s\n", proxy_buffer); -#endif + /* ------------- get proxy settings -------------------- */ + if(gconf_client_get_bool(appdata->gconf_client, + PROXY_KEY "use_http_proxy", NULL)) { + + /* we can savely ignore things like "ignore_hosts" since we */ + /* are pretty sure not inside the net of one of our map renderers */ + /* (unless the user works at google :-) */ + + /* get basic settings */ + char *host = + gconf_client_get_string(appdata->gconf_client, PROXY_KEY "host", NULL); + if(host) { + int port = + gconf_client_get_int(appdata->gconf_client, PROXY_KEY "port", NULL); + + snprintf(proxy_buffer, sizeof(proxy_buffer), + "http://%s:%u", host, port); + + g_free(host); + } + return proxy_buffer; + } - return proxy_buffer; + return NULL; } static void map_zoom(map_context_t *context, int step) { @@ -80,9 +94,15 @@ static gboolean cb_map_gps(GtkButton *button, map_context_t *context) { - - // osm_gps_map_set_center(OSM_GPS_MAP(context->widget), - // DEG2RAD(pos.lat), DEG2RAD(pos.lon)); + pos_t *refpos = get_pos(context->appdata); + if(refpos && !isnan(refpos->lat) && !isnan(refpos->lon)) { + osm_gps_map_set_mapcenter(OSM_GPS_MAP(context->widget), + refpos->lat, refpos->lon, 14); + } else { + /* no coordinates given: display the entire world */ + osm_gps_map_set_mapcenter(OSM_GPS_MAP(context->widget), + 0.0, 0.0, 1); + } return FALSE; } @@ -103,14 +123,27 @@ static gboolean map_gps_update(gpointer data) { map_context_t *context = (map_context_t*)data; - // gtk_widget_set_sensitive(context->map.gps, gps_fix); + pos_t *refpos = get_pos(context->appdata); + gboolean ok = (refpos!= NULL) && !isnan(refpos->lat) && !isnan(refpos->lon); + + /* get reference position and go there */ + gtk_widget_set_sensitive(context->gps, ok); return TRUE; } +static gboolean on_map_configure(GtkWidget *widget, + GdkEventConfigure *event, + map_context_t *context) { + + cb_map_gps(NULL, context); + + return FALSE; +} void map(appdata_t *appdata) { map_context_t context; + context.appdata = appdata; GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Map"), GTK_WINDOW(appdata->window), @@ -127,15 +160,18 @@ GtkWidget *hbox = gtk_hbox_new(FALSE, 0); char *path = g_strdup_printf("%s/map/", appdata->image_path); + const char *proxy = get_proxy_uri(appdata); context.widget = g_object_new(OSM_TYPE_GPS_MAP, "repo-uri", MAP_SOURCE_OPENSTREETMAP, - "proxy-uri", get_proxy_uri(), "tile-cache", path, + proxy?"proxy-uri":NULL, proxy, NULL); g_free(path); + g_signal_connect(G_OBJECT(context.widget), "configure-event", + G_CALLBACK(on_map_configure), &context); #if 0 g_signal_connect(G_OBJECT(context.widget), "button-release-event", G_CALLBACK(on_map_button_release_event), &context); @@ -173,6 +209,7 @@ gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_timeout_remove(context.handler_id); + gtk_widget_destroy(dialog); - }