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 static GtkWidget *_menu_route_open_item = NULL;
59 static GtkWidget *_menu_route_download_item = NULL;
60 static GtkWidget *_menu_route_save_item = NULL;
61 static GtkWidget *_menu_route_distnext_item = NULL;
62 static GtkWidget *_menu_route_distlast_item = NULL;
63 static GtkWidget *_menu_route_reset_item = NULL;
64 static GtkWidget *_menu_route_clear_item = NULL;
65 static GtkWidget *_menu_track_open_item = NULL;
66 static GtkWidget *_menu_track_save_item = NULL;
67 static GtkWidget *_menu_track_insert_break_item = NULL;
68 static GtkWidget *_menu_track_insert_mark_item = NULL;
69 static GtkWidget *_menu_track_distlast_item = NULL;
70 static GtkWidget *_menu_track_distfirst_item = NULL;
71 static GtkWidget *_menu_track_clear_item = NULL;
72 static GtkWidget *_menu_poi_import_item = NULL;
73 static GtkWidget *_menu_poi_download_item = NULL;
74 static GtkWidget *_menu_poi_browse_item = NULL;
75 static GtkWidget *_menu_poi_categories_item = NULL;
76 static GtkWidget *_menu_maps_submenu = NULL;
77 static GtkWidget *_menu_maps_mapman_item = NULL;
78 static GtkWidget *_menu_maps_repoman_item = NULL;
79 static GtkWidget *_menu_view_zoom_in_item = NULL;
80 static GtkWidget *_menu_view_zoom_out_item = NULL;
81 static GtkWidget *_menu_view_rotate_clock_item = NULL;
82 static GtkWidget *_menu_view_rotate_counter_item = NULL;
83 static GtkWidget *_menu_view_rotate_reset_item = NULL;
84 static GtkWidget *_menu_view_pan_up_item = NULL;
85 static GtkWidget *_menu_view_pan_down_item = NULL;
86 static GtkWidget *_menu_view_pan_left_item = NULL;
87 static GtkWidget *_menu_view_pan_right_item = NULL;
88 static GtkWidget *_menu_view_pan_north_item = NULL;
89 static GtkWidget *_menu_view_pan_south_item = NULL;
90 static GtkWidget *_menu_view_pan_west_item = NULL;
91 static GtkWidget *_menu_view_pan_east_item = NULL;
92 static GtkWidget *_menu_view_show_zoomlevel_item = NULL;
93 static GtkWidget *_menu_view_show_comprose_item = NULL;
94 static GtkWidget *_menu_view_show_velvec_item = NULL;
95 static GtkWidget *_menu_view_goto_latlon_item = NULL;
96 static GtkWidget *_menu_view_goto_address_item = NULL;
97 static GtkWidget *_menu_view_goto_gps_item = NULL;
98 static GtkWidget *_menu_view_goto_nextway_item = NULL;
99 static GtkWidget *_menu_view_goto_nearpoi_item = NULL;
100 static GtkWidget *_menu_settings_item = NULL;
101 static GtkWidget *_menu_help_item = NULL;
102 static GtkWidget *_menu_about_item = NULL;
103 static GtkWidget *_menu_close_item = NULL;
105 /****************************************************************************
106 * BELOW: ROUTE MENU ********************************************************
107 ****************************************************************************/
110 menu_cb_route_open(GtkMenuItem *item)
114 printf("%s()\n", __PRETTY_FUNCTION__);
116 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
117 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_OPEN))
119 /* If auto is enabled, append the route, otherwise replace it. */
120 if(gpx_path_parse(&_route, buffer, size,
121 _autoroute_data.enabled ? 0 : 1))
123 path_save_route_to_db();
127 /* Find the nearest route point, if we're connected. */
128 route_find_nearest_point();
131 MACRO_BANNER_SHOW_INFO(_window, _("Route Opened"));
134 popup_error(_window, _("Error parsing GPX file."));
138 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
143 menu_cb_route_download(GtkMenuItem *item)
145 printf("%s()\n", __PRETTY_FUNCTION__);
146 route_download(NULL);
147 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
152 menu_cb_route_save(GtkMenuItem *item)
154 GnomeVFSHandle *handle;
155 printf("%s()\n", __PRETTY_FUNCTION__);
157 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
158 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_SAVE))
160 if(gpx_path_write(&_route, handle))
162 MACRO_BANNER_SHOW_INFO(_window, _("Route Saved"));
165 popup_error(_window, _("Error writing GPX file."));
166 gnome_vfs_close(handle);
169 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
174 menu_cb_route_distnext(GtkMenuItem *item)
176 printf("%s()\n", __PRETTY_FUNCTION__);
178 route_show_distance_to_next();
180 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
185 menu_cb_route_distlast(GtkMenuItem *item)
187 printf("%s()\n", __PRETTY_FUNCTION__);
189 route_show_distance_to_last();
191 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
196 menu_cb_route_reset(GtkMenuItem *item)
198 printf("%s()\n", __PRETTY_FUNCTION__);
202 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
207 menu_cb_route_clear(GtkMenuItem *item)
209 printf("%s()\n", __PRETTY_FUNCTION__);
212 MACRO_PATH_FREE(_route);
213 MACRO_PATH_INIT(_route);
214 path_save_route_to_db();
215 route_find_nearest_point();
218 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
222 /****************************************************************************
223 * ABOVE: ROUTE MENU ********************************************************
224 ****************************************************************************/
226 /****************************************************************************
227 * BELOW: TRACK MENU ********************************************************
228 ****************************************************************************/
231 menu_cb_track_open(GtkMenuItem *item)
235 printf("%s()\n", __PRETTY_FUNCTION__);
237 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
238 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_OPEN))
240 if(gpx_path_parse(&_track, buffer, size, -1))
243 MACRO_BANNER_SHOW_INFO(_window, _("Track Opened"));
246 popup_error(_window, _("Error parsing GPX file."));
250 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
255 menu_cb_track_save(GtkMenuItem *item)
257 GnomeVFSHandle *handle;
258 printf("%s()\n", __PRETTY_FUNCTION__);
260 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
261 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_SAVE))
263 if(gpx_path_write(&_track, handle))
265 MACRO_BANNER_SHOW_INFO(_window, _("Track Saved"));
268 popup_error(_window, _("Error writing GPX file."));
269 gnome_vfs_close(handle);
272 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
277 menu_cb_track_insert_break(GtkMenuItem *item)
279 printf("%s()\n", __PRETTY_FUNCTION__);
281 track_insert_break(TRUE);
283 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
288 menu_cb_track_insert_mark(GtkMenuItem *item)
291 gchar tmp1[LL_FMT_LEN], tmp2[LL_FMT_LEN], *p_latlon;
292 static GtkWidget *dialog = NULL;
293 static GtkWidget *table = NULL;
294 static GtkWidget *label = NULL;
295 static GtkWidget *lbl_latlon = NULL;
296 static GtkWidget *txt_scroll = NULL;
297 static GtkWidget *txt_desc = NULL;
298 printf("%s()\n", __PRETTY_FUNCTION__);
302 dialog = gtk_dialog_new_with_buttons(_("Insert Mark"),
303 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
304 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
305 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
308 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
309 table = gtk_table_new(2, 2, FALSE), TRUE, TRUE, 0);
311 gtk_table_attach(GTK_TABLE(table),
312 label = gtk_label_new(_("Lat, Lon:")),
313 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
314 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
316 gtk_table_attach(GTK_TABLE(table),
317 lbl_latlon = gtk_label_new(""),
318 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
319 gtk_misc_set_alignment(GTK_MISC(lbl_latlon), 0.0f, 0.5f);
321 gtk_table_attach(GTK_TABLE(table),
322 label = gtk_label_new(_("Description")),
323 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
324 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
326 txt_scroll = gtk_scrolled_window_new(NULL, NULL);
327 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(txt_scroll),
329 gtk_table_attach(GTK_TABLE(table),
331 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
333 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scroll),
334 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
336 txt_desc = gtk_text_view_new ();
337 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt_desc), GTK_WRAP_WORD);
339 gtk_container_add(GTK_CONTAINER(txt_scroll), txt_desc);
340 gtk_widget_set_size_request(GTK_WIDGET(txt_scroll), 400, 60);
343 unit2latlon(_pos.unitx, _pos.unity, lat, lon);
344 lat_format(lat, tmp1);
345 lon_format(lon, tmp2);
346 p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2);
347 gtk_label_set_text(GTK_LABEL(lbl_latlon), p_latlon);
350 gtk_text_buffer_set_text(
351 gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)), "", 0);
353 gtk_widget_show_all(dialog);
355 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
358 GtkTextIter ti1, ti2;
361 tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc));
362 gtk_text_buffer_get_iter_at_offset(tbuf, &ti1, 0);
363 gtk_text_buffer_get_end_iter(tbuf, &ti2);
364 desc = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
368 MACRO_PATH_INCREMENT_WTAIL(_track);
369 _track.wtail->point = _track.tail;
371 = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
376 _("Please provide a description for the mark."));
382 MACRO_QUEUE_DRAW_AREA();
385 gtk_widget_hide(dialog);
387 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
392 menu_cb_track_distlast(GtkMenuItem *item)
394 printf("%s()\n", __PRETTY_FUNCTION__);
396 track_show_distance_from_last();
398 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
403 menu_cb_track_distfirst(GtkMenuItem *item)
405 printf("%s()\n", __PRETTY_FUNCTION__);
407 track_show_distance_from_first();
409 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
414 menu_cb_track_clear(GtkMenuItem *item)
416 printf("%s()\n", __PRETTY_FUNCTION__);
420 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
425 menu_cb_track_enable_tracking(GtkMenuItem *item)
427 printf("%s()\n", __PRETTY_FUNCTION__);
429 if(!(_enable_tracking = gtk_check_menu_item_get_active(
430 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item))))
432 track_insert_break(FALSE); /* FALSE = not temporary */
433 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Disabled"));
437 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Enabled"));
441 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
445 /****************************************************************************
446 * ABOVE: TRACK MENU ********************************************************
447 ****************************************************************************/
449 /****************************************************************************
450 * BELOW: POI MENU **********************************************************
451 ****************************************************************************/
454 menu_cb_poi_import(GtkMenuItem *item)
456 printf("%s()\n", __PRETTY_FUNCTION__);
458 if(poi_import_dialog(_center.unitx, _center.unity))
461 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
466 menu_cb_poi_download(GtkMenuItem *item)
468 printf("%s()\n", __PRETTY_FUNCTION__);
470 if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
473 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
478 menu_cb_poi_browse(GtkMenuItem *item)
480 printf("%s()\n", __PRETTY_FUNCTION__);
482 if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
485 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
490 menu_cb_poi_categories(GtkMenuItem *item)
492 printf("%s()\n", __PRETTY_FUNCTION__);
494 if(category_list_dialog(_window))
497 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
501 /****************************************************************************
502 * ABOVE: POI MENU **********************************************************
503 ****************************************************************************/
505 /****************************************************************************
506 * BELOW: MAPS MENU *********************************************************
507 ****************************************************************************/
510 menu_cb_maps_repoman(GtkMenuItem *item)
512 printf("%s()\n", __PRETTY_FUNCTION__);
514 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
519 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
521 printf("%s()\n", __PRETTY_FUNCTION__);
523 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
525 repo_set_curr(new_repo);
526 map_refresh_mark(TRUE);
528 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
533 menu_cb_maps_mapman(GtkMenuItem *item)
535 printf("%s()\n", __PRETTY_FUNCTION__);
539 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
544 menu_cb_maps_auto_download(GtkMenuItem *item)
546 printf("%s()\n", __PRETTY_FUNCTION__);
548 if((_auto_download = gtk_check_menu_item_get_active(
549 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
551 if(_curr_repo->url == REPOTYPE_NONE)
553 _("NOTE: You must set a Map URI in the current repository in "
554 "order to download maps."));
555 map_refresh_mark(TRUE);
558 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
562 /****************************************************************************
563 * ABOVE: MAPS MENU *********************************************************
564 ****************************************************************************/
566 /****************************************************************************
567 * BELOW: VIEW/ZOOM MENU ****************************************************
568 ****************************************************************************/
571 menu_cb_view_zoom_in(GtkMenuItem *item)
573 printf("%s()\n", __PRETTY_FUNCTION__);
578 snprintf(buffer, sizeof(buffer),"%s %d",
579 _("Zoom to Level"), _next_zoom - 1);
580 MACRO_BANNER_SHOW_INFO(_window, buffer);
581 map_set_zoom(_next_zoom - 1);
584 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
589 menu_cb_view_zoom_out(GtkMenuItem *item)
591 printf("%s()\n", __PRETTY_FUNCTION__);
596 snprintf(buffer, sizeof(buffer),"%s %d",
597 _("Zoom to Level"), _next_zoom + 1);
598 MACRO_BANNER_SHOW_INFO(_window, buffer);
599 map_set_zoom(_next_zoom + 1);
602 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
606 /****************************************************************************
607 * ABOVE: VIEW/ZOOM MENU ****************************************************
608 ****************************************************************************/
610 /****************************************************************************
611 * BELOW: VIEW/ROTATE MENU **************************************************
612 ****************************************************************************/
615 menu_cb_view_rotate_clock(GtkMenuItem *item)
617 printf("%s()\n", __PRETTY_FUNCTION__);
619 map_rotate(-ROTATE_DEGREES);
621 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
626 menu_cb_view_rotate_counter(GtkMenuItem *item)
628 printf("%s()\n", __PRETTY_FUNCTION__);
630 map_rotate(ROTATE_DEGREES);
632 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
637 menu_cb_view_rotate_reset(GtkMenuItem *item)
639 printf("%s()\n", __PRETTY_FUNCTION__);
641 map_rotate(-_next_map_rotate_angle);
643 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
648 menu_cb_view_rotate_auto(GtkMenuItem *item)
650 printf("%s()\n", __PRETTY_FUNCTION__);
652 if(gtk_check_menu_item_get_active(
653 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
655 _center_rotate = TRUE;
657 map_refresh_mark(TRUE);
658 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
662 _center_rotate = FALSE;
663 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
666 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
670 /****************************************************************************
671 * ABOVE: VIEW/ROTATE MENU **************************************************
672 ****************************************************************************/
674 /****************************************************************************
675 * BELOW: VIEW/PAN MENU *****************************************************
676 ****************************************************************************/
679 menu_cb_view_pan_up(GtkMenuItem *item)
681 gfloat panx_adj, pany_adj;
682 printf("%s()\n", __PRETTY_FUNCTION__);
684 /* Adjust for rotate angle. */
685 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
688 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
689 pixel2unit((gint)(pany_adj + 0.5f)));
691 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
696 menu_cb_view_pan_down(GtkMenuItem *item)
698 gfloat panx_adj, pany_adj;
699 printf("%s()\n", __PRETTY_FUNCTION__);
701 /* Adjust for rotate angle. */
702 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
705 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
706 pixel2unit((gint)(pany_adj + 0.5f)));
708 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
713 menu_cb_view_pan_left(GtkMenuItem *item)
715 gfloat panx_adj, pany_adj;
716 printf("%s()\n", __PRETTY_FUNCTION__);
718 /* Adjust for rotate angle. */
719 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
722 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
723 pixel2unit((gint)(pany_adj + 0.5f)));
725 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
730 menu_cb_view_pan_right(GtkMenuItem *item)
732 gfloat panx_adj, pany_adj;
733 printf("%s()\n", __PRETTY_FUNCTION__);
735 /* Adjust for rotate angle. */
736 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
739 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
740 pixel2unit((gint)(pany_adj + 0.5f)));
742 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
747 menu_cb_view_pan_north(GtkMenuItem *item)
749 printf("%s()\n", __PRETTY_FUNCTION__);
751 map_pan(0, -pixel2unit(PAN_PIXELS));
753 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
758 menu_cb_view_pan_south(GtkMenuItem *item)
760 printf("%s()\n", __PRETTY_FUNCTION__);
762 map_pan(0, pixel2unit(PAN_PIXELS));
764 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
769 menu_cb_view_pan_west(GtkMenuItem *item)
771 printf("%s()\n", __PRETTY_FUNCTION__);
773 map_pan(-pixel2unit(PAN_PIXELS), 0);
775 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
780 menu_cb_view_pan_east(GtkMenuItem *item)
782 printf("%s()\n", __PRETTY_FUNCTION__);
784 map_pan(pixel2unit(PAN_PIXELS), 0);
786 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
790 /****************************************************************************
791 * ABOVE: VIEW/PAN MENU *****************************************************
792 ****************************************************************************/
794 /****************************************************************************
795 * BELOW: VIEW/GOTO MENU ****************************************************
796 ****************************************************************************/
799 menu_cb_view_goto_latlon(GtkMenuItem *item)
801 static GtkWidget *dialog = NULL;
802 static GtkWidget *table = NULL;
803 static GtkWidget *label = NULL;
804 static GtkWidget *txt_lat = NULL;
805 static GtkWidget *txt_lon = NULL;
806 printf("%s()\n", __PRETTY_FUNCTION__);
810 dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
811 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
812 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
813 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
816 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
817 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
819 gtk_table_attach(GTK_TABLE(table),
820 label = gtk_label_new(_("Latitude")),
821 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
822 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
824 gtk_table_attach(GTK_TABLE(table),
825 txt_lat = gtk_entry_new(),
826 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
827 gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
828 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
830 g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
831 HILDON_GTK_INPUT_MODE_FULL, NULL);
833 g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
834 g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
835 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
838 gtk_table_attach(GTK_TABLE(table),
839 label = gtk_label_new(_("Longitude")),
840 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
841 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
843 gtk_table_attach(GTK_TABLE(table),
844 txt_lon = gtk_entry_new(),
845 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
846 gtk_entry_set_width_chars(GTK_ENTRY(txt_lon), 16);
847 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
849 g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
850 HILDON_GTK_INPUT_MODE_FULL, NULL);
852 g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
853 g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
854 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
858 /* Initialize with the current center position. */
862 unit2latlon(_center.unitx, _center.unity, lat, lon);
863 lat_format(lat, buffer);
864 gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
865 lon_format(lon, buffer);
866 gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
869 gtk_widget_show_all(dialog);
871 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
878 text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
879 lat = strdmstod(text, &error_check);
880 if(text == error_check || lat < -90. || lat > 90.) {
881 popup_error(dialog, _("Invalid Latitude"));
885 text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
886 lon = strdmstod(text, &error_check);
887 if(text == error_check || lon < -180. || lon > 180.) {
888 popup_error(dialog, _("Invalid Longitude"));
892 latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
894 gtk_check_menu_item_set_active(
895 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
896 map_center_unit(sel_unit);
899 gtk_widget_hide(dialog);
900 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
905 menu_cb_view_goto_address(GtkMenuItem *item)
907 static GtkWidget *dialog = NULL;
908 static GtkWidget *table = NULL;
909 static GtkWidget *label = NULL;
910 static GtkWidget *txt_addr = NULL;
911 printf("%s()\n", __PRETTY_FUNCTION__);
915 GtkEntryCompletion *comp;
916 dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
917 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
918 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
919 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
922 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
923 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
925 gtk_table_attach(GTK_TABLE(table),
926 label = gtk_label_new(_("Address")),
927 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
928 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
930 gtk_table_attach(GTK_TABLE(table),
931 txt_addr = gtk_entry_new(),
932 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
933 gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
934 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
936 /* Set up auto-completion. */
937 comp = gtk_entry_completion_new();
938 gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
939 gtk_entry_completion_set_text_column(comp, 0);
940 gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
943 gtk_widget_show_all(dialog);
945 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
947 Point origin = locate_address(dialog,
948 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
951 MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
954 gtk_check_menu_item_set_active(
955 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
957 map_center_unit(origin);
959 /* Success! Get out of the while loop. */
963 gtk_widget_hide(dialog);
964 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
969 menu_cb_view_goto_gps(GtkMenuItem *item)
971 printf("%s()\n", __PRETTY_FUNCTION__);
974 gtk_check_menu_item_set_active(
975 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
977 map_center_unit(_pos);
979 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
984 menu_cb_view_goto_nextway(GtkMenuItem *item)
987 printf("%s()\n", __PRETTY_FUNCTION__);
989 next_way = path_get_next_way();
991 if(next_way && next_way->point->unity)
994 gtk_check_menu_item_set_active(
995 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
997 map_center_unit(*next_way->point);
1001 MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
1004 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1009 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
1011 printf("%s()\n", __PRETTY_FUNCTION__);
1018 if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
1019 : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
1021 /* Auto-Center is enabled - use the GPS position. */
1023 latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
1024 banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
1025 MACRO_BANNER_SHOW_INFO(_window, banner);
1031 if(_center_mode > 0)
1032 gtk_check_menu_item_set_active(
1033 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
1035 map_center_unit(unit);
1039 MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
1040 /* Auto-Center is disabled - use the view center. */
1044 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1048 /****************************************************************************
1049 * ABOVE: VIEW/GOTO MENU ****************************************************
1050 ****************************************************************************/
1052 /****************************************************************************
1053 * BELOW: VIEW/SHOW MENU ****************************************************
1054 ****************************************************************************/
1057 menu_cb_view_show_tracks(GtkMenuItem *item)
1059 printf("%s()\n", __PRETTY_FUNCTION__);
1061 _show_paths ^= TRACKS_MASK;
1062 if(gtk_check_menu_item_get_active(
1063 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1065 _show_paths |= TRACKS_MASK;
1067 MACRO_QUEUE_DRAW_AREA();
1068 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1072 _show_paths &= ~TRACKS_MASK;
1074 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1077 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1082 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1084 printf("%s()\n", __PRETTY_FUNCTION__);
1086 _show_zoomlevel = gtk_check_menu_item_get_active(
1087 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1090 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1095 menu_cb_view_show_scale(GtkMenuItem *item)
1097 printf("%s()\n", __PRETTY_FUNCTION__);
1099 _show_scale = gtk_check_menu_item_get_active(
1100 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1103 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1108 menu_cb_view_show_comprose(GtkMenuItem *item)
1110 printf("%s()\n", __PRETTY_FUNCTION__);
1112 _show_comprose = gtk_check_menu_item_get_active(
1113 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1116 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1121 menu_cb_view_show_routes(GtkMenuItem *item)
1123 printf("%s()\n", __PRETTY_FUNCTION__);
1125 if(gtk_check_menu_item_get_active(
1126 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1128 _show_paths |= ROUTES_MASK;
1130 MACRO_QUEUE_DRAW_AREA();
1131 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1135 _show_paths &= ~ROUTES_MASK;
1137 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1140 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1145 menu_cb_view_show_velvec(GtkMenuItem *item)
1147 printf("%s()\n", __PRETTY_FUNCTION__);
1149 _show_velvec = gtk_check_menu_item_get_active(
1150 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1153 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1158 menu_cb_view_show_poi(GtkMenuItem *item)
1160 printf("%s()\n", __PRETTY_FUNCTION__);
1162 _show_poi = gtk_check_menu_item_get_active(
1163 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1166 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1170 /****************************************************************************
1171 * ABOVE: VIEW/SHOW MENU ****************************************************
1172 ****************************************************************************/
1174 /****************************************************************************
1175 * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1176 ****************************************************************************/
1179 menu_cb_view_ac_lead(GtkMenuItem *item)
1181 printf("%s()\n", __PRETTY_FUNCTION__);
1183 if(gtk_check_menu_item_get_active(
1184 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1186 _center_mode = CENTER_LEAD;
1187 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1188 map_refresh_mark(TRUE);
1191 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1196 menu_cb_view_ac_latlon(GtkMenuItem *item)
1198 printf("%s()\n", __PRETTY_FUNCTION__);
1200 if(gtk_check_menu_item_get_active(
1201 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1203 _center_mode = CENTER_LATLON;
1204 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1205 map_refresh_mark(TRUE);
1208 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1213 menu_cb_view_ac_none(GtkMenuItem *item)
1215 printf("%s()\n", __PRETTY_FUNCTION__);
1217 if(gtk_check_menu_item_get_active(
1218 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1220 _center_mode = -_center_mode;
1221 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1224 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1228 /****************************************************************************
1229 * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1230 ****************************************************************************/
1233 menu_cb_view_fullscreen(GtkMenuItem *item)
1235 printf("%s()\n", __PRETTY_FUNCTION__);
1237 if((_fullscreen = gtk_check_menu_item_get_active(
1238 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1239 gtk_window_fullscreen(GTK_WINDOW(_window));
1241 gtk_window_unfullscreen(GTK_WINDOW(_window));
1243 g_idle_add((GSourceFunc)window_present, NULL);
1245 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1249 /****************************************************************************
1250 * BELOW: GPS MENU **********************************************************
1251 ****************************************************************************/
1254 menu_cb_gps_enable(GtkMenuItem *item)
1256 printf("%s()\n", __PRETTY_FUNCTION__);
1258 if((_enable_gps = gtk_check_menu_item_get_active(
1259 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item))))
1266 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1267 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1269 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1274 menu_cb_gps_show_info(GtkMenuItem *item)
1276 printf("%s()\n", __PRETTY_FUNCTION__);
1278 _gps_info = gtk_check_menu_item_get_active(
1279 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1283 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1288 menu_cb_gps_details(GtkMenuItem *item)
1290 printf("%s()\n", __PRETTY_FUNCTION__);
1294 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1299 menu_cb_gps_reset(GtkMenuItem *item)
1301 printf("%s()\n", __PRETTY_FUNCTION__);
1305 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1309 /****************************************************************************
1310 * ABOVE: GPS MENU **********************************************************
1311 ****************************************************************************/
1314 menu_cb_settings(GtkMenuItem *item)
1316 printf("%s()\n", __PRETTY_FUNCTION__);
1318 if(settings_dialog())
1320 /* Settings have changed - reconnect to receiver. */
1328 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1333 menu_cb_help(GtkMenuItem *item)
1335 printf("%s()\n", __PRETTY_FUNCTION__);
1338 hildon_help_show(_osso, HELP_ID_INTRO, 0);
1340 ossohelp_show(_osso, HELP_ID_INTRO, 0);
1343 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1348 menu_cb_about(GtkMenuItem *item)
1350 printf("%s()\n", __PRETTY_FUNCTION__);
1353 hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1355 ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1358 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1365 menu_maps_remove_repos()
1368 printf("%s()\n", __PRETTY_FUNCTION__);
1370 /* Delete one menu item for each repo. */
1371 for(curr = _repo_list; curr; curr = curr->next)
1373 gtk_widget_destroy(gtk_container_get_children(
1374 GTK_CONTAINER(_menu_maps_submenu))->data);
1376 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1380 menu_maps_add_repos()
1383 GtkWidget *last_repo = NULL;
1384 printf("%s()\n", __PRETTY_FUNCTION__);
1386 for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1388 RepoData *rd = (RepoData*)curr->data;
1389 GtkWidget *menu_item;
1391 gtk_menu_prepend(_menu_maps_submenu, menu_item
1392 = gtk_radio_menu_item_new_with_label_from_widget(
1393 GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1396 gtk_menu_prepend(_menu_maps_submenu, menu_item
1397 = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1398 last_repo = menu_item;
1400 gtk_check_menu_item_set_active(
1401 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1402 rd->menu_item = menu_item;
1405 /* Add signals (must be after entire menu is built). */
1407 GList *currmi = gtk_container_get_children(
1408 GTK_CONTAINER(_menu_maps_submenu));
1409 for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1411 g_signal_connect(G_OBJECT(currmi->data), "activate",
1412 G_CALLBACK(menu_cb_maps_select), curr->data);
1416 gtk_widget_show_all(_menu_maps_submenu);
1417 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1421 * Create the menu items needed for the drop down menu.
1426 /* Create needed handles. */
1429 GtkWidget *submenu2;
1430 GtkWidget *menu_item;
1431 printf("%s()\n", __PRETTY_FUNCTION__);
1433 /* Get the menu of our view. */
1434 menu = GTK_MENU(gtk_menu_new());
1436 /* Create the menu items. */
1438 /* The "Routes" submenu. */
1439 gtk_menu_append(menu, menu_item
1440 = gtk_menu_item_new_with_label(_("Route")));
1441 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1442 submenu = gtk_menu_new());
1443 gtk_menu_append(submenu, _menu_route_open_item
1444 = gtk_menu_item_new_with_label(_("Open...")));
1445 gtk_menu_append(submenu, _menu_route_download_item
1446 = gtk_menu_item_new_with_label(_("Download...")));
1447 gtk_menu_append(submenu, _menu_route_save_item
1448 = gtk_menu_item_new_with_label(_("Save...")));
1449 gtk_menu_append(submenu, _menu_route_distnext_item
1450 = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1451 gtk_menu_append(submenu, _menu_route_distlast_item
1452 = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1453 gtk_menu_append(submenu, _menu_route_reset_item
1454 = gtk_menu_item_new_with_label(_("Reset")));
1455 gtk_menu_append(submenu, _menu_route_clear_item
1456 = gtk_menu_item_new_with_label(_("Clear")));
1458 /* The "Track" submenu. */
1459 gtk_menu_append(menu, menu_item
1460 = gtk_menu_item_new_with_label(_("Track")));
1461 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1462 submenu = gtk_menu_new());
1463 gtk_menu_append(submenu, _menu_track_open_item
1464 = gtk_menu_item_new_with_label(_("Open...")));
1465 gtk_menu_append(submenu, _menu_track_save_item
1466 = gtk_menu_item_new_with_label(_("Save...")));
1467 gtk_menu_append(submenu, _menu_track_insert_break_item
1468 = gtk_menu_item_new_with_label(_("Insert Break")));
1469 gtk_menu_append(submenu, _menu_track_insert_mark_item
1470 = gtk_menu_item_new_with_label(_("Insert Mark...")));
1471 gtk_menu_append(submenu, _menu_track_distlast_item
1472 = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1473 gtk_menu_append(submenu, _menu_track_distfirst_item
1474 = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1475 gtk_menu_append(submenu, _menu_track_clear_item
1476 = gtk_menu_item_new_with_label(_("Clear")));
1477 gtk_menu_append(submenu, _menu_track_enable_tracking_item
1478 = gtk_check_menu_item_new_with_label(_("Enable Tracking")));
1479 gtk_check_menu_item_set_active(
1480 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item), _enable_tracking);
1482 /* The "POI" submenu. */
1483 gtk_menu_append(menu, menu_item = _menu_poi_item
1484 = gtk_menu_item_new_with_label(_("POI")));
1485 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1486 submenu = gtk_menu_new());
1487 gtk_menu_append(submenu, _menu_poi_import_item
1488 = gtk_menu_item_new_with_label(_("Import...")));
1489 gtk_menu_append(submenu, _menu_poi_download_item
1490 = gtk_menu_item_new_with_label(_("Download...")));
1491 gtk_menu_append(submenu, _menu_poi_browse_item
1492 = gtk_menu_item_new_with_label(_("Browse...")));
1493 gtk_menu_append(submenu, _menu_poi_categories_item
1494 = gtk_menu_item_new_with_label(_("Categories...")));
1496 /* The "Maps" submenu. */
1497 gtk_menu_append(menu, menu_item
1498 = gtk_menu_item_new_with_label(_("Maps")));
1499 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1500 _menu_maps_submenu = gtk_menu_new());
1501 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1502 gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1503 = gtk_menu_item_new_with_label(_("Manage Maps...")));
1504 gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1505 = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1506 gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1507 = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1508 gtk_check_menu_item_set_active(
1509 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1510 menu_maps_add_repos();
1512 gtk_menu_append(menu, gtk_separator_menu_item_new());
1514 /* The "View" submenu. */
1515 gtk_menu_append(menu, menu_item
1516 = gtk_menu_item_new_with_label(_("View")));
1517 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1518 submenu = gtk_menu_new());
1520 /* The "View"/"Zoom" submenu. */
1521 gtk_menu_append(submenu, menu_item
1522 = gtk_menu_item_new_with_label(_("Zoom")));
1523 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1524 submenu2 = gtk_menu_new());
1525 gtk_menu_append(submenu2, _menu_view_zoom_in_item
1526 = gtk_menu_item_new_with_label(_("Zoom In")));
1527 gtk_menu_append(submenu2, _menu_view_zoom_out_item
1528 = gtk_menu_item_new_with_label(_("Zoom Out")));
1530 /* The "View"/"Rotate" submenu. */
1531 gtk_menu_append(submenu, menu_item
1532 = gtk_menu_item_new_with_label(_("Rotate")));
1533 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1534 submenu2 = gtk_menu_new());
1535 gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1536 = gtk_menu_item_new_with_label(_("Clockwise")));
1537 gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1538 = gtk_menu_item_new_with_label(_("Counter")));
1539 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1540 gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1541 = gtk_menu_item_new_with_label(_("Reset")));
1542 gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1543 = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1544 gtk_check_menu_item_set_active(
1545 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1547 /* The "View"/"Pan" submenu. */
1548 gtk_menu_append(submenu, menu_item
1549 = gtk_menu_item_new_with_label(_("Pan")));
1550 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1551 submenu2 = gtk_menu_new());
1552 gtk_menu_append(submenu2, _menu_view_pan_up_item
1553 = gtk_menu_item_new_with_label(_("Up")));
1554 gtk_menu_append(submenu2, _menu_view_pan_down_item
1555 = gtk_menu_item_new_with_label(_("Down")));
1556 gtk_menu_append(submenu2, _menu_view_pan_left_item
1557 = gtk_menu_item_new_with_label(_("Left")));
1558 gtk_menu_append(submenu2, _menu_view_pan_right_item
1559 = gtk_menu_item_new_with_label(_("Right")));
1560 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1561 gtk_menu_append(submenu2, _menu_view_pan_north_item
1562 = gtk_menu_item_new_with_label(_("North")));
1563 gtk_menu_append(submenu2, _menu_view_pan_south_item
1564 = gtk_menu_item_new_with_label(_("South")));
1565 gtk_menu_append(submenu2, _menu_view_pan_west_item
1566 = gtk_menu_item_new_with_label(_("West")));
1567 gtk_menu_append(submenu2, _menu_view_pan_east_item
1568 = gtk_menu_item_new_with_label(_("East")));
1570 /* The "Go to" submenu. */
1571 gtk_menu_append(submenu, menu_item
1572 = gtk_menu_item_new_with_label(_("Go to")));
1573 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1574 submenu2 = gtk_menu_new());
1575 gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1576 = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1577 gtk_menu_append(submenu2, _menu_view_goto_address_item
1578 = gtk_menu_item_new_with_label(_("Address...")));
1579 gtk_menu_append(submenu2, _menu_view_goto_gps_item
1580 = gtk_menu_item_new_with_label(_("GPS Location")));
1581 gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1582 = gtk_menu_item_new_with_label(_("Next Waypoint")));
1583 gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1584 = gtk_menu_item_new_with_label(_("Nearest POI")));
1586 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1588 /* The "View"/"Show" submenu. */
1589 gtk_menu_append(submenu, menu_item
1590 = gtk_menu_item_new_with_label(_("Show")));
1591 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1592 submenu2 = gtk_menu_new());
1593 gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1594 = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1595 gtk_check_menu_item_set_active(
1596 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1598 gtk_menu_append(submenu2, _menu_view_show_scale_item
1599 = gtk_check_menu_item_new_with_label(_("Scale")));
1600 gtk_check_menu_item_set_active(
1601 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1603 gtk_menu_append(submenu2, _menu_view_show_comprose_item
1604 = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1605 gtk_check_menu_item_set_active(
1606 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1608 gtk_menu_append(submenu2, _menu_view_show_routes_item
1609 = gtk_check_menu_item_new_with_label(_("Route")));
1610 gtk_check_menu_item_set_active(
1611 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1612 _show_paths & ROUTES_MASK);
1613 gtk_menu_append(submenu2, _menu_view_show_tracks_item
1614 = gtk_check_menu_item_new_with_label(_("Track")));
1615 gtk_check_menu_item_set_active(
1616 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1617 _show_paths & TRACKS_MASK);
1618 gtk_menu_append(submenu2, _menu_view_show_velvec_item
1619 = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1620 gtk_check_menu_item_set_active(
1621 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1622 gtk_menu_append(submenu2, _menu_view_show_poi_item
1623 = gtk_check_menu_item_new_with_label(_("POI")));
1624 gtk_check_menu_item_set_active(
1625 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1627 /* The "View"/"Auto-Center" submenu. */
1628 gtk_menu_append(submenu, menu_item
1629 = gtk_menu_item_new_with_label(_("Auto-Center")));
1630 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1631 submenu2 = gtk_menu_new());
1632 gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1633 = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1634 gtk_check_menu_item_set_active(
1635 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1636 _center_mode == CENTER_LATLON);
1637 gtk_menu_append(submenu2, _menu_view_ac_lead_item
1638 = gtk_radio_menu_item_new_with_label_from_widget(
1639 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1640 gtk_check_menu_item_set_active(
1641 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1642 _center_mode == CENTER_LEAD);
1643 gtk_menu_append(submenu2, _menu_view_ac_none_item
1644 = gtk_radio_menu_item_new_with_label_from_widget(
1645 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1646 gtk_check_menu_item_set_active(
1647 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1650 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1652 gtk_menu_append(submenu, _menu_view_fullscreen_item
1653 = gtk_check_menu_item_new_with_label(_("Full Screen")));
1654 gtk_check_menu_item_set_active(
1655 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1657 /* The "GPS" submenu. */
1658 gtk_menu_append(menu, menu_item
1659 = gtk_menu_item_new_with_label(_("GPS")));
1660 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1661 submenu = gtk_menu_new());
1662 gtk_menu_append(submenu, _menu_gps_enable_item
1663 = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1664 gtk_check_menu_item_set_active(
1665 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item), _enable_gps);
1666 gtk_menu_append(submenu, _menu_gps_show_info_item
1667 = gtk_check_menu_item_new_with_label(_("Show Information")));
1668 gtk_check_menu_item_set_active(
1669 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1670 gtk_menu_append(submenu, _menu_gps_details_item
1671 = gtk_menu_item_new_with_label(_("Details...")));
1672 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1673 gtk_menu_append(submenu, _menu_gps_reset_item
1674 = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1675 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1677 gtk_menu_append(menu, gtk_separator_menu_item_new());
1679 /* The other menu items. */
1680 gtk_menu_append(menu, _menu_settings_item
1681 = gtk_menu_item_new_with_label(_("Settings...")));
1682 gtk_menu_append(menu, gtk_separator_menu_item_new());
1683 gtk_menu_append(menu, _menu_help_item
1684 = gtk_menu_item_new_with_label(_("Help...")));
1685 gtk_menu_append(menu, _menu_about_item
1686 = gtk_menu_item_new_with_label(_("About...")));
1687 gtk_menu_append(menu, _menu_close_item
1688 = gtk_menu_item_new_with_label(_("Close")));
1690 /* We need to show menu items. */
1691 gtk_widget_show_all(GTK_WIDGET(menu));
1693 hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1695 /* Connect the "Route" signals. */
1696 g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1697 G_CALLBACK(menu_cb_route_open), NULL);
1698 g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1699 G_CALLBACK(menu_cb_route_download), NULL);
1700 g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1701 G_CALLBACK(menu_cb_route_save), NULL);
1702 g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1703 G_CALLBACK(menu_cb_route_distnext), NULL);
1704 g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1705 G_CALLBACK(menu_cb_route_distlast), NULL);
1706 g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1707 G_CALLBACK(menu_cb_route_reset), NULL);
1708 g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1709 G_CALLBACK(menu_cb_route_clear), NULL);
1711 /* Connect the "Track" signals. */
1712 g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1713 G_CALLBACK(menu_cb_track_open), NULL);
1714 g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1715 G_CALLBACK(menu_cb_track_save), NULL);
1716 g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1717 G_CALLBACK(menu_cb_track_insert_break), NULL);
1718 g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1719 G_CALLBACK(menu_cb_track_insert_mark), NULL);
1720 g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1721 G_CALLBACK(menu_cb_track_distlast), NULL);
1722 g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1723 G_CALLBACK(menu_cb_track_distfirst), NULL);
1724 g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1725 G_CALLBACK(menu_cb_track_clear), NULL);
1726 g_signal_connect(G_OBJECT(_menu_track_enable_tracking_item), "toggled",
1727 G_CALLBACK(menu_cb_track_enable_tracking), NULL);
1729 /* Connect the "POI" signals. */
1730 g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1731 G_CALLBACK(menu_cb_poi_import), NULL);
1732 g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1733 G_CALLBACK(menu_cb_poi_download), NULL);
1734 g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1735 G_CALLBACK(menu_cb_poi_browse), NULL);
1736 g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1737 G_CALLBACK(menu_cb_poi_categories), NULL);
1739 /* Connect the "Maps" signals. */
1740 g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1741 G_CALLBACK(menu_cb_maps_repoman), NULL);
1742 g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1743 G_CALLBACK(menu_cb_maps_mapman), NULL);
1744 g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1745 G_CALLBACK(menu_cb_maps_auto_download), NULL);
1747 /* Connect the "View" signals. */
1748 g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1749 G_CALLBACK(menu_cb_view_zoom_in), NULL);
1750 g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1751 G_CALLBACK(menu_cb_view_zoom_out), NULL);
1753 g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1754 G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1755 g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1756 G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1757 g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1758 G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1759 g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1760 G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1762 g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1763 G_CALLBACK(menu_cb_view_pan_up), NULL);
1764 g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1765 G_CALLBACK(menu_cb_view_pan_down), NULL);
1766 g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1767 G_CALLBACK(menu_cb_view_pan_left), NULL);
1768 g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1769 G_CALLBACK(menu_cb_view_pan_right), NULL);
1770 g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1771 G_CALLBACK(menu_cb_view_pan_north), NULL);
1772 g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1773 G_CALLBACK(menu_cb_view_pan_south), NULL);
1774 g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1775 G_CALLBACK(menu_cb_view_pan_west), NULL);
1776 g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1777 G_CALLBACK(menu_cb_view_pan_east), NULL);
1779 g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1780 G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1781 g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1782 G_CALLBACK(menu_cb_view_goto_address), NULL);
1783 g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1784 G_CALLBACK(menu_cb_view_goto_gps), NULL);
1785 g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1786 G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1787 g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1788 G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1790 g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1791 G_CALLBACK(menu_cb_view_show_tracks), NULL);
1792 g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1793 G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1794 g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1795 G_CALLBACK(menu_cb_view_show_scale), NULL);
1796 g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1797 G_CALLBACK(menu_cb_view_show_comprose), NULL);
1798 g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1799 G_CALLBACK(menu_cb_view_show_routes), NULL);
1800 g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1801 G_CALLBACK(menu_cb_view_show_velvec), NULL);
1802 g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1803 G_CALLBACK(menu_cb_view_show_poi), NULL);
1805 g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1806 G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1807 g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1808 G_CALLBACK(menu_cb_view_ac_lead), NULL);
1809 g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1810 G_CALLBACK(menu_cb_view_ac_none), NULL);
1812 g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1813 G_CALLBACK(menu_cb_view_fullscreen), NULL);
1815 /* Connect the "GPS" signals. */
1816 g_signal_connect(G_OBJECT(_menu_gps_enable_item), "toggled",
1817 G_CALLBACK(menu_cb_gps_enable), NULL);
1818 g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1819 G_CALLBACK(menu_cb_gps_show_info), NULL);
1820 g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1821 G_CALLBACK(menu_cb_gps_details), NULL);
1822 g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1823 G_CALLBACK(menu_cb_gps_reset), NULL);
1825 /* Connect the other menu item signals. */
1826 g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1827 G_CALLBACK(menu_cb_settings), NULL);
1828 g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1829 G_CALLBACK(menu_cb_help), NULL);
1830 g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1831 G_CALLBACK(menu_cb_about), NULL);
1832 g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1833 G_CALLBACK(gtk_main_quit), NULL);
1835 vprintf("%s(): return\n", __PRETTY_FUNCTION__);