--- trunk/src/main.c 2009/06/22 14:25:59 4 +++ trunk/src/main.c 2009/06/23 12:53:07 5 @@ -1010,21 +1010,6 @@ if(new) gpxlist_add(appdata, new); } -static void -cb_menu_geomath(GtkWidget *window, gpointer data) { - geomath_dialog((appdata_t *)data); -} - -static void -cb_menu_geotext(GtkWidget *window, gpointer data) { - geotext_dialog((appdata_t *)data); -} - -static void -cb_menu_precpos(GtkWidget *window, gpointer data) { - precise_position((appdata_t *)data); -} - #ifndef USE_PANNABLE_AREA static void cb_menu_close(GtkWidget *window, gpointer data) { @@ -1430,63 +1415,142 @@ } #endif -static void -cb_menu_export_log(GtkWidget *widget, gpointer data) { - appdata_t *appdata = (appdata_t*)data; - notes_log_export(appdata); +#ifdef USE_STACKABLE_WINDOW +typedef struct { + appdata_t *appdata; + GtkWidget *dialog; +} appmenu_context_t; + +void on_export_mmpoi_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + mmpoi_export(context->appdata); } -#ifdef USE_MAEMO -static void -cb_menu_export_mmpoi(GtkWidget *widget, gpointer data) { - appdata_t *appdata = (appdata_t*)data; - mmpoi_export(appdata); +void on_export_garmin_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + garmin_export(context->appdata); } -#endif -static void -cb_menu_export_garmin(GtkWidget *widget, gpointer data) { - appdata_t *appdata = (appdata_t*)data; - garmin_export(appdata); +void on_export_notes_log_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + notes_log_export(context->appdata); } -#ifdef USE_STACKABLE_WINDOW void on_export_clicked(GtkButton *button, appdata_t *appdata) { - GtkWidget *but, *dialog = gtk_dialog_new(); + GtkWidget *but; + appmenu_context_t context; + + context.appdata = appdata; + context.dialog = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), _("Export")); + gtk_window_set_decorated(GTK_WINDOW(context.dialog), FALSE); but = hildon_button_new_with_text(HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export to Maemo Mapper"), - _("Write a Maemo Mapper POI file")); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), but); - + _("Save a Maemo Mapper POI file")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_export_mmpoi_clicked), &context); but = hildon_button_new_with_text(HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export Field Notes"), - _("Write a Garmin Field Notes file")); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), but); + _("Save a Garmin Field Notes file")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_export_notes_log_clicked), &context); but = hildon_button_new_with_text(HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export Garmin GPX"), - _("Write GPX file of modified points")); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), but); - + _("Save a GPX file of modified points")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_export_garmin_clicked), &context); -#if 0 - g_signal_connect_swapped (dialog, - "response", - G_CALLBACK (gtk_widget_destroy), - dialog); -#endif + gtk_widget_show_all(context.dialog); + gint result = gtk_dialog_run(GTK_DIALOG(context.dialog)); + + /* user clicked outside dialog */ + if(result == GTK_RESPONSE_DELETE_EVENT) + gtk_widget_destroy(context.dialog); +} + +void on_tools_geomath_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + geomath_dialog(context->appdata); +} + +void on_tools_geotext_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + geotext_dialog(context->appdata); +} + +void on_tools_precpos_clicked(appmenu_context_t *context) { + gtk_widget_destroy(context->dialog); + while(gtk_events_pending()) + gtk_main_iteration(); + + precise_position(context->appdata); +} + +void on_tools_clicked(GtkButton *button, appdata_t *appdata) { + GtkWidget *but; + appmenu_context_t context; + + context.appdata = appdata; + context.dialog = gtk_dialog_new(); + + gtk_window_set_decorated(GTK_WINDOW(context.dialog), FALSE); + + but = hildon_button_new_with_text(HILDON_SIZE_AUTO, + HILDON_BUTTON_ARRANGEMENT_VERTICAL, + _("Geomath"), + _("Geocoordinate calculation")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_tools_geomath_clicked), &context); + + but = hildon_button_new_with_text(HILDON_SIZE_AUTO, + HILDON_BUTTON_ARRANGEMENT_VERTICAL, + _("Geotext"), + _("Text analysis, letter counting etc")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_tools_geotext_clicked), &context); + - gtk_widget_show_all (dialog); - gint result = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(dialog); + but = hildon_button_new_with_text(HILDON_SIZE_AUTO, + HILDON_BUTTON_ARRANGEMENT_VERTICAL, + _("Precise Position"), + _("Calculate a very precise GPS posotions")); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(context.dialog)->vbox), but); + g_signal_connect_swapped(but, "clicked", + G_CALLBACK(on_tools_precpos_clicked), &context); + + gtk_widget_show_all(context.dialog); + gint result = gtk_dialog_run(GTK_DIALOG(context.dialog)); + + /* user clicked outside dialog */ + if(result == GTK_RESPONSE_DELETE_EVENT) + gtk_widget_destroy(context.dialog); } HildonAppMenu *menu_create(appdata_t *appdata, int mode) { @@ -1511,32 +1575,6 @@ hildon_app_menu_append(menu, GTK_BUTTON(button)); } -#if 0 - if(mode == MENU_GPXLIST || mode == MENU_CACHELIST) { - button = gtk_button_new_with_label(_("Export to Mapper")); - g_signal_connect_after(button, "clicked", - G_CALLBACK(cb_menu_export_mmpoi), appdata); - hildon_app_menu_append(menu, GTK_BUTTON(button)); - } - - if(mode == MENU_GPXLIST) { - button = gtk_button_new_with_label(_("Export Field Notes")); - g_signal_connect_after(button, "clicked", - G_CALLBACK(cb_menu_export_log), appdata); - hildon_app_menu_append(menu, GTK_BUTTON(button)); - - button = gtk_button_new_with_label(_("Export Garmin GPX")); - g_signal_connect_after(button, "clicked", - G_CALLBACK(cb_menu_export_garmin), appdata); - hildon_app_menu_append(menu, GTK_BUTTON(button)); - - button = gtk_button_new_with_label(_("Search")); - g_signal_connect_after(button, "clicked", - G_CALLBACK(cb_menu_search), appdata); - hildon_app_menu_append(menu, GTK_BUTTON(button)); - } -#else - if(mode == MENU_GPXLIST) { button = gtk_button_new_with_label(_("Export")); g_signal_connect_after(button, "clicked", @@ -1549,7 +1587,10 @@ hildon_app_menu_append(menu, GTK_BUTTON(button)); } -#endif + button = gtk_button_new_with_label(_("Tools")); + g_signal_connect_after(button, "clicked", + G_CALLBACK(on_tools_clicked), appdata); + hildon_app_menu_append(menu, GTK_BUTTON(button)); button = gtk_button_new_with_label(_("About")); g_signal_connect_after(button, "clicked", @@ -1561,6 +1602,41 @@ return menu; } #else +static void +cb_menu_export_log(GtkWidget *widget, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + notes_log_export(appdata); +} + +#ifdef USE_MAEMO +static void +cb_menu_export_mmpoi(GtkWidget *widget, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + mmpoi_export(appdata); +} +#endif + +static void +cb_menu_export_garmin(GtkWidget *widget, gpointer data) { + appdata_t *appdata = (appdata_t*)data; + garmin_export(appdata); +} + +static void +cb_menu_geomath(GtkWidget *window, gpointer data) { + geomath_dialog((appdata_t *)data); +} + +static void +cb_menu_geotext(GtkWidget *window, gpointer data) { + geotext_dialog((appdata_t *)data); +} + +static void +cb_menu_precpos(GtkWidget *window, gpointer data) { + precise_position((appdata_t *)data); +} + void menu_create(appdata_t *appdata) { GtkWidget *menu, *item; menu = gtk_menu_new();