--- trunk/src/map-tool.c 2009/07/28 13:21:40 33 +++ trunk/src/map-tool.c 2009/07/29 19:24:15 34 @@ -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,18 +43,27 @@ 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); + /* ------------- 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); - proxy_buffer[sizeof(proxy_buffer)-1] = 0; - printf("gconf_proxy: %s\n", proxy_buffer); -#endif + snprintf(proxy_buffer, sizeof(proxy_buffer), + "http://%s:%u", host, port); + + g_free(host); + } + } return proxy_buffer; } @@ -78,11 +91,17 @@ return FALSE; } +#define DEG2RAD(a) ((a) * M_PI / 180.0) + static gboolean cb_map_gps(GtkButton *button, map_context_t *context) { + pos_t *refpos = get_pos(context->appdata); + if(refpos && !isnan(refpos->lat) && !isnan(refpos->lon)) { + printf("pos is %f %f\n", refpos->lat, refpos->lon); - // osm_gps_map_set_center(OSM_GPS_MAP(context->widget), - // DEG2RAD(pos.lat), DEG2RAD(pos.lon)); + osm_gps_map_set_center(OSM_GPS_MAP(context->widget), + DEG2RAD(refpos->lat), DEG2RAD(refpos->lon)); + } return FALSE; } @@ -103,7 +122,11 @@ 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; } @@ -111,6 +134,7 @@ void map(appdata_t *appdata) { map_context_t context; + context.appdata = appdata; GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Map"), GTK_WINDOW(appdata->window), @@ -130,7 +154,7 @@ context.widget = g_object_new(OSM_TYPE_GPS_MAP, "repo-uri", MAP_SOURCE_OPENSTREETMAP, - "proxy-uri", get_proxy_uri(), + "proxy-uri", get_proxy_uri(appdata), "tile-cache", path, NULL);