--- trunk/src/main.c 2009/06/29 12:44:57 19 +++ trunk/src/main.c 2009/07/04 19:42:28 20 @@ -1035,7 +1035,7 @@ char *str = g_strdup_printf("%s\n\n(%s)", _("GPXView (c) 2008-2009 by\n" "Till Harbaum \n" - "Mailing list: gpxview-users@garage.maemo.org" + "Mailing list: gpxview-users@garage.maemo.org"), _(uses) ); @@ -1493,6 +1493,9 @@ cb_menu_export_log(GtkWidget *widget, gpointer data) { appdata_t *appdata = (appdata_t*)data; notes_log_export(appdata); +#ifdef USE_STACKABLE_WINDOW + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } #ifdef USE_MAEMO @@ -1500,6 +1503,9 @@ cb_menu_export_mmpoi(GtkWidget *widget, gpointer data) { appdata_t *appdata = (appdata_t*)data; mmpoi_export(appdata); +#ifdef USE_STACKABLE_WINDOW + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } #endif @@ -1507,130 +1513,133 @@ cb_menu_export_garmin(GtkWidget *widget, gpointer data) { appdata_t *appdata = (appdata_t*)data; garmin_export(appdata); +#ifdef USE_STACKABLE_WINDOW + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } static void cb_menu_geomath(GtkWidget *window, gpointer data) { geomath_dialog((appdata_t *)data); +#ifdef USE_STACKABLE_WINDOW + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } static void cb_menu_geotext(GtkWidget *window, gpointer data) { geotext_dialog((appdata_t *)data); +#ifdef USE_STACKABLE_WINDOW + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } static void cb_menu_precpos(GtkWidget *window, gpointer data) { precise_position((appdata_t *)data); -} - #ifdef USE_STACKABLE_WINDOW -static void on_export_destroy(GtkWidget *widget, appdata_t *appdata) { - appdata->cur_view = g_object_get_data(G_OBJECT(widget), "cur_view"); + hildon_window_stack_pop_1 (hildon_window_stack_get_default()); +#endif } -void on_export_clicked(GtkButton *button, appdata_t *appdata) { - HildonStackableWindow *view_window; - GtkWidget *but; - - view_window = HILDON_STACKABLE_WINDOW (hildon_stackable_window_new ()); - gtk_window_set_title (GTK_WINDOW (view_window), "GPXView - Export"); - - /* store last "cur_view" in window */ - g_object_set_data(G_OBJECT(view_window), "cur_view", appdata->cur_view); - appdata->cur_view = NULL; - - g_signal_connect(G_OBJECT(view_window), "destroy", - G_CALLBACK(on_export_destroy), appdata); - - GtkVBox *contents = GTK_VBOX(gtk_vbox_new (12, FALSE)); +#ifdef USE_STACKABLE_WINDOW +static GtkWidget *export_menu_create(appdata_t *appdata) { + GtkWidget *button; + HildonAppMenu *menu = HILDON_APP_MENU(hildon_app_menu_new()); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export to Maemo Mapper"), _("Save a Maemo Mapper POI file")); - g_signal_connect(but, "clicked", + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_export_mmpoi), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); - + hildon_app_menu_append(menu, GTK_BUTTON(button)); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export Field Notes"), _("Save a Garmin Field Notes file")); - g_signal_connect(but, "clicked", + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_export_log), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); - + hildon_app_menu_append(menu, GTK_BUTTON(button)); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Export Garmin GPX"), - _("Save a GPX file containing modified waypoints")); - g_signal_connect(but, "clicked", + _("Save modified waypoints in GPX file")); + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_export_garmin), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); + hildon_app_menu_append(menu, GTK_BUTTON(button)); - gtk_container_add (GTK_CONTAINER (view_window), GTK_WIDGET (contents)); - gtk_widget_show_all (GTK_WIDGET (view_window)); -} + gtk_widget_show_all(GTK_WIDGET(menu)); -static void on_tools_destroy(GtkWidget *widget, appdata_t *appdata) { - appdata->cur_view = g_object_get_data(G_OBJECT(widget), "cur_view"); + return GTK_WIDGET(menu); } -void on_tools_clicked(GtkButton *button, appdata_t *appdata) { - HildonStackableWindow *view_window; - GtkWidget *but; - - view_window = HILDON_STACKABLE_WINDOW (hildon_stackable_window_new ()); - gtk_window_set_title (GTK_WINDOW (view_window), "GPXView - Tools"); - - /* store last "cur_view" in window */ - g_object_set_data(G_OBJECT(view_window), "cur_view", appdata->cur_view); - appdata->cur_view = NULL; +/* the export submenu */ +void on_export_clicked(GtkButton *button, appdata_t *appdata) { + if(!appdata->export_menu) + appdata->export_menu = export_menu_create(appdata); - g_signal_connect(G_OBJECT(view_window), "destroy", - G_CALLBACK(on_tools_destroy), appdata); + /* draw a popup menu */ + hildon_app_menu_popup(HILDON_APP_MENU(appdata->export_menu), + GTK_WINDOW(hildon_window_stack_peek( + hildon_window_stack_get_default()))); +} - GtkVBox *contents = GTK_VBOX(gtk_vbox_new (12, FALSE)); +static GtkWidget *tools_menu_create(appdata_t *appdata) { + GtkWidget *button; + HildonAppMenu *menu = HILDON_APP_MENU(hildon_app_menu_new()); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Geomath"), _("Geocoordinate calculation")); - g_signal_connect(but, "clicked", + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_geomath), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); + hildon_app_menu_append(menu, GTK_BUTTON(button)); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Geotext"), - _("Text analysis, letter counting etc")); - g_signal_connect(but, "clicked", + _("Text analysis")); + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_geotext), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); + hildon_app_menu_append(menu, GTK_BUTTON(button)); - but = hildon_button_new_with_text( + button = hildon_button_new_with_text( HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, HILDON_BUTTON_ARRANGEMENT_VERTICAL, _("Precise Position"), - _("Calculate a very precise GPS position")); - g_signal_connect(but, "clicked", + _("Calculate a precise GPS position")); + g_signal_connect(button, "clicked", G_CALLBACK(cb_menu_precpos), appdata); - gtk_box_pack_start(GTK_BOX(contents), but, FALSE, FALSE, 0); + hildon_app_menu_append(menu, GTK_BUTTON(button)); + + gtk_widget_show_all(GTK_WIDGET(menu)); + + return GTK_WIDGET(menu); +} + +/* the tools submenu */ +void on_tools_clicked(GtkButton *button, appdata_t *appdata) { + if(!appdata->tools_menu) + appdata->tools_menu = tools_menu_create(appdata); - gtk_container_add (GTK_CONTAINER (view_window), GTK_WIDGET (contents)); - gtk_widget_show_all (GTK_WIDGET (view_window)); + /* draw a popup menu */ + hildon_app_menu_popup(HILDON_APP_MENU(appdata->tools_menu), + GTK_WINDOW(hildon_window_stack_peek( + hildon_window_stack_get_default()))); } + HildonAppMenu *menu_create(appdata_t *appdata, int mode) { GtkWidget *button; HildonAppMenu *menu = HILDON_APP_MENU(hildon_app_menu_new());