--- trunk/src/main.c 2009/02/09 13:42:19 65 +++ trunk/src/main.c 2009/03/22 20:08:20 139 @@ -1,4 +1,6 @@ /* + * Copyright (C) 2008 Till Harbaum . + * * This file is part of OSM2Go. * * OSM2Go is free software: you can redistribute it and/or modify @@ -56,7 +58,8 @@ /* disable all menu entries related to map */ gtk_widget_set_sensitive(appdata->menu_osm, project_valid); gtk_widget_set_sensitive(appdata->menu_item_osm_upload, osm_valid); - gtk_widget_set_sensitive(appdata->menu_item_osm_undo, osm_valid); + if(appdata->menu_item_osm_undo) + 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->track.menu_track, osm_valid); @@ -72,55 +75,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[] = { + "Андрей Жилин ", + 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), + "program-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; @@ -128,7 +129,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; @@ -155,19 +156,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); } @@ -175,13 +176,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); } @@ -190,7 +191,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 */ @@ -214,38 +215,36 @@ #endif static void -cb_menu_style(GtkWidget *widget, gpointer data) { +cb_menu_style(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; style_select(GTK_WIDGET(appdata->window), appdata); } static void -cb_menu_map_no_icons(GtkWidget *widget, gpointer data) { +cb_menu_map_no_icons(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_icons = 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_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_antialias = - 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_undo(GtkWidget *widget, gpointer data) { +cb_menu_undo(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; undo(appdata); @@ -254,7 +253,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); @@ -262,12 +261,13 @@ } 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, _("Discard local changes?"), - _("Throw away all the changes you've not uploaded yet? This can't be undone."))) + _("Throw away all the changes you've not " + "uploaded yet? This can't be undone."))) return; banner_busy_start(appdata, 1, _("Redrawing...")); @@ -282,17 +282,22 @@ } static void -cb_menu_fullscreen(GtkWidget *widget, gpointer data) { +cb_menu_osm_relations(GtkMenuItem *item, gpointer data) { + relation_list((appdata_t*)data); +} + +static void +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); @@ -300,7 +305,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); @@ -308,7 +313,7 @@ } static void -cb_menu_track_import(GtkWidget *window, appdata_t *appdata) { +cb_menu_track_import(GtkMenuItem *item, appdata_t *appdata) { /* open a file selector */ GtkWidget *dialog; @@ -357,7 +362,7 @@ } static void -cb_menu_track_gps(GtkWidget *window, gpointer data) { +cb_menu_track_gps(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; if(gtk_check_menu_item_get_active( @@ -369,14 +374,14 @@ } static void -cb_menu_track_export(GtkWidget *window, gpointer data) { +cb_menu_track_export(GtkMenuItem *item, gpointer data) { appdata_t *appdata = (appdata_t*)data; messagef(GTK_WIDGET(appdata->window), _("NIY"), _("Track export is not yet supported.")); } 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); } @@ -421,17 +426,20 @@ GtkWidget *menu_shell, GtkSignalFunc activate_cb, char *label, - const gchar *stock_id, // overridden by label, accels + const gchar *icon_name, // stock id or name for icon_load + // overridden by label, accels, icon_name const gchar *accel_path, guint accel_key, // from gdk/gdkkeysyms.h GdkModifierType accel_mods, // e.g. GDK_CONTROL_MASK gboolean is_check, gboolean check_status) { GtkWidget *item = NULL; - GtkStockItem stock_item; + GtkWidget *image = NULL; + gboolean stock_item_known = FALSE; - if (stock_id != NULL) { - stock_item_known = gtk_stock_lookup(stock_id, &stock_item); + GtkStockItem stock_item; + if (icon_name != NULL) { + stock_item_known = gtk_stock_lookup(icon_name, &stock_item); } // Icons @@ -439,14 +447,26 @@ item = is_check ? gtk_check_menu_item_new_with_mnemonic (label) : gtk_menu_item_new_with_mnemonic (label); #else - if (is_check || !stock_item_known) { - item = is_check ? gtk_check_menu_item_new_with_mnemonic (label) - : gtk_menu_item_new_with_mnemonic (label); + if (is_check) { + item = gtk_check_menu_item_new_with_mnemonic (label); + } + else if (!stock_item_known) { + GdkPixbuf *pbuf = icon_load(&appdata->icon, icon_name); + if (pbuf) { + image = gtk_image_new_from_pixbuf(pbuf); + } + if (image) { + item = gtk_image_menu_item_new_with_mnemonic(label); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); + } + else { + item = gtk_menu_item_new_with_mnemonic(label); + } } else { item = gtk_image_menu_item_new_with_mnemonic(label); - GtkWidget *stock_image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), stock_image); + image = gtk_image_new_from_stock(icon_name, GTK_ICON_SIZE_MENU); + gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); } #endif @@ -512,7 +532,7 @@ /* --------------- view menu ------------------- */ -#ifndef UISPECIFIC_MENU_IS_MENU_BAR +#ifndef UISPECIFIC_MAIN_MENU_IS_MENU_BAR gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); #endif @@ -550,13 +570,13 @@ appdata->menu_item_osm_upload = menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_upload), _("_Upload..."), - NULL, "/OSM/Upload", + "upload.16", "/OSM/Upload", GDK_u, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE ); menu_append_new_item( appdata, submenu, GTK_SIGNAL_FUNC(cb_menu_download), _("_Download..."), - NULL, "/OSM/Download", + "download.16", "/OSM/Download", GDK_d, GDK_SHIFT_MASK|GDK_CONTROL_MASK, FALSE, FALSE ); @@ -583,6 +603,13 @@ 0, 0, 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 + ); + /* -------------------- wms submenu -------------------- */ appdata->menu_wms = item = gtk_menu_item_new_with_mnemonic( _("_WMS") ); @@ -808,7 +835,8 @@ project_free(appdata->project); - undo_free(appdata->undo_state); + if(appdata->menu_item_osm_undo) + undo_free(appdata->undo.state); puts("everything is gone"); } @@ -874,10 +902,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, @@ -975,6 +1003,7 @@ puts("gtk_main() left"); track_save(appdata.project, appdata.track.track); + track_clear(&appdata, appdata.track.track); /* save a diff if there are dirty entries */ diff_save(appdata.project, appdata.osm);