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

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

revision 38 by harbaum, Sun Aug 2 18:37:10 2009 UTC revision 40 by harbaum, Sun Aug 2 19:05:24 2009 UTC
# Line 29  typedef struct { Line 29  typedef struct {
29    GtkWidget *widget;    GtkWidget *widget;
30    GtkWidget *zoomin, *zoomout, *gps;    GtkWidget *zoomin, *zoomout, *gps;
31    gint handler_id;    gint handler_id;
32    #if MAEMO_VERSION_MAJOR == 5
33      GtkWidget *old_view;
34    #endif
35  } map_context_t;  } map_context_t;
36    
37  #define PROXY_KEY  "/system/http_proxy/"  #define PROXY_KEY  "/system/http_proxy/"
# Line 152  static void map_draw_cachelist(GtkWidget Line 155  static void map_draw_cachelist(GtkWidget
155    }    }
156  }  }
157    
158    #if MAEMO_VERSION_MAJOR == 5
159    static void on_window_destroy(GtkWidget *widget, map_context_t *context) {
160      printf("destroy map view\n");
161    
162      /* restore cur_view */
163      context->appdata->cur_view = context->old_view;
164    
165      gtk_timeout_remove(context->handler_id);
166      g_free(context);
167    }
168    #endif
169    
170  void map(appdata_t *appdata) {  void map(appdata_t *appdata) {
171    map_context_t context;    map_context_t *context = g_new0(map_context_t, 1);
172    context.appdata = appdata;    context->appdata = appdata;
173    
174    #if MAEMO_VERSION_MAJOR == 5
175      GtkWidget *window = hildon_stackable_window_new();
176      gtk_window_set_title(GTK_WINDOW(window), _("Map"));
177    #else
178    GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Map"),    GtkWidget *dialog = gtk_dialog_new_with_buttons(_("Map"),
179                            GTK_WINDOW(appdata->window),                            GTK_WINDOW(appdata->window),
180                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
# Line 167  void map(appdata_t *appdata) { Line 186  void map(appdata_t *appdata) {
186  #else  #else
187    gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 480);    gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 480);
188  #endif  #endif
189    #endif
190    
191    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
192    
193    char *path = g_strdup_printf("%s/map/", appdata->image_path);    char *path = g_strdup_printf("%s/map/", appdata->image_path);
194    const char *proxy = get_proxy_uri(appdata);    const char *proxy = get_proxy_uri(appdata);
195    
196    context.widget = g_object_new(OSM_TYPE_GPS_MAP,    context->widget = g_object_new(OSM_TYPE_GPS_MAP,
197                  "repo-uri", MAP_SOURCE_OPENSTREETMAP,                  "repo-uri", MAP_SOURCE_OPENSTREETMAP,
198                  "tile-cache", path,                  "tile-cache", path,
199                  proxy?"proxy-uri":NULL, proxy,                  proxy?"proxy-uri":NULL, proxy,
# Line 184  void map(appdata_t *appdata) { Line 204  void map(appdata_t *appdata) {
204    /* draw all geocaches */    /* draw all geocaches */
205    gpx_t *gpx = appdata->gpx;    gpx_t *gpx = appdata->gpx;
206    while(gpx) {    while(gpx) {
207      map_draw_cachelist(context.widget, gpx->cache);      map_draw_cachelist(context->widget, gpx->cache);
208      gpx = gpx->next;      gpx = gpx->next;
209    }    }
210    
211    g_signal_connect(G_OBJECT(context.widget), "configure-event",    g_signal_connect(G_OBJECT(context->widget), "configure-event",
212                     G_CALLBACK(on_map_configure), &context);                     G_CALLBACK(on_map_configure), context);
213  #if 0  #if 0
214    g_signal_connect(G_OBJECT(context.widget), "button-release-event",    g_signal_connect(G_OBJECT(context->widget), "button-release-event",
215                     G_CALLBACK(on_map_button_release_event), &context);                     G_CALLBACK(on_map_button_release_event), context);
216  #endif  #endif
217    
218    gtk_box_pack_start_defaults(GTK_BOX(hbox), context.widget);    gtk_box_pack_start_defaults(GTK_BOX(hbox), context->widget);
219    /* zoom button box */    /* zoom button box */
220    GtkWidget *vbox = gtk_vbox_new(FALSE,0);    GtkWidget *vbox = gtk_vbox_new(FALSE,0);
221    
222    context.zoomin =    context->zoomin =
223      map_add_button(GTK_STOCK_ZOOM_IN, G_CALLBACK(cb_map_zoomin),      map_add_button(GTK_STOCK_ZOOM_IN, G_CALLBACK(cb_map_zoomin),
224                     &context, _("Zoom in"));                     context, _("Zoom in"));
225    gtk_box_pack_start(GTK_BOX(vbox), context.zoomin, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), context->zoomin, FALSE, FALSE, 0);
226    
227    context.zoomout =    context->zoomout =
228      map_add_button(GTK_STOCK_ZOOM_OUT, G_CALLBACK(cb_map_zoomout),      map_add_button(GTK_STOCK_ZOOM_OUT, G_CALLBACK(cb_map_zoomout),
229                     &context, _("Zoom out"));                     context, _("Zoom out"));
230    gtk_box_pack_start(GTK_BOX(vbox), context.zoomout, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), context->zoomout, FALSE, FALSE, 0);
231    
232    context.gps =    context->gps =
233      map_add_button(GTK_STOCK_HOME, G_CALLBACK(cb_map_gps),      map_add_button(GTK_STOCK_HOME, G_CALLBACK(cb_map_gps),
234                     &context, _("Jump to GPS position"));                     context, _("Jump to GPS position"));
235    gtk_widget_set_sensitive(context.gps, FALSE);    gtk_widget_set_sensitive(context->gps, FALSE);
236    /* install handler for timed updates of the gps button */    /* install handler for timed updates of the gps button */
237    context.handler_id = gtk_timeout_add(1000, map_gps_update, &context);    context->handler_id = gtk_timeout_add(1000, map_gps_update, context);
238    gtk_box_pack_start(GTK_BOX(vbox), context.gps, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), context->gps, FALSE, FALSE, 0);
239    
240    gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
241    
242    #if MAEMO_VERSION_MAJOR == 5
243      /* prevent some of the main screen things */
244      context->old_view = appdata->cur_view;
245      appdata->cur_view = NULL;
246    
247      g_signal_connect(G_OBJECT(window), "destroy",
248                       G_CALLBACK(on_window_destroy), context);
249    
250      gtk_container_add(GTK_CONTAINER(window), hbox);
251      gtk_widget_show_all(GTK_WIDGET(window));
252    
253    #else
254    gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox);    gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox);
   
255    gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);    gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
   
256    gtk_widget_show_all(dialog);    gtk_widget_show_all(dialog);
   
257    gtk_dialog_run(GTK_DIALOG(dialog));    gtk_dialog_run(GTK_DIALOG(dialog));
258      gtk_timeout_remove(context->handler_id);
   gtk_timeout_remove(context.handler_id);  
   
259    gtk_widget_destroy(dialog);    gtk_widget_destroy(dialog);
260      g_free(context);
261    #endif
262  }  }

Legend:
Removed from v.38  
changed lines
  Added in v.40