Diff of /trunk/src/main.c

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

revision 3 by achadwick, Wed Dec 10 00:00:05 2008 UTC revision 4 by harbaum, Wed Dec 10 19:50:17 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->track.menu_track, osm_valid);
59    gtk_widget_set_sensitive(appdata->menu_map, loaded);    gtk_widget_set_sensitive(appdata->menu_view, osm_valid);
60    gtk_widget_set_sensitive(appdata->menu_item_project_close, loaded);    gtk_widget_set_sensitive(appdata->menu_wms, osm_valid);
61      gtk_widget_set_sensitive(appdata->menu_map, osm_valid);
62      gtk_widget_set_sensitive(appdata->menu_item_project_close, project_valid);
63    
64    if(!loaded)    if(!project_valid)
65      statusbar_set(appdata, _("Plase load or create a project"), FALSE);      statusbar_set(appdata, _("Plase load or create a project"), FALSE);
66  }  }
67    
# Line 81  static void Line 84  static void
84  cb_menu_project_open(GtkWidget *window, gpointer data) {  cb_menu_project_open(GtkWidget *window, gpointer data) {
85    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
86    project_load(appdata, NULL);    project_load(appdata, NULL);
87    main_project_loaded(appdata);    main_ui_enable(appdata);
88  }  }
89    
90  static void  static void
91  cb_menu_project_close(GtkWidget *window, gpointer data) {  cb_menu_project_close(GtkWidget *window, gpointer data) {
92    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
93    project_close(appdata);    project_close(appdata);
94    main_project_loaded(appdata);    main_ui_enable(appdata);
95  }  }
96    
97  static void  static void
# Line 136  cb_menu_upload(GtkWidget *window, gpoint Line 139  cb_menu_upload(GtkWidget *window, gpoint
139  static void  static void
140  cb_menu_download(GtkWidget *window, gpointer data) {  cb_menu_download(GtkWidget *window, gpointer data) {
141    appdata_t *appdata = (appdata_t*)data;    appdata_t *appdata = (appdata_t*)data;
142    if(!appdata->osm || !appdata->project) return;    if(!appdata->project) return;
143    
144    /* redraw the entire map by destroying all map items and redrawing them */    /* if we have valid osm data loaded: save state first */
145    diff_save(appdata->project, appdata->osm);    if(appdata->osm) {
146    map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);      /* redraw the entire map by destroying all map items and redrawing them */
147    osm_free(&appdata->icon, appdata->osm);      diff_save(appdata->project, appdata->osm);
148        map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
149        osm_free(&appdata->icon, appdata->osm);
150    
151        appdata->osm = NULL;
152      }
153    
154    // download    // download
155    osm_download(GTK_WIDGET(appdata->window), appdata->project);    if(osm_download(GTK_WIDGET(appdata->window), appdata->project)) {
156        appdata->osm = osm_parse(appdata->project->osm);
157        diff_restore(appdata, appdata->project, appdata->osm);
158        map_paint(appdata);
159      }
160    
161    appdata->osm = osm_parse(appdata->project->osm);    main_ui_enable(appdata);
   diff_restore(appdata, appdata->project, appdata->osm);  
   map_paint(appdata);  
162  }  }
163    
164  static void  static void
# Line 373  void menu_create(appdata_t *appdata) { Line 383  void menu_create(appdata_t *appdata) {
383    
384    item = gtk_menu_item_new_with_label( _("Zoom -") );    item = gtk_menu_item_new_with_label( _("Zoom -") );
385    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
386    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata);    g_signal_connect(item, "activate",
387                       GTK_SIGNAL_FUNC(cb_menu_zoomout), appdata);
388    
389    /* -------------------- OSM submenu -------------------- */    /* -------------------- OSM submenu -------------------- */
390    
# Line 382  void menu_create(appdata_t *appdata) { Line 393  void menu_create(appdata_t *appdata) {
393    submenu = gtk_menu_new();    submenu = gtk_menu_new();
394    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
395    
396    item = gtk_menu_item_new_with_label( _("Upload...") );    appdata->menu_item_osm_upload = item =
397        gtk_menu_item_new_with_label( _("Upload...") );
398    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
399    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata);    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_upload), appdata);
400    
401    item = gtk_menu_item_new_with_label( _("Download...") );    item = gtk_menu_item_new_with_label( _("Download...") );
402    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
403    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_download), appdata);    g_signal_connect(item, "activate",
404                       GTK_SIGNAL_FUNC(cb_menu_download), appdata);
405    
406    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());    gtk_menu_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new());
407    
408    item = gtk_menu_item_new_with_label( _("Save diff file") );    appdata->menu_item_osm_diff = item =
409        gtk_menu_item_new_with_label( _("Save diff file") );
410    gtk_menu_append(GTK_MENU_SHELL(submenu), item);    gtk_menu_append(GTK_MENU_SHELL(submenu), item);
411    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),    g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(cb_menu_save_changes),
412                     appdata);                     appdata);
# Line 716  int main(int argc, char *argv[]) { Line 730  int main(int argc, char *argv[]) {
730    if(appdata.settings->project)    if(appdata.settings->project)
731      project_load(&appdata, appdata.settings->project);      project_load(&appdata, appdata.settings->project);
732    
733    main_project_loaded(&appdata);    main_ui_enable(&appdata);
734    
735    /* ------------ jump into main loop ---------------- */    /* ------------ jump into main loop ---------------- */
736    
737    gtk_main();    gtk_main();
738    
739      puts("gtk_main() left");
740    
741    track_save(appdata.project, appdata.track.track);    track_save(appdata.project, appdata.track.track);
742    
743    /* save a diff if there are dirty entries */    /* save a diff if there are dirty entries */

Legend:
Removed from v.3  
changed lines
  Added in v.4