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(_window, &buffer, NULL, &size, &_route_dir_uri, NULL,
117 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(_window, NULL, &handle, NULL, &_route_dir_uri, NULL,
158 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(_window, &buffer, NULL, &size, NULL, &_track_file_uri,
238 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(_window, NULL, &handle, NULL, NULL, &_track_file_uri,
261 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__);
424 /****************************************************************************
425 * ABOVE: TRACK MENU ********************************************************
426 ****************************************************************************/
428 /****************************************************************************
429 * BELOW: POI MENU **********************************************************
430 ****************************************************************************/
433 menu_cb_poi_import(GtkMenuItem *item)
435 printf("%s()\n", __PRETTY_FUNCTION__);
437 if(poi_import_dialog(_center.unitx, _center.unity))
440 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
445 menu_cb_poi_download(GtkMenuItem *item)
447 printf("%s()\n", __PRETTY_FUNCTION__);
449 if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
452 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
457 menu_cb_poi_browse(GtkMenuItem *item)
459 printf("%s()\n", __PRETTY_FUNCTION__);
461 if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
464 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
469 menu_cb_poi_categories(GtkMenuItem *item)
471 printf("%s()\n", __PRETTY_FUNCTION__);
473 if(category_list_dialog(_window))
476 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
480 /****************************************************************************
481 * ABOVE: POI MENU **********************************************************
482 ****************************************************************************/
484 /****************************************************************************
485 * BELOW: MAPS MENU *********************************************************
486 ****************************************************************************/
489 menu_cb_maps_repoman(GtkMenuItem *item)
491 printf("%s()\n", __PRETTY_FUNCTION__);
493 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
498 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
500 printf("%s()\n", __PRETTY_FUNCTION__);
502 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
504 repo_set_curr(new_repo);
505 map_refresh_mark(TRUE);
507 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
512 menu_cb_maps_mapman(GtkMenuItem *item)
514 printf("%s()\n", __PRETTY_FUNCTION__);
518 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
523 menu_cb_maps_auto_download(GtkMenuItem *item)
525 printf("%s()\n", __PRETTY_FUNCTION__);
527 if((_auto_download = gtk_check_menu_item_get_active(
528 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
530 if(_curr_repo->url == REPOTYPE_NONE)
532 _("NOTE: You must set a Map URI in the current repository in "
533 "order to download maps."));
534 map_refresh_mark(TRUE);
537 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
541 /****************************************************************************
542 * ABOVE: MAPS MENU *********************************************************
543 ****************************************************************************/
545 /****************************************************************************
546 * BELOW: VIEW/ZOOM MENU ****************************************************
547 ****************************************************************************/
550 menu_cb_view_zoom_in(GtkMenuItem *item)
552 printf("%s()\n", __PRETTY_FUNCTION__);
557 snprintf(buffer, sizeof(buffer),"%s %d",
558 _("Zoom to Level"), _next_zoom - 1);
559 MACRO_BANNER_SHOW_INFO(_window, buffer);
560 map_set_zoom(_next_zoom - 1);
563 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
568 menu_cb_view_zoom_out(GtkMenuItem *item)
570 printf("%s()\n", __PRETTY_FUNCTION__);
575 snprintf(buffer, sizeof(buffer),"%s %d",
576 _("Zoom to Level"), _next_zoom + 1);
577 MACRO_BANNER_SHOW_INFO(_window, buffer);
578 map_set_zoom(_next_zoom + 1);
581 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
585 /****************************************************************************
586 * ABOVE: VIEW/ZOOM MENU ****************************************************
587 ****************************************************************************/
589 /****************************************************************************
590 * BELOW: VIEW/ROTATE MENU **************************************************
591 ****************************************************************************/
594 menu_cb_view_rotate_clock(GtkMenuItem *item)
596 printf("%s()\n", __PRETTY_FUNCTION__);
598 map_rotate(-ROTATE_DEGREES);
600 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
605 menu_cb_view_rotate_counter(GtkMenuItem *item)
607 printf("%s()\n", __PRETTY_FUNCTION__);
609 map_rotate(ROTATE_DEGREES);
611 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
616 menu_cb_view_rotate_reset(GtkMenuItem *item)
618 printf("%s()\n", __PRETTY_FUNCTION__);
620 map_rotate(-_next_map_rotate_angle);
622 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
627 menu_cb_view_rotate_auto(GtkMenuItem *item)
629 printf("%s()\n", __PRETTY_FUNCTION__);
631 if(gtk_check_menu_item_get_active(
632 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
634 _center_rotate = TRUE;
636 map_refresh_mark(TRUE);
637 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
641 _center_rotate = FALSE;
642 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
645 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
649 /****************************************************************************
650 * ABOVE: VIEW/ROTATE MENU **************************************************
651 ****************************************************************************/
653 /****************************************************************************
654 * BELOW: VIEW/PAN MENU *****************************************************
655 ****************************************************************************/
658 menu_cb_view_pan_up(GtkMenuItem *item)
660 gfloat panx_adj, pany_adj;
661 printf("%s()\n", __PRETTY_FUNCTION__);
663 /* Adjust for rotate angle. */
664 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
667 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
668 pixel2unit((gint)(pany_adj + 0.5f)));
670 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
675 menu_cb_view_pan_down(GtkMenuItem *item)
677 gfloat panx_adj, pany_adj;
678 printf("%s()\n", __PRETTY_FUNCTION__);
680 /* Adjust for rotate angle. */
681 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
684 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
685 pixel2unit((gint)(pany_adj + 0.5f)));
687 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
692 menu_cb_view_pan_left(GtkMenuItem *item)
694 gfloat panx_adj, pany_adj;
695 printf("%s()\n", __PRETTY_FUNCTION__);
697 /* Adjust for rotate angle. */
698 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
701 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
702 pixel2unit((gint)(pany_adj + 0.5f)));
704 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
709 menu_cb_view_pan_right(GtkMenuItem *item)
711 gfloat panx_adj, pany_adj;
712 printf("%s()\n", __PRETTY_FUNCTION__);
714 /* Adjust for rotate angle. */
715 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
718 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
719 pixel2unit((gint)(pany_adj + 0.5f)));
721 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
726 menu_cb_view_pan_north(GtkMenuItem *item)
728 printf("%s()\n", __PRETTY_FUNCTION__);
730 map_pan(0, -pixel2unit(PAN_PIXELS));
732 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
737 menu_cb_view_pan_south(GtkMenuItem *item)
739 printf("%s()\n", __PRETTY_FUNCTION__);
741 map_pan(0, pixel2unit(PAN_PIXELS));
743 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
748 menu_cb_view_pan_west(GtkMenuItem *item)
750 printf("%s()\n", __PRETTY_FUNCTION__);
752 map_pan(-pixel2unit(PAN_PIXELS), 0);
754 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
759 menu_cb_view_pan_east(GtkMenuItem *item)
761 printf("%s()\n", __PRETTY_FUNCTION__);
763 map_pan(pixel2unit(PAN_PIXELS), 0);
765 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
769 /****************************************************************************
770 * ABOVE: VIEW/PAN MENU *****************************************************
771 ****************************************************************************/
773 /****************************************************************************
774 * BELOW: VIEW/GOTO MENU ****************************************************
775 ****************************************************************************/
778 menu_cb_view_goto_latlon(GtkMenuItem *item)
780 static GtkWidget *dialog = NULL;
781 static GtkWidget *table = NULL;
782 static GtkWidget *label = NULL;
783 static GtkWidget *txt_lat = NULL;
784 static GtkWidget *txt_lon = NULL;
785 printf("%s()\n", __PRETTY_FUNCTION__);
789 dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
790 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
791 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
792 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
795 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
796 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
798 gtk_table_attach(GTK_TABLE(table),
799 label = gtk_label_new(_("Latitude")),
800 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
801 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
803 gtk_table_attach(GTK_TABLE(table),
804 txt_lat = gtk_entry_new(),
805 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
806 gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
807 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
809 g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
810 HILDON_GTK_INPUT_MODE_FULL, NULL);
812 g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
813 g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
814 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
817 gtk_table_attach(GTK_TABLE(table),
818 label = gtk_label_new(_("Longitude")),
819 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
820 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
822 gtk_table_attach(GTK_TABLE(table),
823 txt_lon = gtk_entry_new(),
824 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
825 gtk_entry_set_width_chars(GTK_ENTRY(txt_lon), 16);
826 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
828 g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
829 HILDON_GTK_INPUT_MODE_FULL, NULL);
831 g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
832 g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
833 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
837 /* Initialize with the current center position. */
841 unit2latlon(_center.unitx, _center.unity, lat, lon);
842 lat_format(lat, buffer);
843 gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
844 lon_format(lon, buffer);
845 gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
848 gtk_widget_show_all(dialog);
850 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
857 text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
858 lat = strdmstod(text, &error_check);
859 if(text == error_check || lat < -90. || lat > 90.) {
860 popup_error(dialog, _("Invalid Latitude"));
864 text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
865 lon = strdmstod(text, &error_check);
866 if(text == error_check || lon < -180. || lon > 180.) {
867 popup_error(dialog, _("Invalid Longitude"));
871 latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
873 gtk_check_menu_item_set_active(
874 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
875 map_center_unit(sel_unit);
878 gtk_widget_hide(dialog);
879 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
884 menu_cb_view_goto_address(GtkMenuItem *item)
886 static GtkWidget *dialog = NULL;
887 static GtkWidget *table = NULL;
888 static GtkWidget *label = NULL;
889 static GtkWidget *txt_addr = NULL;
890 printf("%s()\n", __PRETTY_FUNCTION__);
894 GtkEntryCompletion *comp;
895 dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
896 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
897 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
898 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
901 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
902 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
904 gtk_table_attach(GTK_TABLE(table),
905 label = gtk_label_new(_("Address")),
906 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
907 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
909 gtk_table_attach(GTK_TABLE(table),
910 txt_addr = gtk_entry_new(),
911 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
912 gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
913 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
915 /* Set up auto-completion. */
916 comp = gtk_entry_completion_new();
917 gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
918 gtk_entry_completion_set_text_column(comp, 0);
919 gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
922 gtk_widget_show_all(dialog);
924 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
926 Point origin = locate_address(dialog,
927 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
930 MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
933 gtk_check_menu_item_set_active(
934 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
936 map_center_unit(origin);
938 /* Success! Get out of the while loop. */
942 gtk_widget_hide(dialog);
943 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
948 menu_cb_view_goto_gps(GtkMenuItem *item)
950 printf("%s()\n", __PRETTY_FUNCTION__);
953 gtk_check_menu_item_set_active(
954 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
956 map_center_unit(_pos);
958 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
963 menu_cb_view_goto_nextway(GtkMenuItem *item)
966 printf("%s()\n", __PRETTY_FUNCTION__);
968 next_way = path_get_next_way();
970 if(next_way && next_way->point->unity)
973 gtk_check_menu_item_set_active(
974 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
976 map_center_unit(*next_way->point);
980 MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
983 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
988 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
990 printf("%s()\n", __PRETTY_FUNCTION__);
997 if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
998 : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
1000 /* Auto-Center is enabled - use the GPS position. */
1002 latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
1003 banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
1004 MACRO_BANNER_SHOW_INFO(_window, banner);
1010 if(_center_mode > 0)
1011 gtk_check_menu_item_set_active(
1012 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
1014 map_center_unit(unit);
1018 MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
1019 /* Auto-Center is disabled - use the view center. */
1023 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1027 /****************************************************************************
1028 * ABOVE: VIEW/GOTO MENU ****************************************************
1029 ****************************************************************************/
1031 /****************************************************************************
1032 * BELOW: VIEW/SHOW MENU ****************************************************
1033 ****************************************************************************/
1036 menu_cb_view_show_tracks(GtkMenuItem *item)
1038 printf("%s()\n", __PRETTY_FUNCTION__);
1040 _show_paths ^= TRACKS_MASK;
1041 if(gtk_check_menu_item_get_active(
1042 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1044 _show_paths |= TRACKS_MASK;
1046 MACRO_QUEUE_DRAW_AREA();
1047 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1051 _show_paths &= ~TRACKS_MASK;
1053 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1056 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1061 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1063 printf("%s()\n", __PRETTY_FUNCTION__);
1065 _show_zoomlevel = gtk_check_menu_item_get_active(
1066 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1069 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1074 menu_cb_view_show_scale(GtkMenuItem *item)
1076 printf("%s()\n", __PRETTY_FUNCTION__);
1078 _show_scale = gtk_check_menu_item_get_active(
1079 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1082 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1087 menu_cb_view_show_comprose(GtkMenuItem *item)
1089 printf("%s()\n", __PRETTY_FUNCTION__);
1091 _show_comprose = gtk_check_menu_item_get_active(
1092 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1095 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1100 menu_cb_view_show_routes(GtkMenuItem *item)
1102 printf("%s()\n", __PRETTY_FUNCTION__);
1104 if(gtk_check_menu_item_get_active(
1105 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1107 _show_paths |= ROUTES_MASK;
1109 MACRO_QUEUE_DRAW_AREA();
1110 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1114 _show_paths &= ~ROUTES_MASK;
1116 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1119 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1124 menu_cb_view_show_velvec(GtkMenuItem *item)
1126 printf("%s()\n", __PRETTY_FUNCTION__);
1128 _show_velvec = gtk_check_menu_item_get_active(
1129 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1132 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1137 menu_cb_view_show_poi(GtkMenuItem *item)
1139 printf("%s()\n", __PRETTY_FUNCTION__);
1141 _show_poi = gtk_check_menu_item_get_active(
1142 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1145 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1149 /****************************************************************************
1150 * ABOVE: VIEW/SHOW MENU ****************************************************
1151 ****************************************************************************/
1153 /****************************************************************************
1154 * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1155 ****************************************************************************/
1158 menu_cb_view_ac_lead(GtkMenuItem *item)
1160 printf("%s()\n", __PRETTY_FUNCTION__);
1162 if(gtk_check_menu_item_get_active(
1163 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1165 _center_mode = CENTER_LEAD;
1166 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1167 map_refresh_mark(TRUE);
1170 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1175 menu_cb_view_ac_latlon(GtkMenuItem *item)
1177 printf("%s()\n", __PRETTY_FUNCTION__);
1179 if(gtk_check_menu_item_get_active(
1180 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1182 _center_mode = CENTER_LATLON;
1183 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1184 map_refresh_mark(TRUE);
1187 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1192 menu_cb_view_ac_none(GtkMenuItem *item)
1194 printf("%s()\n", __PRETTY_FUNCTION__);
1196 if(gtk_check_menu_item_get_active(
1197 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1199 _center_mode = -_center_mode;
1200 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1203 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1207 /****************************************************************************
1208 * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1209 ****************************************************************************/
1212 menu_cb_view_fullscreen(GtkMenuItem *item)
1214 printf("%s()\n", __PRETTY_FUNCTION__);
1216 if((_fullscreen = gtk_check_menu_item_get_active(
1217 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1218 gtk_window_fullscreen(GTK_WINDOW(_window));
1220 gtk_window_unfullscreen(GTK_WINDOW(_window));
1222 g_idle_add((GSourceFunc)window_present, NULL);
1224 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1228 /****************************************************************************
1229 * BELOW: GPS MENU **********************************************************
1230 ****************************************************************************/
1233 menu_cb_enable_gps(GtkMenuItem *item)
1235 printf("%s()\n", __PRETTY_FUNCTION__);
1237 if((_enable_gps = gtk_check_menu_item_get_active(
1238 GTK_CHECK_MENU_ITEM(_menu_enable_gps_item))))
1245 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1246 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1248 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1253 menu_cb_gps_show_info(GtkMenuItem *item)
1255 printf("%s()\n", __PRETTY_FUNCTION__);
1257 _gps_info = gtk_check_menu_item_get_active(
1258 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1262 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1267 menu_cb_gps_details(GtkMenuItem *item)
1269 printf("%s()\n", __PRETTY_FUNCTION__);
1273 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1278 menu_cb_gps_reset(GtkMenuItem *item)
1280 printf("%s()\n", __PRETTY_FUNCTION__);
1284 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1288 /****************************************************************************
1289 * ABOVE: GPS MENU **********************************************************
1290 ****************************************************************************/
1293 menu_cb_settings(GtkMenuItem *item)
1295 printf("%s()\n", __PRETTY_FUNCTION__);
1297 if(settings_dialog())
1299 /* Settings have changed - reconnect to receiver. */
1307 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1312 menu_cb_help(GtkMenuItem *item)
1314 printf("%s()\n", __PRETTY_FUNCTION__);
1317 hildon_help_show(_osso, HELP_ID_INTRO, 0);
1319 ossohelp_show(_osso, HELP_ID_INTRO, 0);
1322 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1327 menu_cb_about(GtkMenuItem *item)
1329 printf("%s()\n", __PRETTY_FUNCTION__);
1332 hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1334 ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1337 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1344 menu_maps_remove_repos()
1347 printf("%s()\n", __PRETTY_FUNCTION__);
1349 /* Delete one menu item for each repo. */
1350 for(curr = _repo_list; curr; curr = curr->next)
1352 gtk_widget_destroy(gtk_container_get_children(
1353 GTK_CONTAINER(_menu_maps_submenu))->data);
1355 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1359 menu_maps_add_repos()
1362 GtkWidget *last_repo = NULL;
1363 printf("%s()\n", __PRETTY_FUNCTION__);
1365 for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1367 RepoData *rd = (RepoData*)curr->data;
1368 GtkWidget *menu_item;
1370 gtk_menu_prepend(_menu_maps_submenu, menu_item
1371 = gtk_radio_menu_item_new_with_label_from_widget(
1372 GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1375 gtk_menu_prepend(_menu_maps_submenu, menu_item
1376 = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1377 last_repo = menu_item;
1379 gtk_check_menu_item_set_active(
1380 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1381 rd->menu_item = menu_item;
1384 /* Add signals (must be after entire menu is built). */
1386 GList *currmi = gtk_container_get_children(
1387 GTK_CONTAINER(_menu_maps_submenu));
1388 for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1390 g_signal_connect(G_OBJECT(currmi->data), "activate",
1391 G_CALLBACK(menu_cb_maps_select), curr->data);
1395 gtk_widget_show_all(_menu_maps_submenu);
1396 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1400 * Create the menu items needed for the drop down menu.
1405 /* Create needed handles. */
1408 GtkWidget *submenu2;
1409 GtkWidget *menu_item;
1410 printf("%s()\n", __PRETTY_FUNCTION__);
1412 /* Get the menu of our view. */
1413 menu = GTK_MENU(gtk_menu_new());
1415 /* Create the menu items. */
1417 /* The "Routes" submenu. */
1418 gtk_menu_append(menu, menu_item
1419 = gtk_menu_item_new_with_label(_("Route")));
1420 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1421 submenu = gtk_menu_new());
1422 gtk_menu_append(submenu, _menu_route_open_item
1423 = gtk_menu_item_new_with_label(_("Open...")));
1424 gtk_menu_append(submenu, _menu_route_download_item
1425 = gtk_menu_item_new_with_label(_("Download...")));
1426 gtk_menu_append(submenu, _menu_route_save_item
1427 = gtk_menu_item_new_with_label(_("Save...")));
1428 gtk_menu_append(submenu, _menu_route_distnext_item
1429 = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1430 gtk_menu_append(submenu, _menu_route_distlast_item
1431 = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1432 gtk_menu_append(submenu, _menu_route_reset_item
1433 = gtk_menu_item_new_with_label(_("Reset")));
1434 gtk_menu_append(submenu, _menu_route_clear_item
1435 = gtk_menu_item_new_with_label(_("Clear")));
1437 /* The "Track" submenu. */
1438 gtk_menu_append(menu, menu_item
1439 = gtk_menu_item_new_with_label(_("Track")));
1440 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1441 submenu = gtk_menu_new());
1442 gtk_menu_append(submenu, _menu_track_open_item
1443 = gtk_menu_item_new_with_label(_("Open...")));
1444 gtk_menu_append(submenu, _menu_track_save_item
1445 = gtk_menu_item_new_with_label(_("Save...")));
1446 gtk_menu_append(submenu, _menu_track_insert_break_item
1447 = gtk_menu_item_new_with_label(_("Insert Break")));
1448 gtk_menu_append(submenu, _menu_track_insert_mark_item
1449 = gtk_menu_item_new_with_label(_("Insert Mark...")));
1450 gtk_menu_append(submenu, _menu_track_distlast_item
1451 = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1452 gtk_menu_append(submenu, _menu_track_distfirst_item
1453 = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1454 gtk_menu_append(submenu, _menu_track_clear_item
1455 = gtk_menu_item_new_with_label(_("Clear")));
1457 /* The "POI" submenu. */
1458 gtk_menu_append(menu, menu_item = _menu_poi_item
1459 = gtk_menu_item_new_with_label(_("POI")));
1460 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1461 submenu = gtk_menu_new());
1462 gtk_menu_append(submenu, _menu_poi_import_item
1463 = gtk_menu_item_new_with_label(_("Import...")));
1464 gtk_menu_append(submenu, _menu_poi_download_item
1465 = gtk_menu_item_new_with_label(_("Download...")));
1466 gtk_menu_append(submenu, _menu_poi_browse_item
1467 = gtk_menu_item_new_with_label(_("Browse...")));
1468 gtk_menu_append(submenu, _menu_poi_categories_item
1469 = gtk_menu_item_new_with_label(_("Categories...")));
1471 /* The "Maps" submenu. */
1472 gtk_menu_append(menu, menu_item
1473 = gtk_menu_item_new_with_label(_("Maps")));
1474 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1475 _menu_maps_submenu = gtk_menu_new());
1476 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1477 gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1478 = gtk_menu_item_new_with_label(_("Manage Maps...")));
1479 gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1480 = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1481 gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1482 = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1483 gtk_check_menu_item_set_active(
1484 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1485 menu_maps_add_repos();
1487 gtk_menu_append(menu, gtk_separator_menu_item_new());
1489 /* The "View" submenu. */
1490 gtk_menu_append(menu, menu_item
1491 = gtk_menu_item_new_with_label(_("View")));
1492 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1493 submenu = gtk_menu_new());
1495 /* The "View"/"Zoom" submenu. */
1496 gtk_menu_append(submenu, menu_item
1497 = gtk_menu_item_new_with_label(_("Zoom")));
1498 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1499 submenu2 = gtk_menu_new());
1500 gtk_menu_append(submenu2, _menu_view_zoom_in_item
1501 = gtk_menu_item_new_with_label(_("Zoom In")));
1502 gtk_menu_append(submenu2, _menu_view_zoom_out_item
1503 = gtk_menu_item_new_with_label(_("Zoom Out")));
1505 /* The "View"/"Rotate" submenu. */
1506 gtk_menu_append(submenu, menu_item
1507 = gtk_menu_item_new_with_label(_("Rotate")));
1508 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1509 submenu2 = gtk_menu_new());
1510 gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1511 = gtk_menu_item_new_with_label(_("Clockwise")));
1512 gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1513 = gtk_menu_item_new_with_label(_("Counter")));
1514 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1515 gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1516 = gtk_menu_item_new_with_label(_("Reset")));
1517 gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1518 = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1519 gtk_check_menu_item_set_active(
1520 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1522 /* The "View"/"Pan" submenu. */
1523 gtk_menu_append(submenu, menu_item
1524 = gtk_menu_item_new_with_label(_("Pan")));
1525 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1526 submenu2 = gtk_menu_new());
1527 gtk_menu_append(submenu2, _menu_view_pan_up_item
1528 = gtk_menu_item_new_with_label(_("Up")));
1529 gtk_menu_append(submenu2, _menu_view_pan_down_item
1530 = gtk_menu_item_new_with_label(_("Down")));
1531 gtk_menu_append(submenu2, _menu_view_pan_left_item
1532 = gtk_menu_item_new_with_label(_("Left")));
1533 gtk_menu_append(submenu2, _menu_view_pan_right_item
1534 = gtk_menu_item_new_with_label(_("Right")));
1535 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1536 gtk_menu_append(submenu2, _menu_view_pan_north_item
1537 = gtk_menu_item_new_with_label(_("North")));
1538 gtk_menu_append(submenu2, _menu_view_pan_south_item
1539 = gtk_menu_item_new_with_label(_("South")));
1540 gtk_menu_append(submenu2, _menu_view_pan_west_item
1541 = gtk_menu_item_new_with_label(_("West")));
1542 gtk_menu_append(submenu2, _menu_view_pan_east_item
1543 = gtk_menu_item_new_with_label(_("East")));
1545 /* The "Go to" submenu. */
1546 gtk_menu_append(submenu, menu_item
1547 = gtk_menu_item_new_with_label(_("Go to")));
1548 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1549 submenu2 = gtk_menu_new());
1550 gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1551 = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1552 gtk_menu_append(submenu2, _menu_view_goto_address_item
1553 = gtk_menu_item_new_with_label(_("Address...")));
1554 gtk_menu_append(submenu2, _menu_view_goto_gps_item
1555 = gtk_menu_item_new_with_label(_("GPS Location")));
1556 gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1557 = gtk_menu_item_new_with_label(_("Next Waypoint")));
1558 gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1559 = gtk_menu_item_new_with_label(_("Nearest POI")));
1561 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1563 /* The "View"/"Show" submenu. */
1564 gtk_menu_append(submenu, menu_item
1565 = gtk_menu_item_new_with_label(_("Show")));
1566 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1567 submenu2 = gtk_menu_new());
1568 gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1569 = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1570 gtk_check_menu_item_set_active(
1571 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1573 gtk_menu_append(submenu2, _menu_view_show_scale_item
1574 = gtk_check_menu_item_new_with_label(_("Scale")));
1575 gtk_check_menu_item_set_active(
1576 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1578 gtk_menu_append(submenu2, _menu_view_show_comprose_item
1579 = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1580 gtk_check_menu_item_set_active(
1581 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1583 gtk_menu_append(submenu2, _menu_view_show_routes_item
1584 = gtk_check_menu_item_new_with_label(_("Route")));
1585 gtk_check_menu_item_set_active(
1586 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1587 _show_paths & ROUTES_MASK);
1588 gtk_menu_append(submenu2, _menu_view_show_tracks_item
1589 = gtk_check_menu_item_new_with_label(_("Track")));
1590 gtk_check_menu_item_set_active(
1591 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1592 _show_paths & TRACKS_MASK);
1593 gtk_menu_append(submenu2, _menu_view_show_velvec_item
1594 = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1595 gtk_check_menu_item_set_active(
1596 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1597 gtk_menu_append(submenu2, _menu_view_show_poi_item
1598 = gtk_check_menu_item_new_with_label(_("POI")));
1599 gtk_check_menu_item_set_active(
1600 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1602 /* The "View"/"Auto-Center" submenu. */
1603 gtk_menu_append(submenu, menu_item
1604 = gtk_menu_item_new_with_label(_("Auto-Center")));
1605 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1606 submenu2 = gtk_menu_new());
1607 gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1608 = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1609 gtk_check_menu_item_set_active(
1610 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1611 _center_mode == CENTER_LATLON);
1612 gtk_menu_append(submenu2, _menu_view_ac_lead_item
1613 = gtk_radio_menu_item_new_with_label_from_widget(
1614 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1615 gtk_check_menu_item_set_active(
1616 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1617 _center_mode == CENTER_LEAD);
1618 gtk_menu_append(submenu2, _menu_view_ac_none_item
1619 = gtk_radio_menu_item_new_with_label_from_widget(
1620 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1621 gtk_check_menu_item_set_active(
1622 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1625 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1627 gtk_menu_append(submenu, _menu_view_fullscreen_item
1628 = gtk_check_menu_item_new_with_label(_("Full Screen")));
1629 gtk_check_menu_item_set_active(
1630 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1632 /* The "GPS" submenu. */
1633 gtk_menu_append(menu, menu_item
1634 = gtk_menu_item_new_with_label(_("GPS")));
1635 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1636 submenu = gtk_menu_new());
1637 gtk_menu_append(submenu, _menu_enable_gps_item
1638 = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1639 gtk_check_menu_item_set_active(
1640 GTK_CHECK_MENU_ITEM(_menu_enable_gps_item), _enable_gps);
1641 gtk_menu_append(submenu, _menu_gps_show_info_item
1642 = gtk_check_menu_item_new_with_label(_("Show Information")));
1643 gtk_check_menu_item_set_active(
1644 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1645 gtk_menu_append(submenu, _menu_gps_details_item
1646 = gtk_menu_item_new_with_label(_("Details...")));
1647 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1648 gtk_menu_append(submenu, _menu_gps_reset_item
1649 = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1650 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1652 gtk_menu_append(menu, gtk_separator_menu_item_new());
1654 /* The other menu items. */
1655 gtk_menu_append(menu, _menu_settings_item
1656 = gtk_menu_item_new_with_label(_("Settings...")));
1657 gtk_menu_append(menu, gtk_separator_menu_item_new());
1658 gtk_menu_append(menu, _menu_help_item
1659 = gtk_menu_item_new_with_label(_("Help...")));
1660 gtk_menu_append(menu, _menu_about_item
1661 = gtk_menu_item_new_with_label(_("About...")));
1662 gtk_menu_append(menu, _menu_close_item
1663 = gtk_menu_item_new_with_label(_("Close")));
1665 /* We need to show menu items. */
1666 gtk_widget_show_all(GTK_WIDGET(menu));
1668 hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1670 /* Connect the "Route" signals. */
1671 g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1672 G_CALLBACK(menu_cb_route_open), NULL);
1673 g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1674 G_CALLBACK(menu_cb_route_download), NULL);
1675 g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1676 G_CALLBACK(menu_cb_route_save), NULL);
1677 g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1678 G_CALLBACK(menu_cb_route_distnext), NULL);
1679 g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1680 G_CALLBACK(menu_cb_route_distlast), NULL);
1681 g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1682 G_CALLBACK(menu_cb_route_reset), NULL);
1683 g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1684 G_CALLBACK(menu_cb_route_clear), NULL);
1686 /* Connect the "Track" signals. */
1687 g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1688 G_CALLBACK(menu_cb_track_open), NULL);
1689 g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1690 G_CALLBACK(menu_cb_track_save), NULL);
1691 g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1692 G_CALLBACK(menu_cb_track_insert_break), NULL);
1693 g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1694 G_CALLBACK(menu_cb_track_insert_mark), NULL);
1695 g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1696 G_CALLBACK(menu_cb_track_distlast), NULL);
1697 g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1698 G_CALLBACK(menu_cb_track_distfirst), NULL);
1699 g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1700 G_CALLBACK(menu_cb_track_clear), NULL);
1702 /* Connect the "POI" signals. */
1703 g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1704 G_CALLBACK(menu_cb_poi_import), NULL);
1705 g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1706 G_CALLBACK(menu_cb_poi_download), NULL);
1707 g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1708 G_CALLBACK(menu_cb_poi_browse), NULL);
1709 g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1710 G_CALLBACK(menu_cb_poi_categories), NULL);
1712 /* Connect the "Maps" signals. */
1713 g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1714 G_CALLBACK(menu_cb_maps_repoman), NULL);
1715 g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1716 G_CALLBACK(menu_cb_maps_mapman), NULL);
1717 g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1718 G_CALLBACK(menu_cb_maps_auto_download), NULL);
1720 /* Connect the "View" signals. */
1721 g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1722 G_CALLBACK(menu_cb_view_zoom_in), NULL);
1723 g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1724 G_CALLBACK(menu_cb_view_zoom_out), NULL);
1726 g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1727 G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1728 g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1729 G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1730 g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1731 G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1732 g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1733 G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1735 g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1736 G_CALLBACK(menu_cb_view_pan_up), NULL);
1737 g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1738 G_CALLBACK(menu_cb_view_pan_down), NULL);
1739 g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1740 G_CALLBACK(menu_cb_view_pan_left), NULL);
1741 g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1742 G_CALLBACK(menu_cb_view_pan_right), NULL);
1743 g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1744 G_CALLBACK(menu_cb_view_pan_north), NULL);
1745 g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1746 G_CALLBACK(menu_cb_view_pan_south), NULL);
1747 g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1748 G_CALLBACK(menu_cb_view_pan_west), NULL);
1749 g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1750 G_CALLBACK(menu_cb_view_pan_east), NULL);
1752 g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1753 G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1754 g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1755 G_CALLBACK(menu_cb_view_goto_address), NULL);
1756 g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1757 G_CALLBACK(menu_cb_view_goto_gps), NULL);
1758 g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1759 G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1760 g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1761 G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1763 g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1764 G_CALLBACK(menu_cb_view_show_tracks), NULL);
1765 g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1766 G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1767 g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1768 G_CALLBACK(menu_cb_view_show_scale), NULL);
1769 g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1770 G_CALLBACK(menu_cb_view_show_comprose), NULL);
1771 g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1772 G_CALLBACK(menu_cb_view_show_routes), NULL);
1773 g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1774 G_CALLBACK(menu_cb_view_show_velvec), NULL);
1775 g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1776 G_CALLBACK(menu_cb_view_show_poi), NULL);
1778 g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1779 G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1780 g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1781 G_CALLBACK(menu_cb_view_ac_lead), NULL);
1782 g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1783 G_CALLBACK(menu_cb_view_ac_none), NULL);
1785 g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1786 G_CALLBACK(menu_cb_view_fullscreen), NULL);
1788 /* Connect the "GPS" signals. */
1789 g_signal_connect(G_OBJECT(_menu_enable_gps_item), "toggled",
1790 G_CALLBACK(menu_cb_enable_gps), NULL);
1791 g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1792 G_CALLBACK(menu_cb_gps_show_info), NULL);
1793 g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1794 G_CALLBACK(menu_cb_gps_details), NULL);
1795 g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1796 G_CALLBACK(menu_cb_gps_reset), NULL);
1798 /* Connect the other menu item signals. */
1799 g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1800 G_CALLBACK(menu_cb_settings), NULL);
1801 g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1802 G_CALLBACK(menu_cb_help), NULL);
1803 g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1804 G_CALLBACK(menu_cb_about), NULL);
1805 g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1806 G_CALLBACK(gtk_main_quit), NULL);
1808 vprintf("%s(): return\n", __PRETTY_FUNCTION__);