2 * Copyright (C) 2006, 2007 John Costigan.
4 * POI and GPS-Info code originally written by Cezary Jackiewicz.
6 * Default map data provided by http://www.openstreetmap.org/
8 * This file is part of Maemo Mapper.
10 * Maemo Mapper is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
15 * Maemo Mapper is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with Maemo Mapper. If not, see <http://www.gnu.org/licenses/>.
33 # include <hildon/hildon-help.h>
34 # include <hildon/hildon-program.h>
35 # include <hildon/hildon-banner.h>
37 # include <osso-helplib.h>
38 # include <hildon-widgets/hildon-program.h>
39 # include <hildon-widgets/hildon-banner.h>
40 # include <hildon-widgets/hildon-input-mode-hint.h>
49 #include "gdk-pixbuf-rotate.h"
58 /****************************************************************************
59 * BELOW: ROUTE MENU ********************************************************
60 ****************************************************************************/
63 menu_cb_route_open(GtkMenuItem *item)
67 printf("%s()\n", __PRETTY_FUNCTION__);
69 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
70 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_OPEN))
72 /* If auto is enabled, append the route, otherwise replace it. */
73 if(gpx_path_parse(&_route, buffer, size,
74 _autoroute_data.enabled ? 0 : 1))
76 path_save_route_to_db();
80 /* Find the nearest route point, if we're connected. */
81 route_find_nearest_point();
84 MACRO_BANNER_SHOW_INFO(_window, _("Route Opened"));
87 popup_error(_window, _("Error parsing GPX file."));
91 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
96 menu_cb_route_download(GtkMenuItem *item)
98 printf("%s()\n", __PRETTY_FUNCTION__);
100 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
105 menu_cb_route_save(GtkMenuItem *item)
107 GnomeVFSHandle *handle;
108 printf("%s()\n", __PRETTY_FUNCTION__);
110 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
111 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_SAVE))
113 if(gpx_path_write(&_route, handle))
115 MACRO_BANNER_SHOW_INFO(_window, _("Route Saved"));
118 popup_error(_window, _("Error writing GPX file."));
119 gnome_vfs_close(handle);
122 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
127 menu_cb_route_distnext(GtkMenuItem *item)
129 printf("%s()\n", __PRETTY_FUNCTION__);
131 route_show_distance_to_next();
133 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
138 menu_cb_route_distlast(GtkMenuItem *item)
140 printf("%s()\n", __PRETTY_FUNCTION__);
142 route_show_distance_to_last();
144 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
149 menu_cb_route_reset(GtkMenuItem *item)
151 printf("%s()\n", __PRETTY_FUNCTION__);
155 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
160 menu_cb_route_clear(GtkMenuItem *item)
162 printf("%s()\n", __PRETTY_FUNCTION__);
165 MACRO_PATH_FREE(_route);
166 MACRO_PATH_INIT(_route);
167 path_save_route_to_db();
168 route_find_nearest_point();
171 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
175 /****************************************************************************
176 * ABOVE: ROUTE MENU ********************************************************
177 ****************************************************************************/
179 /****************************************************************************
180 * BELOW: TRACK MENU ********************************************************
181 ****************************************************************************/
184 menu_cb_track_open(GtkMenuItem *item)
188 printf("%s()\n", __PRETTY_FUNCTION__);
190 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
191 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_OPEN))
193 if(gpx_path_parse(&_track, buffer, size, -1))
196 MACRO_BANNER_SHOW_INFO(_window, _("Track Opened"));
199 popup_error(_window, _("Error parsing GPX file."));
203 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
208 menu_cb_track_save(GtkMenuItem *item)
210 GnomeVFSHandle *handle;
211 printf("%s()\n", __PRETTY_FUNCTION__);
213 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
214 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_SAVE))
216 if(gpx_path_write(&_track, handle))
218 MACRO_BANNER_SHOW_INFO(_window, _("Track Saved"));
221 popup_error(_window, _("Error writing GPX file."));
222 gnome_vfs_close(handle);
225 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
230 menu_cb_track_insert_break(GtkMenuItem *item)
232 printf("%s()\n", __PRETTY_FUNCTION__);
234 track_insert_break(TRUE);
236 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
241 menu_cb_track_insert_mark(GtkMenuItem *item)
244 gchar tmp1[LL_FMT_LEN], tmp2[LL_FMT_LEN], *p_latlon;
245 static GtkWidget *dialog = NULL;
246 static GtkWidget *table = NULL;
247 static GtkWidget *label = NULL;
248 static GtkWidget *lbl_latlon = NULL;
249 static GtkWidget *txt_scroll = NULL;
250 static GtkWidget *txt_desc = NULL;
251 printf("%s()\n", __PRETTY_FUNCTION__);
255 dialog = gtk_dialog_new_with_buttons(_("Insert Mark"),
256 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
257 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
258 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
261 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
262 table = gtk_table_new(2, 2, FALSE), TRUE, TRUE, 0);
264 gtk_table_attach(GTK_TABLE(table),
265 label = gtk_label_new(_("Lat, Lon:")),
266 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
267 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
269 gtk_table_attach(GTK_TABLE(table),
270 lbl_latlon = gtk_label_new(""),
271 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
272 gtk_misc_set_alignment(GTK_MISC(lbl_latlon), 0.0f, 0.5f);
274 gtk_table_attach(GTK_TABLE(table),
275 label = gtk_label_new(_("Description")),
276 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
277 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
279 txt_scroll = gtk_scrolled_window_new(NULL, NULL);
280 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(txt_scroll),
282 gtk_table_attach(GTK_TABLE(table),
284 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
286 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scroll),
287 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
289 txt_desc = gtk_text_view_new ();
290 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt_desc), GTK_WRAP_WORD);
292 gtk_container_add(GTK_CONTAINER(txt_scroll), txt_desc);
293 gtk_widget_set_size_request(GTK_WIDGET(txt_scroll), 400, 60);
296 unit2latlon(_pos.unitx, _pos.unity, lat, lon);
297 lat_format(lat, tmp1);
298 lon_format(lon, tmp2);
299 p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2);
300 gtk_label_set_text(GTK_LABEL(lbl_latlon), p_latlon);
303 gtk_text_buffer_set_text(
304 gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)), "", 0);
306 gtk_widget_show_all(dialog);
308 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
311 GtkTextIter ti1, ti2;
314 tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc));
315 gtk_text_buffer_get_iter_at_offset(tbuf, &ti1, 0);
316 gtk_text_buffer_get_end_iter(tbuf, &ti2);
317 desc = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
321 MACRO_PATH_INCREMENT_WTAIL(_track);
322 _track.wtail->point = _track.tail;
324 = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
329 _("Please provide a description for the mark."));
335 MACRO_QUEUE_DRAW_AREA();
338 gtk_widget_hide(dialog);
340 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
345 menu_cb_track_distlast(GtkMenuItem *item)
347 printf("%s()\n", __PRETTY_FUNCTION__);
349 track_show_distance_from_last();
351 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
356 menu_cb_track_distfirst(GtkMenuItem *item)
358 printf("%s()\n", __PRETTY_FUNCTION__);
360 track_show_distance_from_first();
362 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
367 menu_cb_track_clear(GtkMenuItem *item)
369 printf("%s()\n", __PRETTY_FUNCTION__);
373 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
378 menu_cb_track_enable_tracking(GtkMenuItem *item)
380 printf("%s()\n", __PRETTY_FUNCTION__);
382 if(!(_enable_tracking = gtk_check_menu_item_get_active(
383 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item))))
385 track_insert_break(FALSE); /* FALSE = not temporary */
386 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Disabled"));
390 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Enabled"));
394 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
398 /****************************************************************************
399 * ABOVE: TRACK MENU ********************************************************
400 ****************************************************************************/
402 /****************************************************************************
403 * BELOW: POI MENU **********************************************************
404 ****************************************************************************/
407 menu_cb_poi_import(GtkMenuItem *item)
409 printf("%s()\n", __PRETTY_FUNCTION__);
411 if(poi_import_dialog(_center.unitx, _center.unity))
414 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
419 menu_cb_poi_download(GtkMenuItem *item)
421 printf("%s()\n", __PRETTY_FUNCTION__);
423 if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
426 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
431 menu_cb_poi_browse(GtkMenuItem *item)
433 printf("%s()\n", __PRETTY_FUNCTION__);
435 if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
438 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
443 menu_cb_poi_categories(GtkMenuItem *item)
445 printf("%s()\n", __PRETTY_FUNCTION__);
447 if(category_list_dialog(_window))
450 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
454 /****************************************************************************
455 * ABOVE: POI MENU **********************************************************
456 ****************************************************************************/
458 /****************************************************************************
459 * BELOW: MAPS MENU *********************************************************
460 ****************************************************************************/
463 menu_cb_maps_repoman(GtkMenuItem *item)
465 printf("%s()\n", __PRETTY_FUNCTION__);
467 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
472 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
474 printf("%s()\n", __PRETTY_FUNCTION__);
476 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
478 repo_set_curr(new_repo);
479 map_refresh_mark(TRUE);
481 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
486 menu_cb_maps_mapman(GtkMenuItem *item)
488 printf("%s()\n", __PRETTY_FUNCTION__);
492 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
497 menu_cb_maps_auto_download(GtkMenuItem *item)
499 printf("%s()\n", __PRETTY_FUNCTION__);
501 if((_auto_download = gtk_check_menu_item_get_active(
502 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
504 if(_curr_repo->url == REPOTYPE_NONE)
506 _("NOTE: You must set a Map URI in the current repository in "
507 "order to download maps."));
508 map_refresh_mark(TRUE);
511 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
515 /****************************************************************************
516 * ABOVE: MAPS MENU *********************************************************
517 ****************************************************************************/
519 /****************************************************************************
520 * BELOW: VIEW/ZOOM MENU ****************************************************
521 ****************************************************************************/
524 menu_cb_view_zoom_in(GtkMenuItem *item)
526 printf("%s()\n", __PRETTY_FUNCTION__);
531 snprintf(buffer, sizeof(buffer),"%s %d",
532 _("Zoom to Level"), _next_zoom - 1);
533 MACRO_BANNER_SHOW_INFO(_window, buffer);
534 map_set_zoom(_next_zoom - 1);
537 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
542 menu_cb_view_zoom_out(GtkMenuItem *item)
544 printf("%s()\n", __PRETTY_FUNCTION__);
549 snprintf(buffer, sizeof(buffer),"%s %d",
550 _("Zoom to Level"), _next_zoom + 1);
551 MACRO_BANNER_SHOW_INFO(_window, buffer);
552 map_set_zoom(_next_zoom + 1);
555 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
559 /****************************************************************************
560 * ABOVE: VIEW/ZOOM MENU ****************************************************
561 ****************************************************************************/
563 /****************************************************************************
564 * BELOW: VIEW/ROTATE MENU **************************************************
565 ****************************************************************************/
568 menu_cb_view_rotate_clock(GtkMenuItem *item)
570 printf("%s()\n", __PRETTY_FUNCTION__);
572 map_rotate(-ROTATE_DEGREES);
574 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
579 menu_cb_view_rotate_counter(GtkMenuItem *item)
581 printf("%s()\n", __PRETTY_FUNCTION__);
583 map_rotate(ROTATE_DEGREES);
585 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
590 menu_cb_view_rotate_reset(GtkMenuItem *item)
592 printf("%s()\n", __PRETTY_FUNCTION__);
594 map_rotate(-_next_map_rotate_angle);
596 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
601 menu_cb_view_rotate_auto(GtkMenuItem *item)
603 printf("%s()\n", __PRETTY_FUNCTION__);
605 if(gtk_check_menu_item_get_active(
606 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
608 _center_rotate = TRUE;
610 map_refresh_mark(TRUE);
611 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
615 _center_rotate = FALSE;
616 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
619 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
623 /****************************************************************************
624 * ABOVE: VIEW/ROTATE MENU **************************************************
625 ****************************************************************************/
627 /****************************************************************************
628 * BELOW: VIEW/PAN MENU *****************************************************
629 ****************************************************************************/
632 menu_cb_view_pan_up(GtkMenuItem *item)
634 gfloat panx_adj, pany_adj;
635 printf("%s()\n", __PRETTY_FUNCTION__);
637 /* Adjust for rotate angle. */
638 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
641 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
642 pixel2unit((gint)(pany_adj + 0.5f)));
644 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
649 menu_cb_view_pan_down(GtkMenuItem *item)
651 gfloat panx_adj, pany_adj;
652 printf("%s()\n", __PRETTY_FUNCTION__);
654 /* Adjust for rotate angle. */
655 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
658 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
659 pixel2unit((gint)(pany_adj + 0.5f)));
661 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
666 menu_cb_view_pan_left(GtkMenuItem *item)
668 gfloat panx_adj, pany_adj;
669 printf("%s()\n", __PRETTY_FUNCTION__);
671 /* Adjust for rotate angle. */
672 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
675 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
676 pixel2unit((gint)(pany_adj + 0.5f)));
678 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
683 menu_cb_view_pan_right(GtkMenuItem *item)
685 gfloat panx_adj, pany_adj;
686 printf("%s()\n", __PRETTY_FUNCTION__);
688 /* Adjust for rotate angle. */
689 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
692 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
693 pixel2unit((gint)(pany_adj + 0.5f)));
695 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
700 menu_cb_view_pan_north(GtkMenuItem *item)
702 printf("%s()\n", __PRETTY_FUNCTION__);
704 map_pan(0, -pixel2unit(PAN_PIXELS));
706 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
711 menu_cb_view_pan_south(GtkMenuItem *item)
713 printf("%s()\n", __PRETTY_FUNCTION__);
715 map_pan(0, pixel2unit(PAN_PIXELS));
717 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
722 menu_cb_view_pan_west(GtkMenuItem *item)
724 printf("%s()\n", __PRETTY_FUNCTION__);
726 map_pan(-pixel2unit(PAN_PIXELS), 0);
728 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
733 menu_cb_view_pan_east(GtkMenuItem *item)
735 printf("%s()\n", __PRETTY_FUNCTION__);
737 map_pan(pixel2unit(PAN_PIXELS), 0);
739 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
743 /****************************************************************************
744 * ABOVE: VIEW/PAN MENU *****************************************************
745 ****************************************************************************/
747 /****************************************************************************
748 * BELOW: VIEW/GOTO MENU ****************************************************
749 ****************************************************************************/
752 menu_cb_view_goto_latlon(GtkMenuItem *item)
754 static GtkWidget *dialog = NULL;
755 static GtkWidget *table = NULL;
756 static GtkWidget *label = NULL;
757 static GtkWidget *txt_lat = NULL;
758 static GtkWidget *txt_lon = NULL;
759 printf("%s()\n", __PRETTY_FUNCTION__);
763 dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
764 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
765 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
766 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
769 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
770 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
772 gtk_table_attach(GTK_TABLE(table),
773 label = gtk_label_new(_("Latitude")),
774 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
775 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
777 gtk_table_attach(GTK_TABLE(table),
778 txt_lat = gtk_entry_new(),
779 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
780 gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
781 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
784 g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
785 HILDON_GTK_INPUT_MODE_FULL, NULL);
787 g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
788 g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
789 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
793 gtk_table_attach(GTK_TABLE(table),
794 label = gtk_label_new(_("Longitude")),
795 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
796 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
798 gtk_table_attach(GTK_TABLE(table),
799 txt_lon = gtk_entry_new(),
800 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
801 gtk_entry_set_width_chars(GTK_ENTRY(txt_lon), 16);
802 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
805 g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
806 HILDON_GTK_INPUT_MODE_FULL, NULL);
808 g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
809 g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
810 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
815 /* Initialize with the current center position. */
819 unit2latlon(_center.unitx, _center.unity, lat, lon);
820 lat_format(lat, buffer);
821 gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
822 lon_format(lon, buffer);
823 gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
826 gtk_widget_show_all(dialog);
828 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
835 text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
836 lat = strdmstod(text, &error_check);
837 if(text == error_check || lat < -90. || lat > 90.) {
838 popup_error(dialog, _("Invalid Latitude"));
842 text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
843 lon = strdmstod(text, &error_check);
844 if(text == error_check || lon < -180. || lon > 180.) {
845 popup_error(dialog, _("Invalid Longitude"));
849 latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
851 gtk_check_menu_item_set_active(
852 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
853 map_center_unit(sel_unit);
856 gtk_widget_hide(dialog);
857 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
862 menu_cb_view_goto_address(GtkMenuItem *item)
864 static GtkWidget *dialog = NULL;
865 static GtkWidget *table = NULL;
866 static GtkWidget *label = NULL;
867 static GtkWidget *txt_addr = NULL;
868 printf("%s()\n", __PRETTY_FUNCTION__);
872 GtkEntryCompletion *comp;
873 dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
874 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
875 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
876 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
879 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
880 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
882 gtk_table_attach(GTK_TABLE(table),
883 label = gtk_label_new(_("Address")),
884 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
885 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
887 gtk_table_attach(GTK_TABLE(table),
888 txt_addr = gtk_entry_new(),
889 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
890 gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
891 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
893 /* Set up auto-completion. */
894 comp = gtk_entry_completion_new();
895 gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
896 gtk_entry_completion_set_text_column(comp, 0);
897 gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
900 gtk_widget_show_all(dialog);
902 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
904 Point origin = locate_address(dialog,
905 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
908 MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
911 gtk_check_menu_item_set_active(
912 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
914 map_center_unit(origin);
916 /* Success! Get out of the while loop. */
920 gtk_widget_hide(dialog);
921 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
926 menu_cb_view_goto_gps(GtkMenuItem *item)
928 printf("%s()\n", __PRETTY_FUNCTION__);
931 gtk_check_menu_item_set_active(
932 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
934 map_center_unit(_pos);
936 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
941 menu_cb_view_goto_nextway(GtkMenuItem *item)
944 printf("%s()\n", __PRETTY_FUNCTION__);
946 next_way = path_get_next_way();
948 if(next_way && next_way->point->unity)
951 gtk_check_menu_item_set_active(
952 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
954 map_center_unit(*next_way->point);
958 MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
961 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
966 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
968 printf("%s()\n", __PRETTY_FUNCTION__);
975 if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
976 : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
978 /* Auto-Center is enabled - use the GPS position. */
980 latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
981 banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
982 MACRO_BANNER_SHOW_INFO(_window, banner);
989 gtk_check_menu_item_set_active(
990 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
992 map_center_unit(unit);
996 MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
997 /* Auto-Center is disabled - use the view center. */
1001 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1005 /****************************************************************************
1006 * ABOVE: VIEW/GOTO MENU ****************************************************
1007 ****************************************************************************/
1009 /****************************************************************************
1010 * BELOW: VIEW/SHOW MENU ****************************************************
1011 ****************************************************************************/
1014 menu_cb_view_show_tracks(GtkMenuItem *item)
1016 printf("%s()\n", __PRETTY_FUNCTION__);
1018 _show_paths ^= TRACKS_MASK;
1019 if(gtk_check_menu_item_get_active(
1020 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1022 _show_paths |= TRACKS_MASK;
1024 MACRO_QUEUE_DRAW_AREA();
1025 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1029 _show_paths &= ~TRACKS_MASK;
1031 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1034 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1039 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1041 printf("%s()\n", __PRETTY_FUNCTION__);
1043 _show_zoomlevel = gtk_check_menu_item_get_active(
1044 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1047 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1052 menu_cb_view_show_scale(GtkMenuItem *item)
1054 printf("%s()\n", __PRETTY_FUNCTION__);
1056 _show_scale = gtk_check_menu_item_get_active(
1057 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1060 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1065 menu_cb_view_show_comprose(GtkMenuItem *item)
1067 printf("%s()\n", __PRETTY_FUNCTION__);
1069 _show_comprose = gtk_check_menu_item_get_active(
1070 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1073 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1078 menu_cb_view_show_routes(GtkMenuItem *item)
1080 printf("%s()\n", __PRETTY_FUNCTION__);
1082 if(gtk_check_menu_item_get_active(
1083 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1085 _show_paths |= ROUTES_MASK;
1087 MACRO_QUEUE_DRAW_AREA();
1088 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1092 _show_paths &= ~ROUTES_MASK;
1094 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1097 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1102 menu_cb_view_show_velvec(GtkMenuItem *item)
1104 printf("%s()\n", __PRETTY_FUNCTION__);
1106 _show_velvec = gtk_check_menu_item_get_active(
1107 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1110 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1115 menu_cb_view_show_poi(GtkMenuItem *item)
1117 printf("%s()\n", __PRETTY_FUNCTION__);
1119 _show_poi = gtk_check_menu_item_get_active(
1120 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1123 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1127 /****************************************************************************
1128 * ABOVE: VIEW/SHOW MENU ****************************************************
1129 ****************************************************************************/
1131 /****************************************************************************
1132 * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1133 ****************************************************************************/
1136 menu_cb_view_ac_lead(GtkMenuItem *item)
1138 printf("%s()\n", __PRETTY_FUNCTION__);
1140 if(gtk_check_menu_item_get_active(
1141 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1143 _center_mode = CENTER_LEAD;
1144 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1145 map_refresh_mark(TRUE);
1148 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1153 menu_cb_view_ac_latlon(GtkMenuItem *item)
1155 printf("%s()\n", __PRETTY_FUNCTION__);
1157 if(gtk_check_menu_item_get_active(
1158 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1160 _center_mode = CENTER_LATLON;
1161 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1162 map_refresh_mark(TRUE);
1165 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1170 menu_cb_view_ac_none(GtkMenuItem *item)
1172 printf("%s()\n", __PRETTY_FUNCTION__);
1174 if(gtk_check_menu_item_get_active(
1175 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1177 _center_mode = -_center_mode;
1178 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1181 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1185 /****************************************************************************
1186 * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1187 ****************************************************************************/
1190 menu_cb_view_fullscreen(GtkMenuItem *item)
1192 printf("%s()\n", __PRETTY_FUNCTION__);
1194 if((_fullscreen = gtk_check_menu_item_get_active(
1195 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1196 gtk_window_fullscreen(GTK_WINDOW(_window));
1198 gtk_window_unfullscreen(GTK_WINDOW(_window));
1200 g_idle_add((GSourceFunc)window_present, NULL);
1202 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1206 /****************************************************************************
1207 * BELOW: GPS MENU **********************************************************
1208 ****************************************************************************/
1211 menu_cb_gps_enable(GtkMenuItem *item)
1213 printf("%s()\n", __PRETTY_FUNCTION__);
1215 if((_enable_gps = gtk_check_menu_item_get_active(
1216 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item))))
1223 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1224 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1226 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1231 menu_cb_gps_show_info(GtkMenuItem *item)
1233 printf("%s()\n", __PRETTY_FUNCTION__);
1235 _gps_info = gtk_check_menu_item_get_active(
1236 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1240 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1245 menu_cb_gps_details(GtkMenuItem *item)
1247 printf("%s()\n", __PRETTY_FUNCTION__);
1251 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1256 menu_cb_gps_reset(GtkMenuItem *item)
1258 printf("%s()\n", __PRETTY_FUNCTION__);
1262 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1266 /****************************************************************************
1267 * ABOVE: GPS MENU **********************************************************
1268 ****************************************************************************/
1271 menu_cb_settings(GtkMenuItem *item)
1273 printf("%s()\n", __PRETTY_FUNCTION__);
1275 if(settings_dialog())
1277 /* Settings have changed - reconnect to receiver. */
1285 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1290 menu_cb_help(GtkMenuItem *item)
1292 printf("%s()\n", __PRETTY_FUNCTION__);
1295 hildon_help_show(_osso, HELP_ID_INTRO, 0);
1297 ossohelp_show(_osso, HELP_ID_INTRO, 0);
1300 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1305 menu_cb_about(GtkMenuItem *item)
1307 printf("%s()\n", __PRETTY_FUNCTION__);
1310 hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1312 ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1315 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1322 menu_maps_remove_repos()
1325 printf("%s()\n", __PRETTY_FUNCTION__);
1327 /* Delete one menu item for each repo. */
1328 for(curr = _repo_list; curr; curr = curr->next)
1330 gtk_widget_destroy(gtk_container_get_children(
1331 GTK_CONTAINER(_menu_maps_submenu))->data);
1333 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1337 menu_maps_add_repos()
1340 GtkWidget *last_repo = NULL;
1341 printf("%s()\n", __PRETTY_FUNCTION__);
1343 for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1345 RepoData *rd = (RepoData*)curr->data;
1346 GtkWidget *menu_item;
1348 gtk_menu_prepend(_menu_maps_submenu, menu_item
1349 = gtk_radio_menu_item_new_with_label_from_widget(
1350 GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1353 gtk_menu_prepend(_menu_maps_submenu, menu_item
1354 = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1355 last_repo = menu_item;
1357 gtk_check_menu_item_set_active(
1358 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1359 rd->menu_item = menu_item;
1362 /* Add signals (must be after entire menu is built). */
1364 GList *currmi = gtk_container_get_children(
1365 GTK_CONTAINER(_menu_maps_submenu));
1366 for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1368 g_signal_connect(G_OBJECT(currmi->data), "activate",
1369 G_CALLBACK(menu_cb_maps_select), curr->data);
1373 gtk_widget_show_all(_menu_maps_submenu);
1374 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1378 * Create the menu items needed for the drop down menu.
1383 /* Create needed handles. */
1386 GtkWidget *submenu2;
1387 GtkWidget *menu_item;
1388 printf("%s()\n", __PRETTY_FUNCTION__);
1390 /* Get the menu of our view. */
1391 menu = GTK_MENU(gtk_menu_new());
1393 /* Create the menu items. */
1395 /* The "Routes" submenu. */
1396 gtk_menu_append(menu, menu_item
1397 = gtk_menu_item_new_with_label(_("Route")));
1398 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1399 submenu = gtk_menu_new());
1400 gtk_menu_append(submenu, _menu_route_open_item
1401 = gtk_menu_item_new_with_label(_("Open...")));
1402 gtk_menu_append(submenu, _menu_route_download_item
1403 = gtk_menu_item_new_with_label(_("Download...")));
1404 gtk_menu_append(submenu, _menu_route_save_item
1405 = gtk_menu_item_new_with_label(_("Save...")));
1406 gtk_menu_append(submenu, _menu_route_distnext_item
1407 = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1408 gtk_menu_append(submenu, _menu_route_distlast_item
1409 = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1410 gtk_menu_append(submenu, _menu_route_reset_item
1411 = gtk_menu_item_new_with_label(_("Reset")));
1412 gtk_menu_append(submenu, _menu_route_clear_item
1413 = gtk_menu_item_new_with_label(_("Clear")));
1415 /* The "Track" submenu. */
1416 gtk_menu_append(menu, menu_item
1417 = gtk_menu_item_new_with_label(_("Track")));
1418 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1419 submenu = gtk_menu_new());
1420 gtk_menu_append(submenu, _menu_track_open_item
1421 = gtk_menu_item_new_with_label(_("Open...")));
1422 gtk_menu_append(submenu, _menu_track_save_item
1423 = gtk_menu_item_new_with_label(_("Save...")));
1424 gtk_menu_append(submenu, _menu_track_insert_break_item
1425 = gtk_menu_item_new_with_label(_("Insert Break")));
1426 gtk_menu_append(submenu, _menu_track_insert_mark_item
1427 = gtk_menu_item_new_with_label(_("Insert Mark...")));
1428 gtk_menu_append(submenu, _menu_track_distlast_item
1429 = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1430 gtk_menu_append(submenu, _menu_track_distfirst_item
1431 = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1432 gtk_menu_append(submenu, _menu_track_clear_item
1433 = gtk_menu_item_new_with_label(_("Clear")));
1434 gtk_menu_append(submenu, _menu_track_enable_tracking_item
1435 = gtk_check_menu_item_new_with_label(_("Enable Tracking")));
1436 gtk_check_menu_item_set_active(
1437 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item), _enable_tracking);
1439 /* The "POI" submenu. */
1440 gtk_menu_append(menu, menu_item = _menu_poi_item
1441 = gtk_menu_item_new_with_label(_("POI")));
1442 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1443 submenu = gtk_menu_new());
1444 gtk_menu_append(submenu, _menu_poi_import_item
1445 = gtk_menu_item_new_with_label(_("Import...")));
1446 gtk_menu_append(submenu, _menu_poi_download_item
1447 = gtk_menu_item_new_with_label(_("Download...")));
1448 gtk_menu_append(submenu, _menu_poi_browse_item
1449 = gtk_menu_item_new_with_label(_("Browse...")));
1450 gtk_menu_append(submenu, _menu_poi_categories_item
1451 = gtk_menu_item_new_with_label(_("Categories...")));
1453 /* The "Maps" submenu. */
1454 gtk_menu_append(menu, menu_item
1455 = gtk_menu_item_new_with_label(_("Maps")));
1456 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1457 _menu_maps_submenu = gtk_menu_new());
1458 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1459 gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1460 = gtk_menu_item_new_with_label(_("Manage Maps...")));
1461 gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1462 = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1463 gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1464 = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1465 gtk_check_menu_item_set_active(
1466 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1467 menu_maps_add_repos();
1469 gtk_menu_append(menu, gtk_separator_menu_item_new());
1471 /* The "View" submenu. */
1472 gtk_menu_append(menu, menu_item
1473 = gtk_menu_item_new_with_label(_("View")));
1474 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1475 submenu = gtk_menu_new());
1477 /* The "View"/"Zoom" submenu. */
1478 gtk_menu_append(submenu, menu_item
1479 = gtk_menu_item_new_with_label(_("Zoom")));
1480 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1481 submenu2 = gtk_menu_new());
1482 gtk_menu_append(submenu2, _menu_view_zoom_in_item
1483 = gtk_menu_item_new_with_label(_("Zoom In")));
1484 gtk_menu_append(submenu2, _menu_view_zoom_out_item
1485 = gtk_menu_item_new_with_label(_("Zoom Out")));
1487 /* The "View"/"Rotate" submenu. */
1488 gtk_menu_append(submenu, menu_item
1489 = gtk_menu_item_new_with_label(_("Rotate")));
1490 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1491 submenu2 = gtk_menu_new());
1492 gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1493 = gtk_menu_item_new_with_label(_("Clockwise")));
1494 gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1495 = gtk_menu_item_new_with_label(_("Counter")));
1496 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1497 gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1498 = gtk_menu_item_new_with_label(_("Reset")));
1499 gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1500 = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1501 gtk_check_menu_item_set_active(
1502 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1504 /* The "View"/"Pan" submenu. */
1505 gtk_menu_append(submenu, menu_item
1506 = gtk_menu_item_new_with_label(_("Pan")));
1507 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1508 submenu2 = gtk_menu_new());
1509 gtk_menu_append(submenu2, _menu_view_pan_up_item
1510 = gtk_menu_item_new_with_label(_("Up")));
1511 gtk_menu_append(submenu2, _menu_view_pan_down_item
1512 = gtk_menu_item_new_with_label(_("Down")));
1513 gtk_menu_append(submenu2, _menu_view_pan_left_item
1514 = gtk_menu_item_new_with_label(_("Left")));
1515 gtk_menu_append(submenu2, _menu_view_pan_right_item
1516 = gtk_menu_item_new_with_label(_("Right")));
1517 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1518 gtk_menu_append(submenu2, _menu_view_pan_north_item
1519 = gtk_menu_item_new_with_label(_("North")));
1520 gtk_menu_append(submenu2, _menu_view_pan_south_item
1521 = gtk_menu_item_new_with_label(_("South")));
1522 gtk_menu_append(submenu2, _menu_view_pan_west_item
1523 = gtk_menu_item_new_with_label(_("West")));
1524 gtk_menu_append(submenu2, _menu_view_pan_east_item
1525 = gtk_menu_item_new_with_label(_("East")));
1527 /* The "Go to" submenu. */
1528 gtk_menu_append(submenu, menu_item
1529 = gtk_menu_item_new_with_label(_("Go to")));
1530 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1531 submenu2 = gtk_menu_new());
1532 gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1533 = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1534 gtk_menu_append(submenu2, _menu_view_goto_address_item
1535 = gtk_menu_item_new_with_label(_("Address...")));
1536 gtk_menu_append(submenu2, _menu_view_goto_gps_item
1537 = gtk_menu_item_new_with_label(_("GPS Location")));
1538 gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1539 = gtk_menu_item_new_with_label(_("Next Waypoint")));
1540 gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1541 = gtk_menu_item_new_with_label(_("Nearest POI")));
1543 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1545 /* The "View"/"Show" submenu. */
1546 gtk_menu_append(submenu, menu_item
1547 = gtk_menu_item_new_with_label(_("Show")));
1548 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1549 submenu2 = gtk_menu_new());
1550 gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1551 = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1552 gtk_check_menu_item_set_active(
1553 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1555 gtk_menu_append(submenu2, _menu_view_show_scale_item
1556 = gtk_check_menu_item_new_with_label(_("Scale")));
1557 gtk_check_menu_item_set_active(
1558 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1560 gtk_menu_append(submenu2, _menu_view_show_comprose_item
1561 = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1562 gtk_check_menu_item_set_active(
1563 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1565 gtk_menu_append(submenu2, _menu_view_show_routes_item
1566 = gtk_check_menu_item_new_with_label(_("Route")));
1567 gtk_check_menu_item_set_active(
1568 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1569 _show_paths & ROUTES_MASK);
1570 gtk_menu_append(submenu2, _menu_view_show_tracks_item
1571 = gtk_check_menu_item_new_with_label(_("Track")));
1572 gtk_check_menu_item_set_active(
1573 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1574 _show_paths & TRACKS_MASK);
1575 gtk_menu_append(submenu2, _menu_view_show_velvec_item
1576 = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1577 gtk_check_menu_item_set_active(
1578 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1579 gtk_menu_append(submenu2, _menu_view_show_poi_item
1580 = gtk_check_menu_item_new_with_label(_("POI")));
1581 gtk_check_menu_item_set_active(
1582 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1584 /* The "View"/"Auto-Center" submenu. */
1585 gtk_menu_append(submenu, menu_item
1586 = gtk_menu_item_new_with_label(_("Auto-Center")));
1587 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1588 submenu2 = gtk_menu_new());
1589 gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1590 = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1591 gtk_check_menu_item_set_active(
1592 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1593 _center_mode == CENTER_LATLON);
1594 gtk_menu_append(submenu2, _menu_view_ac_lead_item
1595 = gtk_radio_menu_item_new_with_label_from_widget(
1596 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1597 gtk_check_menu_item_set_active(
1598 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1599 _center_mode == CENTER_LEAD);
1600 gtk_menu_append(submenu2, _menu_view_ac_none_item
1601 = gtk_radio_menu_item_new_with_label_from_widget(
1602 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1603 gtk_check_menu_item_set_active(
1604 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1607 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1609 gtk_menu_append(submenu, _menu_view_fullscreen_item
1610 = gtk_check_menu_item_new_with_label(_("Full Screen")));
1611 gtk_check_menu_item_set_active(
1612 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1614 /* The "GPS" submenu. */
1615 gtk_menu_append(menu, menu_item
1616 = gtk_menu_item_new_with_label(_("GPS")));
1617 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1618 submenu = gtk_menu_new());
1619 gtk_menu_append(submenu, _menu_gps_enable_item
1620 = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1621 gtk_check_menu_item_set_active(
1622 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item), _enable_gps);
1623 gtk_menu_append(submenu, _menu_gps_show_info_item
1624 = gtk_check_menu_item_new_with_label(_("Show Information")));
1625 gtk_check_menu_item_set_active(
1626 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1627 gtk_menu_append(submenu, _menu_gps_details_item
1628 = gtk_menu_item_new_with_label(_("Details...")));
1629 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1630 gtk_menu_append(submenu, _menu_gps_reset_item
1631 = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1632 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1634 gtk_menu_append(menu, gtk_separator_menu_item_new());
1636 /* The other menu items. */
1637 gtk_menu_append(menu, _menu_settings_item
1638 = gtk_menu_item_new_with_label(_("Settings...")));
1639 gtk_menu_append(menu, gtk_separator_menu_item_new());
1640 gtk_menu_append(menu, _menu_help_item
1641 = gtk_menu_item_new_with_label(_("Help...")));
1642 gtk_menu_append(menu, _menu_about_item
1643 = gtk_menu_item_new_with_label(_("About...")));
1644 gtk_menu_append(menu, _menu_close_item
1645 = gtk_menu_item_new_with_label(_("Close")));
1647 /* We need to show menu items. */
1648 gtk_widget_show_all(GTK_WIDGET(menu));
1650 hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1652 /* Connect the "Route" signals. */
1653 g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1654 G_CALLBACK(menu_cb_route_open), NULL);
1655 g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1656 G_CALLBACK(menu_cb_route_download), NULL);
1657 g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1658 G_CALLBACK(menu_cb_route_save), NULL);
1659 g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1660 G_CALLBACK(menu_cb_route_distnext), NULL);
1661 g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1662 G_CALLBACK(menu_cb_route_distlast), NULL);
1663 g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1664 G_CALLBACK(menu_cb_route_reset), NULL);
1665 g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1666 G_CALLBACK(menu_cb_route_clear), NULL);
1668 /* Connect the "Track" signals. */
1669 g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1670 G_CALLBACK(menu_cb_track_open), NULL);
1671 g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1672 G_CALLBACK(menu_cb_track_save), NULL);
1673 g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1674 G_CALLBACK(menu_cb_track_insert_break), NULL);
1675 g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1676 G_CALLBACK(menu_cb_track_insert_mark), NULL);
1677 g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1678 G_CALLBACK(menu_cb_track_distlast), NULL);
1679 g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1680 G_CALLBACK(menu_cb_track_distfirst), NULL);
1681 g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1682 G_CALLBACK(menu_cb_track_clear), NULL);
1683 g_signal_connect(G_OBJECT(_menu_track_enable_tracking_item), "toggled",
1684 G_CALLBACK(menu_cb_track_enable_tracking), NULL);
1686 /* Connect the "POI" signals. */
1687 g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1688 G_CALLBACK(menu_cb_poi_import), NULL);
1689 g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1690 G_CALLBACK(menu_cb_poi_download), NULL);
1691 g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1692 G_CALLBACK(menu_cb_poi_browse), NULL);
1693 g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1694 G_CALLBACK(menu_cb_poi_categories), NULL);
1696 /* Connect the "Maps" signals. */
1697 g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1698 G_CALLBACK(menu_cb_maps_repoman), NULL);
1699 g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1700 G_CALLBACK(menu_cb_maps_mapman), NULL);
1701 g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1702 G_CALLBACK(menu_cb_maps_auto_download), NULL);
1704 /* Connect the "View" signals. */
1705 g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1706 G_CALLBACK(menu_cb_view_zoom_in), NULL);
1707 g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1708 G_CALLBACK(menu_cb_view_zoom_out), NULL);
1710 g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1711 G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1712 g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1713 G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1714 g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1715 G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1716 g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1717 G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1719 g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1720 G_CALLBACK(menu_cb_view_pan_up), NULL);
1721 g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1722 G_CALLBACK(menu_cb_view_pan_down), NULL);
1723 g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1724 G_CALLBACK(menu_cb_view_pan_left), NULL);
1725 g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1726 G_CALLBACK(menu_cb_view_pan_right), NULL);
1727 g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1728 G_CALLBACK(menu_cb_view_pan_north), NULL);
1729 g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1730 G_CALLBACK(menu_cb_view_pan_south), NULL);
1731 g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1732 G_CALLBACK(menu_cb_view_pan_west), NULL);
1733 g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1734 G_CALLBACK(menu_cb_view_pan_east), NULL);
1736 g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1737 G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1738 g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1739 G_CALLBACK(menu_cb_view_goto_address), NULL);
1740 g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1741 G_CALLBACK(menu_cb_view_goto_gps), NULL);
1742 g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1743 G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1744 g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1745 G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1747 g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1748 G_CALLBACK(menu_cb_view_show_tracks), NULL);
1749 g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1750 G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1751 g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1752 G_CALLBACK(menu_cb_view_show_scale), NULL);
1753 g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1754 G_CALLBACK(menu_cb_view_show_comprose), NULL);
1755 g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1756 G_CALLBACK(menu_cb_view_show_routes), NULL);
1757 g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1758 G_CALLBACK(menu_cb_view_show_velvec), NULL);
1759 g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1760 G_CALLBACK(menu_cb_view_show_poi), NULL);
1762 g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1763 G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1764 g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1765 G_CALLBACK(menu_cb_view_ac_lead), NULL);
1766 g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1767 G_CALLBACK(menu_cb_view_ac_none), NULL);
1769 g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1770 G_CALLBACK(menu_cb_view_fullscreen), NULL);
1772 /* Connect the "GPS" signals. */
1773 g_signal_connect(G_OBJECT(_menu_gps_enable_item), "toggled",
1774 G_CALLBACK(menu_cb_gps_enable), NULL);
1775 g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1776 G_CALLBACK(menu_cb_gps_show_info), NULL);
1777 g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1778 G_CALLBACK(menu_cb_gps_details), NULL);
1779 g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1780 G_CALLBACK(menu_cb_gps_reset), NULL);
1782 /* Connect the other menu item signals. */
1783 g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1784 G_CALLBACK(menu_cb_settings), NULL);
1785 g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1786 G_CALLBACK(menu_cb_help), NULL);
1787 g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1788 G_CALLBACK(menu_cb_about), NULL);
1789 g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1790 G_CALLBACK(gtk_main_quit), NULL);
1792 vprintf("%s(): return\n", __PRETTY_FUNCTION__);