--- trunk/src/main.c 2009/02/28 22:31:10 101 +++ trunk/src/main.c 2009/04/13 11:07:20 162 @@ -62,6 +62,7 @@ gtk_widget_set_sensitive(appdata->menu_item_osm_undo, osm_valid); gtk_widget_set_sensitive(appdata->menu_item_osm_save_changes, osm_valid); gtk_widget_set_sensitive(appdata->menu_item_osm_undo_changes, osm_valid); + gtk_widget_set_sensitive(appdata->menu_item_osm_relations, osm_valid); gtk_widget_set_sensitive(appdata->track.menu_track, osm_valid); gtk_widget_set_sensitive(appdata->menu_view, osm_valid); gtk_widget_set_sensitive(appdata->menu_wms, osm_valid); @@ -75,55 +76,53 @@ /******************** begin of menu *********************/ static void -cb_menu_project_open(GtkWidget *window, gpointer data) { +cb_menu_project_open(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; project_load(appdata, NULL); main_ui_enable(appdata); } static void -cb_menu_project_close(GtkWidget *window, gpointer data) { +cb_menu_project_close(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; project_close(appdata); main_ui_enable(appdata); } static void -cb_menu_about(GtkWidget *window, gpointer data) { - GtkAboutDialog *about = GTK_ABOUT_DIALOG(gtk_about_dialog_new()); - - gtk_about_dialog_set_name(about, "OSM2Go"); - gtk_about_dialog_set_version(about, VERSION); - gtk_about_dialog_set_copyright(about, _("Copyright 2008")); +cb_menu_about(GtkMenuItem *item, gpointer data) { + appdata_t *appdata = (appdata_t*)data; const gchar *authors[] = { "Till Harbaum ", "Andrew Chadwick ", NULL }; - gtk_about_dialog_set_authors(about, authors); - - gtk_about_dialog_set_website(about, - _("http://www.harbaum.org/till/maemo")); - - gtk_about_dialog_set_comments(about, - _("Mobile OSM Editor")); + const gchar *artists[] = { + "Andrew Zhilin ", + NULL }; - gtk_widget_show_all(GTK_WIDGET(about)); - gtk_dialog_run(GTK_DIALOG(about)); - gtk_widget_destroy(GTK_WIDGET(about)); + gtk_show_about_dialog(GTK_WINDOW(appdata->window), + "name", "OSM2Go", + "version", VERSION, + "copyright", _("Copyright 2008-2009"), + "authors", authors, + "artists", artists, + "website", _("http://www.harbaum.org/till/maemo"), + "comments", _("Mobile OSM Editor"), + NULL); } void on_window_destroy (GtkWidget *widget, gpointer data); static void -cb_menu_quit(GtkWidget *window, gpointer data) { +cb_menu_quit(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; gtk_widget_destroy(GTK_WIDGET(appdata->window)); } static void -cb_menu_upload(GtkWidget *window, gpointer data) { +cb_menu_upload(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; if(!appdata->osm || !appdata->project) return; @@ -131,7 +130,7 @@ } static void -cb_menu_download(GtkWidget *window, gpointer data) { +cb_menu_download(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; if(!appdata->project) return; @@ -158,19 +157,19 @@ } static void -cb_menu_wms_import(GtkWidget *window, gpointer data) { +cb_menu_wms_import(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; wms_import(appdata); } static void -cb_menu_wms_clear(GtkWidget *window, gpointer data) { +cb_menu_wms_clear(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; wms_remove(appdata); } static void -cb_menu_wms_adjust(GtkWidget *window, gpointer data) { +cb_menu_wms_adjust(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; map_action_set(appdata, MAP_ACTION_BG_ADJUST); } @@ -178,13 +177,13 @@ /* ----------- hide objects for performance reasons ----------- */ static void -cb_menu_map_hide_sel(GtkWidget *window, gpointer data) { +cb_menu_map_hide_sel(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; map_hide_selected(appdata); } static void -cb_menu_map_show_all(GtkWidget *window, gpointer data) { +cb_menu_map_show_all(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; map_show_all(appdata); } @@ -193,7 +192,7 @@ #if 1 // mainly for testing static void -cb_menu_redraw(GtkWidget *window, gpointer data) { +cb_menu_redraw(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; /* redraw the entire map by destroying all map items and redrawing them */ @@ -217,38 +216,36 @@ #endif static void -cb_menu_style(GtkWidget *widget, gpointer data) { +cb_menu_map_no_icons(GtkCheckMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; - style_select(GTK_WIDGET(appdata->window), appdata); + banner_busy_start(appdata, 1, "Redrawing..."); + map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); + appdata->settings->no_icons = gtk_check_menu_item_get_active(item); + map_paint(appdata); + banner_busy_stop(appdata); //"Redrawing..." } static void -cb_menu_map_no_icons(GtkWidget *widget, gpointer data) { +cb_menu_map_no_antialias(GtkCheckMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; banner_busy_start(appdata, 1, "Redrawing..."); map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); - appdata->settings->no_icons = - gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); + appdata->settings->no_antialias = gtk_check_menu_item_get_active(item); map_paint(appdata); banner_busy_stop(appdata); //"Redrawing..." } static void -cb_menu_map_no_antialias(GtkWidget *widget, gpointer data) { +cb_menu_style(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; - banner_busy_start(appdata, 1, "Redrawing..."); - map_clear(appdata, MAP_LAYER_OBJECTS_ONLY); - appdata->settings->no_antialias = - gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); - map_paint(appdata); - banner_busy_stop(appdata); //"Redrawing..." + style_select(GTK_WIDGET(appdata->window), appdata); } static void -cb_menu_undo(GtkWidget *widget, gpointer data) { +cb_menu_undo(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; undo(appdata); @@ -257,7 +254,7 @@ } static void -cb_menu_save_changes(GtkWidget *widget, gpointer data) { +cb_menu_save_changes(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; diff_save(appdata->project, appdata->osm); @@ -265,7 +262,7 @@ } static void -cb_menu_undo_changes(GtkWidget *widget, gpointer data) { +cb_menu_undo_changes(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; if(!yes_no_f(GTK_WIDGET(appdata->window), NULL, 0, 0, @@ -286,22 +283,22 @@ } static void -cb_menu_osm_relations(GtkWidget *widget, gpointer data) { +cb_menu_osm_relations(GtkMenuItem *item, gpointer data) { relation_list((appdata_t*)data); } static void -cb_menu_fullscreen(GtkWidget *widget, gpointer data) { +cb_menu_fullscreen(GtkCheckMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t *)data; - if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))) + if(gtk_check_menu_item_get_active(item)) gtk_window_fullscreen(GTK_WINDOW(appdata->window)); else gtk_window_unfullscreen(GTK_WINDOW(appdata->window)); } static void -cb_menu_zoomin(GtkWidget *widget, appdata_t *appdata) { +cb_menu_zoomin(GtkMenuItem *item, appdata_t *appdata) { if(!appdata || !appdata->map) return; map_set_zoom(appdata->map, appdata->map->state->zoom*ZOOM_FACTOR_MENU, TRUE); @@ -309,7 +306,7 @@ } static void -cb_menu_zoomout(GtkWidget *widget, appdata_t *appdata) { +cb_menu_zoomout(GtkMenuItem *item, appdata_t *appdata) { if(!appdata || !appdata->map) return; map_set_zoom(appdata->map, appdata->map->state->zoom/ZOOM_FACTOR_MENU, TRUE); @@ -317,7 +314,32 @@ } static void -cb_menu_track_import(GtkWidget *window, appdata_t *appdata) { +cb_menu_view_detail_inc(GtkMenuItem *item, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + + printf("detail level increase\n"); + map_detail_increase(appdata->map); +} + +static void +cb_menu_view_detail_normal(GtkMenuItem *item, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + + printf("detail level normal\n"); + map_detail_normal(appdata->map); +} + +static void +cb_menu_view_detail_dec(GtkMenuItem *item, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + + printf("detail level decrease\n"); + map_detail_decrease(appdata->map); +} + +static void +cb_menu_track_import(GtkMenuItem *item, appdata_t *appdata) { + g_assert(appdata->settings); /* open a file selector */ GtkWidget *dialog; @@ -334,30 +356,35 @@ NULL); #endif - /* use path if one is present */ - if(appdata->track.import_path) - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), - appdata->track.import_path); - + if(appdata->settings->track_path) { + if(!g_file_test(appdata->settings->track_path, G_FILE_TEST_EXISTS)) { + char *last_sep = strrchr(appdata->settings->track_path, '/'); + if(last_sep) { + *last_sep = 0; // seperate path from file + + /* the user just created a new document */ + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), + appdata->settings->track_path); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), + last_sep+1); + + /* restore full filename */ + *last_sep = '/'; + } + } else + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), + appdata->settings->track_path); + } + gtk_widget_show_all (GTK_WIDGET(dialog)); if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_FM_OK) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); /* load a track */ - track_do(appdata, TRACK_IMPORT, filename); + appdata->track.track = track_import(appdata, filename); if(appdata->track.track) { - - /* save path if gpx was successfully loaded */ - char *r = strrchr(filename, '/'); - - /* there is a delimiter, use everything left of it as path */ - if(r) { - *r = 0; - if(appdata->track.import_path) g_free(appdata->track.import_path); - appdata->track.import_path = g_strdup(filename); - /* restore path ... just in case ... */ - *r = '/'; - } + if(appdata->settings->track_path) g_free(appdata->settings->track_path); + appdata->settings->track_path = g_strdup(filename); } g_free (filename); } @@ -366,28 +393,99 @@ } static void -cb_menu_track_gps(GtkWidget *window, gpointer data) { +cb_menu_track_enable_gps(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; if(gtk_check_menu_item_get_active( - GTK_CHECK_MENU_ITEM(appdata->track.menu_item_gps))) { - track_do(appdata, TRACK_GPS, NULL); - } else { - track_do(appdata, TRACK_NONE, NULL); - } + GTK_CHECK_MENU_ITEM(appdata->track.menu_item_enable_gps))) { + track_enable_gps(appdata, TRUE); + } else + track_enable_gps(appdata, FALSE); } + static void -cb_menu_track_export(GtkWidget *window, gpointer data) { +cb_menu_track_follow_gps(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; - messagef(GTK_WIDGET(appdata->window), _("NIY"), - _("Track export is not yet supported.")); + + if(gtk_check_menu_item_get_active( + GTK_CHECK_MENU_ITEM(appdata->track.menu_item_follow_gps))) { + appdata->settings->follow_gps = TRUE; + } else + appdata->settings->follow_gps = FALSE; +} + + +static void +cb_menu_track_export(GtkMenuItem *item, appdata_t *appdata) { + g_assert(appdata->settings); + + /* open a file selector */ + GtkWidget *dialog; + +#ifdef USE_HILDON + dialog = hildon_file_chooser_dialog_new(GTK_WINDOW(appdata->window), + GTK_FILE_CHOOSER_ACTION_SAVE); +#else + dialog = gtk_file_chooser_dialog_new(_("Export track file"), + GTK_WINDOW(appdata->window), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); +#endif + + printf("set filename <%s>\n", appdata->settings->track_path); + + if(appdata->settings->track_path) { + if(!g_file_test(appdata->settings->track_path, G_FILE_TEST_EXISTS)) { + char *last_sep = strrchr(appdata->settings->track_path, '/'); + if(last_sep) { + *last_sep = 0; // seperate path from file + + /* the user just created a new document */ + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), + appdata->settings->track_path); + gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), + last_sep+1); + + /* restore full filename */ + *last_sep = '/'; + } + } else + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), + appdata->settings->track_path); + } + + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_FM_OK) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if(filename) { + printf("export to %s\n", filename); + + if(!g_file_test(filename, G_FILE_TEST_EXISTS) || + yes_no_f(dialog, appdata, MISC_AGAIN_ID_EXPORT_OVERWRITE, + MISC_AGAIN_FLAG_DONT_SAVE_NO, + "Overwrite existing file", + "The file already exists. " + "Do you really want to replace it?")) { + if(appdata->settings->track_path) + g_free(appdata->settings->track_path); + appdata->settings->track_path = g_strdup(filename); + + track_export(appdata, filename); + } + } + } + + gtk_widget_destroy (dialog); } + static void -cb_menu_track_clear(GtkWidget *window, gpointer data) { +cb_menu_track_clear(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; - track_do(appdata, TRACK_NONE, NULL); + track_clear(appdata, appdata->track.track); + appdata->track.track = NULL; } @@ -435,6 +533,7 @@ const gchar *accel_path, guint accel_key, // from gdk/gdkkeysyms.h GdkModifierType accel_mods, // e.g. GDK_CONTROL_MASK + gboolean enabled, gboolean is_check, gboolean check_status) { GtkWidget *item = NULL; @@ -490,9 +589,10 @@ #endif gtk_menu_shell_append(GTK_MENU_SHELL(menu_shell), GTK_WIDGET(item)); - if (is_check) { + gtk_widget_set_sensitive(GTK_WIDGET(item), enabled); + if (is_check) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), check_status); - } + g_signal_connect(item, "activate", GTK_SIGNAL_FUNC(activate_cb), appdata); return item; @@ -525,13 +625,13 @@ menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_project_open), _("_Open..."), GTK_STOCK_OPEN, "/Project/Open", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); appdata->menu_item_project_close = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_project_close), _("_Close"), GTK_STOCK_CLOSE, "/Project/Close", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); /* --------------- view menu ------------------- */ @@ -549,19 +649,39 @@ appdata->menu_item_view_fullscreen = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_fullscreen), _("_Fullscreen"), GTK_STOCK_FULLSCREEN, "/View/Fullscreen", - 0, 0, TRUE, FALSE + 0, 0, TRUE, TRUE, FALSE ); menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_zoomin), _("Zoom _in"), GTK_STOCK_ZOOM_IN, "/View/ZoomIn", - GDK_comma, GDK_CONTROL_MASK, FALSE, FALSE + GDK_comma, GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_zoomout), _("Zoom _out"), GTK_STOCK_ZOOM_OUT, "/View/ZoomOut", - GDK_period, GDK_CONTROL_MASK, FALSE, FALSE + GDK_period, GDK_CONTROL_MASK, TRUE, FALSE, FALSE + ); + + gtk_menu_shell_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); + + menu_append_new_item( + appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_view_detail_inc), _("More details"), + NULL, "/View/DetailInc", + GDK_period, GDK_MOD1_MASK, TRUE, FALSE, FALSE + ); + + menu_append_new_item( + appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_view_detail_normal), _("Normal details"), + NULL, "/View/DetailNormal", + 0, 0, TRUE, FALSE, FALSE + ); + + menu_append_new_item( + appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_view_detail_dec), _("Less details"), + NULL, "/View/DetailDec", + GDK_comma, GDK_MOD1_MASK, TRUE, FALSE, FALSE ); /* -------------------- OSM submenu -------------------- */ @@ -575,13 +695,13 @@ appdata->menu_item_osm_upload = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_upload), _("_Upload..."), "upload.16", "/OSM/Upload", - GDK_u, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE + GDK_u, GDK_SHIFT_MASK|GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_download), _("_Download..."), "download.16", "/OSM/Download", - GDK_d, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE + GDK_d, GDK_SHIFT_MASK|GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); @@ -590,7 +710,7 @@ appdata->menu_item_osm_undo = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_undo), _("_Undo"), GTK_STOCK_UNDO, "/OSM/Undo", - GDK_z, GDK_CONTROL_MASK, FALSE, FALSE + GDK_z, GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); } else printf("set environment variable OSM2GO_UNDO_TEST to enable undo framework tests\n"); @@ -598,20 +718,20 @@ appdata->menu_item_osm_save_changes = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_save_changes), _("_Save local changes"), GTK_STOCK_SAVE, "/OSM/SaveChanges", - GDK_s, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE + GDK_s, GDK_SHIFT_MASK|GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); appdata->menu_item_osm_undo_changes = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_undo_changes), _("Disca_rd local changes..."), GTK_STOCK_DELETE, "/OSM/DiscardChanges", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); appdata->menu_item_osm_relations = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_osm_relations), _("_Relations..."), NULL, "/OSM/Relations", - GDK_r, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE + GDK_r, GDK_SHIFT_MASK|GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); /* -------------------- wms submenu -------------------- */ @@ -625,20 +745,20 @@ menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_wms_import), _("_Import..."), GTK_STOCK_INDEX, "/WMS/Import", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); appdata->menu_item_wms_clear = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_wms_clear), _("_Clear"), GTK_STOCK_CLEAR, "/WMS/Clear", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_widget_set_sensitive(appdata->menu_item_wms_clear, FALSE); appdata->menu_item_wms_adjust = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_wms_adjust), _("_Adjust"), NULL, "/WMS/Adjust", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_widget_set_sensitive(appdata->menu_item_wms_adjust, FALSE); @@ -653,14 +773,14 @@ appdata->menu_item_map_hide_sel = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_map_hide_sel), _("_Hide selected"), GTK_STOCK_REMOVE, "/Map/HideSelected", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_widget_set_sensitive(appdata->menu_item_map_hide_sel, FALSE); appdata->menu_item_map_show_all = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_map_show_all), _("_Show all"), GTK_STOCK_ADD, "/Map/ShowAll", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_widget_set_sensitive(appdata->menu_item_map_show_all, FALSE); @@ -669,7 +789,7 @@ menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_style), _("St_yle..."), GTK_STOCK_SELECT_COLOR, "/Map/Style", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_menu_shell_append(GTK_MENU_SHELL(submenu), gtk_separator_menu_item_new()); @@ -678,20 +798,20 @@ menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_redraw), _("_Redraw"), NULL, "/Map/Redraw", - GDK_r, GDK_CONTROL_MASK, FALSE, FALSE + GDK_r, GDK_CONTROL_MASK, TRUE, FALSE, FALSE ); appdata->menu_item_map_no_icons = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_map_no_icons), _("No _icons"), NULL, "/Map/NoIcons", - 0, 0, TRUE, appdata->settings->no_icons + 0, 0, TRUE, TRUE, appdata->settings->no_icons ); appdata->menu_item_map_no_antialias = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_map_no_antialias), _("No _antialias"), NULL, "/Map/NoAntialias", - 0, 0, TRUE, appdata->settings->no_antialias + 0, 0, TRUE, TRUE, appdata->settings->no_antialias ); /* -------------------- track submenu -------------------- */ @@ -705,26 +825,34 @@ appdata->track.menu_item_import = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_import), _("_Import..."), NULL, "/Track/Import", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); appdata->track.menu_item_export = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_export), _("_Export..."), NULL, "/Track/Export", - 0, 0, FALSE, FALSE + 0, 0, FALSE, FALSE, FALSE ); appdata->track.menu_item_clear = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_clear), _("_Clear"), GTK_STOCK_CLEAR, "/Track/Clear", - 0, 0, FALSE, FALSE + 0, 0, FALSE, FALSE, FALSE ); - appdata->track.menu_item_gps = menu_append_new_item( - appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_gps), _("_GPS"), + appdata->track.menu_item_enable_gps = menu_append_new_item( + appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_enable_gps),_("_GPS enable"), NULL, "/Track/GPS", - GDK_g, GDK_CONTROL_MASK|GDK_SHIFT_MASK, TRUE, FALSE + GDK_g, GDK_CONTROL_MASK|GDK_SHIFT_MASK, TRUE, TRUE, + appdata->settings->enable_gps + ); + + appdata->track.menu_item_follow_gps = menu_append_new_item( + appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_track_follow_gps), _("GPS follow"), + NULL, "/Track/Follow", + 0, 0, appdata->settings->enable_gps, TRUE, + appdata->settings->follow_gps ); /* ------------------------------------------------------- */ @@ -735,13 +863,13 @@ menu_append_new_item( appdata, about_quit_items_menu, GTK_SIGNAL_FUNC(cb_menu_about), _("_About..."), GTK_STOCK_ABOUT, "/About", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); menu_append_new_item( appdata, about_quit_items_menu, GTK_SIGNAL_FUNC(cb_menu_quit), _("_Quit"), GTK_STOCK_QUIT, "/Quit", - 0, 0, FALSE, FALSE + 0, 0, TRUE, FALSE, FALSE ); gtk_window_add_accel_group(GTK_WINDOW(appdata->window), accel_grp); @@ -906,10 +1034,10 @@ g_thread_init(NULL); - gps_init(&appdata); - gtk_init (&argc, &argv); + gps_init(&appdata); + #ifdef USE_HILDON printf("Installing osso context for \"org.harbaum." PACKAGE "\"\n"); appdata.osso_context = osso_initialize("org.harbaum."PACKAGE, @@ -1000,6 +1128,10 @@ main_ui_enable(&appdata); + /* start GPS if enabled by config */ + if(appdata.settings && appdata.settings->enable_gps) + track_enable_gps(&appdata, TRUE); + /* ------------ jump into main loop ---------------- */ gtk_main(); @@ -1007,6 +1139,8 @@ puts("gtk_main() left"); track_save(appdata.project, appdata.track.track); + track_clear(&appdata, appdata.track.track); + appdata.track.track = NULL; /* save a diff if there are dirty entries */ diff_save(appdata.project, appdata.osm);