Diff of /trunk/src/map-tool.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 54 by harbaum, Wed Aug 12 19:20:00 2009 UTC revision 55 by harbaum, Thu Aug 13 12:01:52 2009 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (C) 2008 Till Harbaum <till@harbaum.org>.   * Copyright (C) 2008-2009 Till Harbaum <till@harbaum.org>.
3   *   *
4   * This file is part of GPXView.   * This file is part of GPXView.
5   *   *
# Line 24  Line 24 
24  #include "osm-gps-map.h"  #include "osm-gps-map.h"
25  #endif  #endif
26    
27    #define MAP_SOURCE  OSM_GPS_MAP_SOURCE_OPENSTREETMAP
28  #define GPS_DEFAULT_ZOOM 13  #define GPS_DEFAULT_ZOOM 13
29    
30  /* equatorial radius in meters */  /* equatorial radius in meters */
# Line 88  static void map_zoom(map_context_t *cont Line 89  static void map_zoom(map_context_t *cont
89    zoom = osm_gps_map_set_zoom(map, zoom+step);    zoom = osm_gps_map_set_zoom(map, zoom+step);
90    
91    /* enable/disable zoom buttons as required */    /* enable/disable zoom buttons as required */
92    gtk_widget_set_sensitive(context->zoomin, zoom<17);    gtk_widget_set_sensitive(context->zoomin,
93    gtk_widget_set_sensitive(context->zoomout, zoom>1);             zoom < osm_gps_map_source_get_max_zoom(MAP_SOURCE));
94      gtk_widget_set_sensitive(context->zoomout,
95               zoom > osm_gps_map_source_get_min_zoom(MAP_SOURCE));
96    
97    /* save new zoom */    /* save new zoom */
98    context->appdata->map.zoom = zoom;    context->appdata->map.zoom = zoom;
# Line 134  static GtkWidget Line 137  static GtkWidget
137    return button;    return button;
138  }  }
139    
140    static int dist2pixel(map_context_t *context, float km, float lat) {
141      return 1000.0*km/osm_gps_map_get_scale(OSM_GPS_MAP(context->widget));
142    }
143    
144  static gboolean map_gps_update(gpointer data) {  static gboolean map_gps_update(gpointer data) {
145    map_context_t *context = (map_context_t*)data;    map_context_t *context = (map_context_t*)data;
146    
# Line 153  static gboolean map_gps_update(gpointer Line 160  static gboolean map_gps_update(gpointer
160    
161        /* get error */        /* get error */
162        float eph = gps_get_eph(context->appdata);        float eph = gps_get_eph(context->appdata);
163        if(!isnan(eph)) {        if(!isnan(eph))
164            radius = dist2pixel(context, eph/1000, refpos->lat);
         /* world at zoom 1 == 512 pixels */  
         gint zoom;  
         g_object_get(OSM_GPS_MAP(context->widget), "zoom", &zoom, NULL);  
         float m_per_pix =  
           cos(DEG2RAD(refpos->lat))*2*M_PI*EQ_RADIUS/(1<<(8+zoom));  
   
         radius = eph/m_per_pix;  
       }  
165      }      }
166    
167      g_object_set(context->widget, "gps-track-highlight-radius", radius, NULL);      g_object_set(context->widget, "gps-track-highlight-radius", radius, NULL);
# Line 222  typedef struct { Line 221  typedef struct {
221    appdata_t *appdata;    appdata_t *appdata;
222    GtkWidget *window;    GtkWidget *window;
223    GMainLoop *loop;    GMainLoop *loop;
224      cache_t *cache;
225  } popup_context_t;  } popup_context_t;
226    
227  /* draw shape */  /* draw shape */
# Line 232  typedef struct { Line 232  typedef struct {
232  #define POPUP_WIDTH  300  #define POPUP_WIDTH  300
233  #define POPUP_HEIGHT 100  #define POPUP_HEIGHT 100
234  #else  #else
235  #define POPUP_WIDTH  350  #define POPUP_WIDTH  360
236  #define POPUP_HEIGHT 120  #define POPUP_HEIGHT 120
237  #endif  #endif
238    
# Line 393  GtkWidget *gtk_label_big_left_new(char * Line 393  GtkWidget *gtk_label_big_left_new(char *
393  }  }
394  #endif  #endif
395    
396    static gboolean
397    on_cache_button_clicked(GtkButton *button, popup_context_t *context) {
398      printf("clicked %s\n", context->cache->name);
399      return FALSE;
400    }
401    
402  void cache_popup(map_context_t *mcontext, cache_t *cache) {  void cache_popup(map_context_t *mcontext, cache_t *cache) {
403    popup_context_t pcontext;    popup_context_t pcontext;
404    pcontext.appdata = mcontext->appdata;    pcontext.appdata = mcontext->appdata;
405      pcontext.cache = cache;
406    
407    pcontext.window = gtk_window_new(GTK_WINDOW_POPUP);    pcontext.window = gtk_window_new(GTK_WINDOW_POPUP);
408    gtk_widget_realize(pcontext.window);    gtk_widget_realize(pcontext.window);
# Line 461  void cache_popup(map_context_t *mcontext Line 468  void cache_popup(map_context_t *mcontext
468    
469    /* --- actual content ---- */    /* --- actual content ---- */
470    GtkWidget *vbox = gtk_vbox_new(FALSE, 0);    GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
471      GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
472    
473    if(cache->id) {    gtk_box_pack_start(GTK_BOX(hbox),
474      GtkWidget *ihbox = gtk_hbox_new(FALSE, 0);                       icon_get_widget(ICON_CACHE_TYPE, cache->type),
475                         FALSE, FALSE, 5);
476      gtk_box_pack_start(GTK_BOX(ihbox),  
477         icon_get_widget(ICON_CACHE_TYPE, cache->type),    if(cache->id)
478         FALSE, FALSE, 5);      gtk_box_pack_start_defaults(GTK_BOX(hbox),
479                                    gtk_label_big_left_new(cache->id));
480    
481      gtk_box_pack_start_defaults(GTK_BOX(ihbox),    GtkWidget *button = gtk_button_new();
482                  gtk_label_big_left_new(cache->id));    gtk_button_set_image(GTK_BUTTON(button), icon_get_widget(ICON_MISC, 12));
483      g_signal_connect(button, "clicked",
484                       G_CALLBACK(on_cache_button_clicked), &pcontext);
485      gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
486    
487      gtk_box_pack_start_defaults(GTK_BOX(vbox), ihbox);    gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox);
   }  
488    
489    if(cache->name) {    if(cache->name) {
490      GtkWidget *label = gtk_label_small_left_new(cache->name);      GtkWidget *label = gtk_label_small_left_new(cache->name);
# Line 481  void cache_popup(map_context_t *mcontext Line 492  void cache_popup(map_context_t *mcontext
492      gtk_box_pack_start_defaults(GTK_BOX(vbox), label);      gtk_box_pack_start_defaults(GTK_BOX(vbox), label);
493    }    }
494    
495    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);    hbox = gtk_hbox_new(FALSE, 0);
496    if(cache->terrain) {    if(cache->terrain) {
497      GtkWidget *ihbox = gtk_hbox_new(FALSE, 0);      GtkWidget *ihbox = gtk_hbox_new(FALSE, 0);
498      gtk_box_pack_start(GTK_BOX(ihbox),      gtk_box_pack_start(GTK_BOX(ihbox),
# Line 576  pos_t coord2pos(coord_t coo) { Line 587  pos_t coord2pos(coord_t coo) {
587    return pos;    return pos;
588  }  }
589    
 static int dist2pixel(map_context_t *context, float km, float lat) {  
   gint zoom;  
   g_object_get(OSM_GPS_MAP(context->widget), "zoom", &zoom, NULL);  
   
   /* world at zoom 1 == 512 pixels */  
   float m_per_pix =  
     cos(DEG2RAD(lat))*2*M_PI*EQ_RADIUS/(1<<(8+zoom));  
   
   return 1000.0*km/m_per_pix;  
 }  
   
590  #define CLICK_FUZZ (24)  #define CLICK_FUZZ (24)
591    
592  static gboolean  static gboolean
# Line 677  void map(appdata_t *appdata) { Line 677  void map(appdata_t *appdata) {
677    const char *proxy = get_proxy_uri(appdata);    const char *proxy = get_proxy_uri(appdata);
678    
679    context->widget = g_object_new(OSM_TYPE_GPS_MAP,    context->widget = g_object_new(OSM_TYPE_GPS_MAP,
680                   "repo-uri",             MAP_SOURCE_OPENSTREETMAP,                   "map-source",               MAP_SOURCE,
681                   "tile-cache",           path,                   "tile-cache",               path,
682                   "auto-center",          FALSE,                   "auto-center",              FALSE,
683                   "record-trip-history",  FALSE,                   "record-trip-history",      FALSE,
684                   "show-trip-history",    FALSE,                   "show-trip-history",        FALSE,
685                     proxy?"proxy-uri":NULL,     proxy,
686                   NULL);                   NULL);
687    
   if(proxy)  
     g_object_set(OSM_GPS_MAP(context->widget), "proxy-uri", proxy, NULL);  
   
688    g_free(path);    g_free(path);
689    
690    char *name = NULL;    char *name = NULL;

Legend:
Removed from v.54  
changed lines
  Added in v.55