Diff of /trunk/src/main.c

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

src/main.c revision 1 by harbaum, Tue Dec 9 20:06:06 2008 UTC trunk/src/main.c revision 15 by harbaum, Tue Dec 16 17:00:20 2008 UTC
# Line 23  Line 23 
23  #include "appdata.h"  #include "appdata.h"
24    
25  /* disable/enable main screen control dependant on presence of open project */  /* disable/enable main screen control dependant on presence of open project */
26  static void main_project_loaded(appdata_t *appdata) {  static void main_ui_enable(appdata_t *appdata) {
27    gboolean loaded = (appdata->project != NULL);    gboolean project_valid = (appdata->project != NULL);
28      gboolean osm_valid = (appdata->osm != NULL);
29    
30    /* cancel any action in progress */    /* cancel any action in progress */
31    if(GTK_WIDGET_FLAGS(appdata->iconbar->cancel) & GTK_SENSITIVE)    if(GTK_WIDGET_FLAGS(appdata->iconbar->cancel) & GTK_SENSITIVE)
# Line 33  static void main_project_loaded(appdata_ Line 34  static void main_project_loaded(appdata_
34    /* ---- set project name as window title ----- */    /* ---- set project name as window title ----- */
35  #ifndef USE_HILDON  #ifndef USE_HILDON
36    char *str = NULL;    char *str = NULL;
37    if(loaded)    if(project_valid)
38      str = g_strdup_printf("OSM2Go - %s", appdata->project->name);      str = g_strdup_printf("OSM2Go - %s", appdata->project->name);
39    else    else
40      str = g_strdup_printf("OSM2Go");      str = g_strdup_printf("OSM2Go");
# Line 41  static void main_project_loaded(appdata_ Line 42  static void main_project_loaded(appdata_
42    gtk_window_set_title(GTK_WINDOW(appdata->window), str);    gtk_window_set_title(GTK_WINDOW(appdata->window), str);
43    g_free(str);    g_free(str);
44  #else  #else
45    if(loaded)    if(project_valid)
46      gtk_window_set_title(GTK_WINDOW(appdata->window), appdata->project->name);      gtk_window_set_title(GTK_WINDOW(appdata->window), appdata->project->name);
47    else    else
48      gtk_window_set_title(GTK_WINDOW(appdata->window), "");      gtk_window_set_title(GTK_WINDOW(appdata->window), "");
49  #endif  #endif
50    
51    if(appdata->iconbar && appdata->iconbar->toolbar)    if(appdata->iconbar && appdata->iconbar->toolbar)
52      gtk_widget_set_sensitive(appdata->iconbar->toolbar, loaded);      gtk_widget_set_sensitive(appdata->iconbar->toolbar, osm_valid);
53    
54    /* disable all menu entries related to map */    /* disable all menu entries related to map */
55    gtk_widget_set_sensitive(appdata->track.menu_track, loaded);    gtk_widget_set_sensitive(appdata->menu_osm, project_valid);
56    gtk_widget_set_sensitive(appdata->menu_view, loaded);    gtk_widget_set_sensitive(appdata->menu_item_osm_upload, osm_valid);
57    gtk_widget_set_sensitive(appdata->menu_osm, loaded);    gtk_widget_set_sensitive(appdata->menu_item_osm_diff, osm_valid);
58    gtk_widget_set_sensitive(appdata->menu_wms, loaded);    gtk_widget_set_sensitive(appdata->menu_item_osm_undo_changes, osm_valid);
59    gtk_widget_set_sensitive(appdata->menu_map, loaded);    gtk_widget_set_sensitive(appdata->track.menu_track, osm_valid);
60    gtk_widget_set_sensitive(appdata->menu_item_project_close, loaded);    gtk_widget_set_sensitive(appdata->menu_view, osm_valid);
61      gtk_widget_set_sensitive(appdata->menu_wms, osm_valid);
62      gtk_widget_set_sensitive(appdata->menu_map, osm_valid);
63      gtk_widget_set_sensitive(appdata->menu_item_project_close, project_valid);
64    
65    if(!loaded)    if(!project_valid)
66      statusbar_set(appdata, _("Plase load or create a project"), FALSE);      statusbar_set(appdata, _("Please load or create a project"), FALSE);
67  }  }
68    
69  /******************** begin of menu *********************/  /******************** begin of menu *********************/
# Line 81  static void Line 85  static void
85  cb_menu_project_open(GtkWidget *window, gpointer data) {  cb_menu_project_open(GtkWidget *window, gpointer data) {
86    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
87    project_load(appdata, NULL);    project_load(appdata, NULL);
88    main_project_loaded(appdata);    main_ui_enable(appdata);
89  }  }
90    
91  static void  static void
92  cb_menu_project_close(GtkWidget *window, gpointer data) {  cb_menu_project_close(GtkWidget *window, gpointer data) {
93    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
94    project_close(appdata);    project_close(appdata);
95    main_project_loaded(appdata);    main_ui_enable(appdata);
96  }  }
97    
98  static void  static void
# Line 136  cb_menu_upload(GtkWidget *window, gpoint Line 140  cb_menu_upload(GtkWidget *window, gpoint
140  static void  static void
141  cb_menu_download(GtkWidget *window, gpointer data) {  cb_menu_download(GtkWidget *window, gpointer data) {
142    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
143    if(!appdata->osm || !appdata->project) return;    if(!appdata->project) return;
144    
145    /* redraw the entire map by destroying all map items and redrawing them */    /* if we have valid osm data loaded: save state first */
146    diff_save(appdata->project, appdata->osm);    if(appdata->osm) {
147    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);      /* redraw the entire map by destroying all map items and redrawing them */
148    osm_free(&appdata->icon, appdata->osm);      diff_save(appdata->project, appdata->osm);
149        map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
150        osm_free(&appdata->icon, appdata->osm);
151    
152        appdata->osm = NULL;
153      }
154    
155    // download    // download
156    osm_download(GTK_WIDGET(appdata->window), appdata->project);    if(osm_download(GTK_WIDGET(appdata->window), appdata->project)) {
157        appdata->osm = osm_parse(appdata->project->osm);
158        diff_restore(appdata, appdata->project, appdata->osm);
159        map_paint(appdata);
160      }
161    
162    appdata->osm = osm_parse(appdata->project->osm);    main_ui_enable(appdata);
   diff_restore(appdata, appdata->project, appdata->osm);  
   map_paint(appdata);  
163  }  }
164    
165  static void  static void
# Line 183  cb_menu_map_show_all(GtkWidget *window, Line 194  cb_menu_map_show_all(GtkWidget *window,
194    map_show_all(appdata);    map_show_all(appdata);
195  }  }
196    
197  /* ----------------------------------------------- ----------- */  /* ---------------------------------------------------------- */
198    
199  #if 1  // mainly for testing  #if 1  // mainly for testing
200  static void  static void
# Line 209  cb_menu_redraw(GtkWidget *window, gpoint Line 220  cb_menu_redraw(GtkWidget *window, gpoint
220  #endif  #endif
221    
222  static void  static void
223  cb_menu_style(GtkWidget *window, gpointer data) {  cb_menu_style(GtkWidget *widget, gpointer data) {
224    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
225    
226    style_select(GTK_WIDGET(appdata->window), appdata);    style_select(GTK_WIDGET(appdata->window), appdata);
227  }  }
228    
229  static void  static void
230  cb_menu_save_changes(GtkWidget *window, gpointer data) {  cb_menu_map_no_icons(GtkWidget *widget, gpointer data) {
231      appdata_t *appdata = (appdata_t*)data;
232    
233      map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
234      appdata->settings->no_icons =
235        gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
236      map_paint(appdata);
237    }
238    
239    static void
240    cb_menu_save_changes(GtkWidget *widget, gpointer data) {
241    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
242    
243    diff_save(appdata->project, appdata->osm);    diff_save(appdata->project, appdata->osm);
244    statusbar_set(appdata, _("Saved all changes in projects diff file"), FALSE);    statusbar_set(appdata, _("Saved all changes made "
245                               "to this project so far"), FALSE);
246    }
247    
248    static void
249    cb_menu_undo_changes(GtkWidget *widget, gpointer data) {
250      appdata_t *appdata = (appdata_t*)data;
251    
252      if(!yes_no_f(GTK_WIDGET(appdata->window), NULL, 0, 0,
253                   _("Undo all changes?"),
254                   _("Do you really want to undo all your changes "
255                     "not uploaded so far? This cannot be undone!")))
256        return;
257    
258      map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
259      osm_free(&appdata->icon, appdata->osm);
260      diff_remove(appdata->project);
261      appdata->osm = osm_parse(appdata->project->osm);
262      map_paint(appdata);
263    
264      statusbar_set(appdata, _("All changes made "
265                               "so far have been reset"), FALSE);
266  }  }
267    
268    
# Line 373  void menu_create(appdata_t *appdata) { Line 415  void menu_create(appdata_t *appdata) {
415    
416    item = gtk_menu_item_new_with_label( _("Zoom -") );    item = gtk_menu_item_new_with_label( _("Zoom -") );
417    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
418    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata);    g_signal_connect(item, "activate",
419                       GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata);
420    
421    /* -------------------- OSM submenu -------------------- */    /* -------------------- OSM submenu -------------------- */
422    
# Line 382  void menu_create(appdata_t *appdata) { Line 425  void menu_create(appdata_t *appdata) {
425    submenu = gtk_menu_new();    submenu = gtk_menu_new();
426    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
427    
428    item = gtk_menu_item_new_with_label( _("Upload...") );    appdata->menu_item_osm_upload = item =
429        gtk_menu_item_new_with_label( _("Upload...") );
430    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
431    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata);    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata);
432    
433    item = gtk_menu_item_new_with_label( _("Download...") );    item = gtk_menu_item_new_with_label( _("Download...") );
434    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
435    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_download), appdata);    g_signal_connect(item, "activate",
436                       GTK_SIGNAL_FUNC(cb_menu_download), appdata);
437    
438    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
439    
440    item = gtk_menu_item_new_with_label( _("Save diff file") );    appdata->menu_item_osm_diff = item =
441        gtk_menu_item_new_with_label( _("Save diff file") );
442    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
443    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),
444                     appdata);                     appdata);
445    
446      appdata->menu_item_osm_undo_changes = item =
447        gtk_menu_item_new_with_label( _("Undo all changes...") );
448      gtk_menu_append(GTK_MENU_SHELL(submenu), item);
449      g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_undo_changes),
450                       appdata);
451    
452    /* -------------------- wms submenu -------------------- */    /* -------------------- wms submenu -------------------- */
453    
454    appdata->menu_wms = item = gtk_menu_item_new_with_label( _("WMS") );    appdata->menu_wms = item = gtk_menu_item_new_with_label( _("WMS") );
# Line 456  void menu_create(appdata_t *appdata) { Line 508  void menu_create(appdata_t *appdata) {
508    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
509    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata);    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_style), appdata);
510    
511      gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
512    
513      appdata->menu_item_map_no_icons =
514        item = gtk_check_menu_item_new_with_label( _("No Icons") );
515      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item),
516                                     appdata->settings->no_icons);
517      gtk_menu_append(GTK_MENU_SHELL(submenu), item);
518      g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_map_no_icons),
519                       appdata);
520    
521    /* -------------------- track submenu -------------------- */    /* -------------------- track submenu -------------------- */
522    
523    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 674  int main(int argc, char *argv[]) { Line 736  int main(int argc, char *argv[]) {
736    g_signal_connect(G_OBJECT(appdata.window), "key_press_event",    g_signal_connect(G_OBJECT(appdata.window), "key_press_event",
737                     G_CALLBACK(on_window_key_press), &appdata);                     G_CALLBACK(on_window_key_press), &appdata);
738    
   appdata.vbox = gtk_vbox_new(FALSE,0);  
   menu_create(&appdata);  
   
739    /* user specific init */    /* user specific init */
740    appdata.settings = settings_load();    appdata.settings = settings_load();
741    
742      appdata.vbox = gtk_vbox_new(FALSE,0);
743      menu_create(&appdata);
744    
745    /* ----------------------- setup main window ---------------- */    /* ----------------------- setup main window ---------------- */
746    
747    GtkWidget *hbox = gtk_hbox_new(FALSE,0);    GtkWidget *hbox = gtk_hbox_new(FALSE,0);
# Line 716  int main(int argc, char *argv[]) { Line 778  int main(int argc, char *argv[]) {
778    if(appdata.settings->project)    if(appdata.settings->project)
779      project_load(&appdata, appdata.settings->project);      project_load(&appdata, appdata.settings->project);
780    
781    main_project_loaded(&appdata);    main_ui_enable(&appdata);
782    
783    /* ------------ jump into main loop ---------------- */    /* ------------ jump into main loop ---------------- */
784    
785    gtk_main();    gtk_main();
786    
787      puts("gtk_main() left");
788    
789    track_save(appdata.project, appdata.track.track);    track_save(appdata.project, appdata.track.track);
790    
791    /* save a diff if there are dirty entries */    /* save a diff if there are dirty entries */

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