Diff of /trunk/src/main.c

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

revision 15 by harbaum, Tue Dec 16 17:00:20 2008 UTC revision 36 by achadwick, Wed Dec 31 18:07:27 2008 UTC
# Line 19  Line 19 
19  #include <string.h>  #include <string.h>
20    
21  #include <curl/curl.h>  #include <curl/curl.h>
22    #include <gdk/gdkkeysyms.h>
23    
24  #include "appdata.h"  #include "appdata.h"
25    #include "banner.h"
26    
27  /* disable/enable main screen control dependant on presence of open project */  /* disable/enable main screen control dependant on presence of open project */
28  static void main_ui_enable(appdata_t *appdata) {  static void main_ui_enable(appdata_t *appdata) {
# Line 75  static struct { Line 77  static struct {
77    char *title;    char *title;
78    GCallback c_handler;    GCallback c_handler;
79  } menu[] = {  } menu[] = {
80    { MENU_SUB, "OSM", NULL },    { MENU_SUB, "_OSM", NULL },
81    
82    { MENU_END,  NULL, NULL },    { MENU_END,  NULL, NULL },
83  };  };
84  #endif  #endif
# Line 105  cb_menu_about(GtkWidget *window, gpointe Line 107  cb_menu_about(GtkWidget *window, gpointe
107    
108    const gchar *authors[] = {    const gchar *authors[] = {
109      "Till Harbaum <till@harbaum.org>",      "Till Harbaum <till@harbaum.org>",
110      "Andrew Chadwick",      "Andrew Chadwick <andrewc-osm2go@piffle.org>",
111      NULL };      NULL };
112    
113    gtk_about_dialog_set_authors(about, authors);    gtk_about_dialog_set_authors(about, authors);
# Line 154  cb_menu_download(GtkWidget *window, gpoi Line 156  cb_menu_download(GtkWidget *window, gpoi
156    
157    // download    // download
158    if(osm_download(GTK_WIDGET(appdata->window), appdata->project)) {    if(osm_download(GTK_WIDGET(appdata->window), appdata->project)) {
159        banner_busy_start(appdata, 1, "Redrawing...");
160      appdata->osm = osm_parse(appdata->project->osm);      appdata->osm = osm_parse(appdata->project->osm);
161      diff_restore(appdata, appdata->project, appdata->osm);      diff_restore(appdata, appdata->project, appdata->osm);
162      map_paint(appdata);      map_paint(appdata);
163        banner_busy_stop(appdata); //"Redrawing..."
164    }    }
165    
166    main_ui_enable(appdata);    main_ui_enable(appdata);
# Line 202  cb_menu_redraw(GtkWidget *window, gpoint Line 206  cb_menu_redraw(GtkWidget *window, gpoint
206    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
207    
208    /* redraw the entire map by destroying all map items and redrawing them */    /* redraw the entire map by destroying all map items and redrawing them */
209      banner_busy_start(appdata, 1, "Redrawing...");
210    track_save(appdata->project, appdata->track.track);    track_save(appdata->project, appdata->track.track);
211    diff_save(appdata->project, appdata->osm);    diff_save(appdata->project, appdata->osm);
212    map_clear(appdata, MAP_LAYER_ALL);    map_clear(appdata, MAP_LAYER_ALL);
# Line 216  cb_menu_redraw(GtkWidget *window, gpoint Line 221  cb_menu_redraw(GtkWidget *window, gpoint
221      map_track_draw(appdata->map, appdata->track.track);      map_track_draw(appdata->map, appdata->track.track);
222    
223    wms_load(appdata);    wms_load(appdata);
224      banner_busy_stop(appdata); //"Redrawing..."
225  }  }
226  #endif  #endif
227    
# Line 230  static void Line 236  static void
236  cb_menu_map_no_icons(GtkWidget *widget, gpointer data) {  cb_menu_map_no_icons(GtkWidget *widget, gpointer data) {
237    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
238    
239      banner_busy_start(appdata, 1, "Redrawing...");
240    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
241    appdata->settings->no_icons =    appdata->settings->no_icons =
242      gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));      gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
243    map_paint(appdata);    map_paint(appdata);
244      banner_busy_stop(appdata); //"Redrawing..."
245    }
246    
247    static void
248    cb_menu_map_no_antialias(GtkWidget *widget, gpointer data) {
249      appdata_t *appdata = (appdata_t*)data;
250    
251      banner_busy_start(appdata, 1, "Redrawing...");
252      map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
253      appdata->settings->no_antialias =
254        gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
255      map_paint(appdata);
256      banner_busy_stop(appdata); //"Redrawing..."
257  }  }
258    
259  static void  static void
# Line 241  cb_menu_save_changes(GtkWidget *widget, Line 261  cb_menu_save_changes(GtkWidget *widget,
261    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
262    
263    diff_save(appdata->project, appdata->osm);    diff_save(appdata->project, appdata->osm);
264    statusbar_set(appdata, _("Saved all changes made "    banner_show_info(appdata, _("Saved local changes"));
                            "to this project so far"), FALSE);  
265  }  }
266    
267  static void  static void
# Line 250  cb_menu_undo_changes(GtkWidget *widget, Line 269  cb_menu_undo_changes(GtkWidget *widget,
269    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
270    
271    if(!yes_no_f(GTK_WIDGET(appdata->window), NULL, 0, 0,    if(!yes_no_f(GTK_WIDGET(appdata->window), NULL, 0, 0,
272                 _("Undo all changes?"),                 _("Discard local changes?"),
273                 _("Do you really want to undo all your changes "                 _("Throw away all the changes you've not uploaded yet? This can't be undone.")))
                  "not uploaded so far? This cannot be undone!")))  
274      return;      return;
275    
276      banner_busy_start(appdata, 1, _("Redrawing..."));
277    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
278    osm_free(&appdata->icon, appdata->osm);    osm_free(&appdata->icon, appdata->osm);
279    diff_remove(appdata->project);    diff_remove(appdata->project);
280    appdata->osm = osm_parse(appdata->project->osm);    appdata->osm = osm_parse(appdata->project->osm);
281    map_paint(appdata);    map_paint(appdata);
282      banner_busy_stop(appdata);  //"Redrawing..."
283    
284    statusbar_set(appdata, _("All changes made "    banner_show_info(appdata, _("Discarded local changes"));
                            "so far have been reset"), FALSE);  
285  }  }
286    
   
 #ifdef USE_HILDON  
287  static void  static void
288  cb_menu_fullscreen(GtkWidget *widget, gpointer data) {  cb_menu_fullscreen(GtkWidget *widget, gpointer data) {
289    appdata_t *appdata = (appdata_t *)data;    appdata_t *appdata = (appdata_t *)data;
# Line 276  cb_menu_fullscreen(GtkWidget *widget, gp Line 293  cb_menu_fullscreen(GtkWidget *widget, gp
293    else    else
294      gtk_window_unfullscreen(GTK_WINDOW(appdata->window));      gtk_window_unfullscreen(GTK_WINDOW(appdata->window));
295  }  }
 #endif  
296    
297  static void  static void
298  cb_menu_zoomin(GtkWidget *widget, appdata_t *appdata) {  cb_menu_zoomin(GtkWidget *widget, appdata_t *appdata) {
# Line 401  void menu_create(appdata_t *appdata) { Line 417  void menu_create(appdata_t *appdata) {
417    submenu = gtk_menu_new();    submenu = gtk_menu_new();
418    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
419    
420  #ifdef USE_HILDON    appdata->menu_item_view_fullscreen =
   appdata->fullscreen_menu_item =  
421      item = gtk_check_menu_item_new_with_label( _("Fullscreen") );      item = gtk_check_menu_item_new_with_label( _("Fullscreen") );
422    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
423    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_fullscreen),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_fullscreen),
424                     appdata);                     appdata);
 #endif  
425    
426    item = gtk_menu_item_new_with_label( _("Zoom +" ));    item = gtk_menu_item_new_with_label( _("Zoom +" ));
427    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
# Line 438  void menu_create(appdata_t *appdata) { Line 452  void menu_create(appdata_t *appdata) {
452    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
453    
454    appdata->menu_item_osm_diff = item =    appdata->menu_item_osm_diff = item =
455      gtk_menu_item_new_with_label( _("Save diff file") );      gtk_menu_item_new_with_label( _("Save local changes") );
456    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
457    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),
458                     appdata);                     appdata);
459    
460    appdata->menu_item_osm_undo_changes = item =    appdata->menu_item_osm_undo_changes = item =
461      gtk_menu_item_new_with_label( _("Undo all changes...") );      gtk_menu_item_new_with_label( _("Discard local changes...") );
462    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
463    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_undo_changes),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_undo_changes),
464                     appdata);                     appdata);
# Line 498  void menu_create(appdata_t *appdata) { Line 512  void menu_create(appdata_t *appdata) {
512    
513    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
514    
   item = gtk_menu_item_new_with_label( _("Redraw") );  
   gtk_menu_append(GTK_MENU_SHELL(submenu), item);  
   g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_redraw), appdata);  
   
   gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());  
   
515    item = gtk_menu_item_new_with_label( _("Style...") );    item = gtk_menu_item_new_with_label( _("Style...") );
516    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
517    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata);    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata);
518    
519    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
520    
521      /* switches mainly intended for testing/debugging */
522      item = gtk_menu_item_new_with_label( _("Redraw") );
523      gtk_menu_append(GTK_MENU_SHELL(submenu), item);
524      g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_redraw), appdata);
525    
526    appdata->menu_item_map_no_icons =    appdata->menu_item_map_no_icons =
527      item = gtk_check_menu_item_new_with_label( _("No Icons") );      item = gtk_check_menu_item_new_with_label( _("No Icons") );
528    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),
# Line 518  void menu_create(appdata_t *appdata) { Line 531  void menu_create(appdata_t *appdata) {
531    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_map_no_icons),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_map_no_icons),
532                     appdata);                     appdata);
533    
534      appdata->menu_item_map_no_antialias =
535        item = gtk_check_menu_item_new_with_label( _("No Antialias") );
536      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),
537                                     appdata->settings->no_antialias);
538      gtk_menu_append(GTK_MENU_SHELL(submenu), item);
539      g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_map_no_antialias),
540                       appdata);
541    
542    /* -------------------- track submenu -------------------- */    /* -------------------- track submenu -------------------- */
543    
544    appdata->track.menu_track = item = gtk_menu_item_new_with_label(_("Track"));    appdata->track.menu_track = item = gtk_menu_item_new_with_label(_("Track"));
# Line 642  gboolean on_window_key_press(GtkWidget * Line 663  gboolean on_window_key_press(GtkWidget *
663    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
664    int handled = FALSE;    int handled = FALSE;
665    
   //  printf("key event %d\n", event->keyval);  
   
666    // the map handles some keys on its own ...    // the map handles some keys on its own ...
667    switch(event->keyval) {    switch(event->keyval) {
 #ifdef USE_HILDON  
668    
669  #if 0  #ifdef USE_HILDON
670    case HILDON_HARDKEY_SELECT:      /* this is in fact a mapping to GDK_F6 */
     handled = TRUE;  
     break;  
 #endif  
   
671    case HILDON_HARDKEY_FULLSCREEN:    case HILDON_HARDKEY_FULLSCREEN:
672      {  #else
673        gboolean fullscreen = !gtk_check_menu_item_get_active(    case GDK_F11:
674                 GTK_CHECK_MENU_ITEM(appdata->fullscreen_menu_item));  #endif
675        if(!gtk_check_menu_item_get_active(
676                 GTK_CHECK_MENU_ITEM(appdata->menu_item_view_fullscreen))) {
677          gtk_window_fullscreen(GTK_WINDOW(appdata->window));
678        gtk_check_menu_item_set_active(        gtk_check_menu_item_set_active(
679                 GTK_CHECK_MENU_ITEM(appdata->fullscreen_menu_item), fullscreen);               GTK_CHECK_MENU_ITEM(appdata->menu_item_view_fullscreen), TRUE);
680          } else {
       if(fullscreen)  
         gtk_window_fullscreen(GTK_WINDOW(appdata->window));  
       else  
681          gtk_window_unfullscreen(GTK_WINDOW(appdata->window));          gtk_window_unfullscreen(GTK_WINDOW(appdata->window));
682            gtk_check_menu_item_set_active(
683        handled = TRUE;               GTK_CHECK_MENU_ITEM(appdata->menu_item_view_fullscreen), FALSE);
684      }        }
685    
686        handled = TRUE;
687      break;      break;
 #endif  
688    }    }
689    
690    /* forward unprocessed key presses to map */    /* forward unprocessed key presses to map */
# Line 750  int main(int argc, char *argv[]) { Line 765  int main(int argc, char *argv[]) {
765  #ifdef PORTRAIT  #ifdef PORTRAIT
766    gtk_box_pack_start(GTK_BOX(vbox), iconbar_new(&appdata), FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), iconbar_new(&appdata), FALSE, FALSE, 0);
767  #endif  #endif
768    gtk_box_pack_start(GTK_BOX(vbox), map_new(&appdata), TRUE, TRUE, 0);  
769      /* generate main map view */
770      GtkWidget *map = map_new(&appdata);
771      if(!map) {
772        cleanup(&appdata);
773        return -1;
774      }
775    
776      gtk_box_pack_start(GTK_BOX(vbox), map, TRUE, TRUE, 0);
777    gtk_box_pack_start(GTK_BOX(vbox), statusbar_new(&appdata), FALSE, FALSE, 0);    gtk_box_pack_start(GTK_BOX(vbox), statusbar_new(&appdata), FALSE, FALSE, 0);
778    
779  #ifndef PORTRAIT  #ifndef PORTRAIT

Legend:
Removed from v.15  
changed lines
  Added in v.36