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(GtkMenuItem *item)
427 printf("%s()\n", __PRETTY_FUNCTION__);
429 if(!(_enable_track = gtk_check_menu_item_get_active(
430 GTK_CHECK_MENU_ITEM(_menu_track_enable_item))))
432 track_insert_break(FALSE); /* FALSE = not temporary */
435 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
439 /****************************************************************************
440 * ABOVE: TRACK MENU ********************************************************
441 ****************************************************************************/
443 /****************************************************************************
444 * BELOW: POI MENU **********************************************************
445 ****************************************************************************/
448 menu_cb_poi_import(GtkMenuItem *item)
450 printf("%s()\n", __PRETTY_FUNCTION__);
452 if(poi_import_dialog(_center.unitx, _center.unity))
455 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
460 menu_cb_poi_download(GtkMenuItem *item)
462 printf("%s()\n", __PRETTY_FUNCTION__);
464 if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
467 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
472 menu_cb_poi_browse(GtkMenuItem *item)
474 printf("%s()\n", __PRETTY_FUNCTION__);
476 if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
479 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
484 menu_cb_poi_categories(GtkMenuItem *item)
486 printf("%s()\n", __PRETTY_FUNCTION__);
488 if(category_list_dialog(_window))
491 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
495 /****************************************************************************
496 * ABOVE: POI MENU **********************************************************
497 ****************************************************************************/
499 /****************************************************************************
500 * BELOW: MAPS MENU *********************************************************
501 ****************************************************************************/
504 menu_cb_maps_repoman(GtkMenuItem *item)
506 printf("%s()\n", __PRETTY_FUNCTION__);
508 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
513 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
515 printf("%s()\n", __PRETTY_FUNCTION__);
517 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
519 repo_set_curr(new_repo);
520 map_refresh_mark(TRUE);
522 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
527 menu_cb_maps_mapman(GtkMenuItem *item)
529 printf("%s()\n", __PRETTY_FUNCTION__);
533 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
538 menu_cb_maps_auto_download(GtkMenuItem *item)
540 printf("%s()\n", __PRETTY_FUNCTION__);
542 if((_auto_download = gtk_check_menu_item_get_active(
543 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
545 if(_curr_repo->url == REPOTYPE_NONE)
547 _("NOTE: You must set a Map URI in the current repository in "
548 "order to download maps."));
549 map_refresh_mark(TRUE);
552 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
556 /****************************************************************************
557 * ABOVE: MAPS MENU *********************************************************
558 ****************************************************************************/
560 /****************************************************************************
561 * BELOW: VIEW/ZOOM MENU ****************************************************
562 ****************************************************************************/
565 menu_cb_view_zoom_in(GtkMenuItem *item)
567 printf("%s()\n", __PRETTY_FUNCTION__);
572 snprintf(buffer, sizeof(buffer),"%s %d",
573 _("Zoom to Level"), _next_zoom - 1);
574 MACRO_BANNER_SHOW_INFO(_window, buffer);
575 map_set_zoom(_next_zoom - 1);
578 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
583 menu_cb_view_zoom_out(GtkMenuItem *item)
585 printf("%s()\n", __PRETTY_FUNCTION__);
590 snprintf(buffer, sizeof(buffer),"%s %d",
591 _("Zoom to Level"), _next_zoom + 1);
592 MACRO_BANNER_SHOW_INFO(_window, buffer);
593 map_set_zoom(_next_zoom + 1);
596 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
600 /****************************************************************************
601 * ABOVE: VIEW/ZOOM MENU ****************************************************
602 ****************************************************************************/
604 /****************************************************************************
605 * BELOW: VIEW/ROTATE MENU **************************************************
606 ****************************************************************************/
609 menu_cb_view_rotate_clock(GtkMenuItem *item)
611 printf("%s()\n", __PRETTY_FUNCTION__);
613 map_rotate(-ROTATE_DEGREES);
615 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
620 menu_cb_view_rotate_counter(GtkMenuItem *item)
622 printf("%s()\n", __PRETTY_FUNCTION__);
624 map_rotate(ROTATE_DEGREES);
626 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
631 menu_cb_view_rotate_reset(GtkMenuItem *item)
633 printf("%s()\n", __PRETTY_FUNCTION__);
635 map_rotate(-_next_map_rotate_angle);
637 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
642 menu_cb_view_rotate_auto(GtkMenuItem *item)
644 printf("%s()\n", __PRETTY_FUNCTION__);
646 if(gtk_check_menu_item_get_active(
647 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
649 _center_rotate = TRUE;
651 map_refresh_mark(TRUE);
652 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
656 _center_rotate = FALSE;
657 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
660 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
664 /****************************************************************************
665 * ABOVE: VIEW/ROTATE MENU **************************************************
666 ****************************************************************************/
668 /****************************************************************************
669 * BELOW: VIEW/PAN MENU *****************************************************
670 ****************************************************************************/
673 menu_cb_view_pan_up(GtkMenuItem *item)
675 gfloat panx_adj, pany_adj;
676 printf("%s()\n", __PRETTY_FUNCTION__);
678 /* Adjust for rotate angle. */
679 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
682 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
683 pixel2unit((gint)(pany_adj + 0.5f)));
685 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
690 menu_cb_view_pan_down(GtkMenuItem *item)
692 gfloat panx_adj, pany_adj;
693 printf("%s()\n", __PRETTY_FUNCTION__);
695 /* Adjust for rotate angle. */
696 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
699 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
700 pixel2unit((gint)(pany_adj + 0.5f)));
702 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
707 menu_cb_view_pan_left(GtkMenuItem *item)
709 gfloat panx_adj, pany_adj;
710 printf("%s()\n", __PRETTY_FUNCTION__);
712 /* Adjust for rotate angle. */
713 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
716 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
717 pixel2unit((gint)(pany_adj + 0.5f)));
719 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
724 menu_cb_view_pan_right(GtkMenuItem *item)
726 gfloat panx_adj, pany_adj;
727 printf("%s()\n", __PRETTY_FUNCTION__);
729 /* Adjust for rotate angle. */
730 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
733 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
734 pixel2unit((gint)(pany_adj + 0.5f)));
736 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
741 menu_cb_view_pan_north(GtkMenuItem *item)
743 printf("%s()\n", __PRETTY_FUNCTION__);
745 map_pan(0, -pixel2unit(PAN_PIXELS));
747 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
752 menu_cb_view_pan_south(GtkMenuItem *item)
754 printf("%s()\n", __PRETTY_FUNCTION__);
756 map_pan(0, pixel2unit(PAN_PIXELS));
758 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
763 menu_cb_view_pan_west(GtkMenuItem *item)
765 printf("%s()\n", __PRETTY_FUNCTION__);
767 map_pan(-pixel2unit(PAN_PIXELS), 0);
769 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
774 menu_cb_view_pan_east(GtkMenuItem *item)
776 printf("%s()\n", __PRETTY_FUNCTION__);
778 map_pan(pixel2unit(PAN_PIXELS), 0);
780 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
784 /****************************************************************************
785 * ABOVE: VIEW/PAN MENU *****************************************************
786 ****************************************************************************/
788 /****************************************************************************
789 * BELOW: VIEW/GOTO MENU ****************************************************
790 ****************************************************************************/
793 menu_cb_view_goto_latlon(GtkMenuItem *item)
795 static GtkWidget *dialog = NULL;
796 static GtkWidget *table = NULL;
797 static GtkWidget *label = NULL;
798 static GtkWidget *txt_lat = NULL;
799 static GtkWidget *txt_lon = NULL;
800 printf("%s()\n", __PRETTY_FUNCTION__);
804 dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
805 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
806 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
807 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
810 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
811 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
813 gtk_table_attach(GTK_TABLE(table),
814 label = gtk_label_new(_("Latitude")),
815 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
816 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
818 gtk_table_attach(GTK_TABLE(table),
819 txt_lat = gtk_entry_new(),
820 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
821 gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
822 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
824 g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
825 HILDON_GTK_INPUT_MODE_FULL, NULL);
827 g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
828 g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
829 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
832 gtk_table_attach(GTK_TABLE(table),
833 label = gtk_label_new(_("Longitude")),
834 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
835 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
837 gtk_table_attach(GTK_TABLE(table),
838 txt_lon = gtk_entry_new(),
839 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
840 gtk_entry_set_width_chars(GTK_ENTRY(txt_lon), 16);
841 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
843 g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
844 HILDON_GTK_INPUT_MODE_FULL, NULL);
846 g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
847 g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
848 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
852 /* Initialize with the current center position. */
856 unit2latlon(_center.unitx, _center.unity, lat, lon);
857 lat_format(lat, buffer);
858 gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
859 lon_format(lon, buffer);
860 gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
863 gtk_widget_show_all(dialog);
865 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
872 text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
873 lat = strdmstod(text, &error_check);
874 if(text == error_check || lat < -90. || lat > 90.) {
875 popup_error(dialog, _("Invalid Latitude"));
879 text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
880 lon = strdmstod(text, &error_check);
881 if(text == error_check || lon < -180. || lon > 180.) {
882 popup_error(dialog, _("Invalid Longitude"));
886 latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
888 gtk_check_menu_item_set_active(
889 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
890 map_center_unit(sel_unit);
893 gtk_widget_hide(dialog);
894 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
899 menu_cb_view_goto_address(GtkMenuItem *item)
901 static GtkWidget *dialog = NULL;
902 static GtkWidget *table = NULL;
903 static GtkWidget *label = NULL;
904 static GtkWidget *txt_addr = NULL;
905 printf("%s()\n", __PRETTY_FUNCTION__);
909 GtkEntryCompletion *comp;
910 dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
911 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
912 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
913 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
916 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
917 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
919 gtk_table_attach(GTK_TABLE(table),
920 label = gtk_label_new(_("Address")),
921 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
922 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
924 gtk_table_attach(GTK_TABLE(table),
925 txt_addr = gtk_entry_new(),
926 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
927 gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
928 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
930 /* Set up auto-completion. */
931 comp = gtk_entry_completion_new();
932 gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
933 gtk_entry_completion_set_text_column(comp, 0);
934 gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
937 gtk_widget_show_all(dialog);
939 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
941 Point origin = locate_address(dialog,
942 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
945 MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
948 gtk_check_menu_item_set_active(
949 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
951 map_center_unit(origin);
953 /* Success! Get out of the while loop. */
957 gtk_widget_hide(dialog);
958 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
963 menu_cb_view_goto_gps(GtkMenuItem *item)
965 printf("%s()\n", __PRETTY_FUNCTION__);
968 gtk_check_menu_item_set_active(
969 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
971 map_center_unit(_pos);
973 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
978 menu_cb_view_goto_nextway(GtkMenuItem *item)
981 printf("%s()\n", __PRETTY_FUNCTION__);
983 next_way = path_get_next_way();
985 if(next_way && next_way->point->unity)
988 gtk_check_menu_item_set_active(
989 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
991 map_center_unit(*next_way->point);
995 MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
998 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1003 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
1005 printf("%s()\n", __PRETTY_FUNCTION__);
1012 if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
1013 : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
1015 /* Auto-Center is enabled - use the GPS position. */
1017 latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
1018 banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
1019 MACRO_BANNER_SHOW_INFO(_window, banner);
1025 if(_center_mode > 0)
1026 gtk_check_menu_item_set_active(
1027 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
1029 map_center_unit(unit);
1033 MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
1034 /* Auto-Center is disabled - use the view center. */
1038 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1042 /****************************************************************************
1043 * ABOVE: VIEW/GOTO MENU ****************************************************
1044 ****************************************************************************/
1046 /****************************************************************************
1047 * BELOW: VIEW/SHOW MENU ****************************************************
1048 ****************************************************************************/
1051 menu_cb_view_show_tracks(GtkMenuItem *item)
1053 printf("%s()\n", __PRETTY_FUNCTION__);
1055 _show_paths ^= TRACKS_MASK;
1056 if(gtk_check_menu_item_get_active(
1057 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1059 _show_paths |= TRACKS_MASK;
1061 MACRO_QUEUE_DRAW_AREA();
1062 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1066 _show_paths &= ~TRACKS_MASK;
1068 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1071 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1076 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1078 printf("%s()\n", __PRETTY_FUNCTION__);
1080 _show_zoomlevel = gtk_check_menu_item_get_active(
1081 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1084 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1089 menu_cb_view_show_scale(GtkMenuItem *item)
1091 printf("%s()\n", __PRETTY_FUNCTION__);
1093 _show_scale = gtk_check_menu_item_get_active(
1094 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1097 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1102 menu_cb_view_show_comprose(GtkMenuItem *item)
1104 printf("%s()\n", __PRETTY_FUNCTION__);
1106 _show_comprose = gtk_check_menu_item_get_active(
1107 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1110 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1115 menu_cb_view_show_routes(GtkMenuItem *item)
1117 printf("%s()\n", __PRETTY_FUNCTION__);
1119 if(gtk_check_menu_item_get_active(
1120 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1122 _show_paths |= ROUTES_MASK;
1124 MACRO_QUEUE_DRAW_AREA();
1125 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1129 _show_paths &= ~ROUTES_MASK;
1131 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1134 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1139 menu_cb_view_show_velvec(GtkMenuItem *item)
1141 printf("%s()\n", __PRETTY_FUNCTION__);
1143 _show_velvec = gtk_check_menu_item_get_active(
1144 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1147 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1152 menu_cb_view_show_poi(GtkMenuItem *item)
1154 printf("%s()\n", __PRETTY_FUNCTION__);
1156 _show_poi = gtk_check_menu_item_get_active(
1157 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1160 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1164 /****************************************************************************
1165 * ABOVE: VIEW/SHOW MENU ****************************************************
1166 ****************************************************************************/
1168 /****************************************************************************
1169 * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1170 ****************************************************************************/
1173 menu_cb_view_ac_lead(GtkMenuItem *item)
1175 printf("%s()\n", __PRETTY_FUNCTION__);
1177 if(gtk_check_menu_item_get_active(
1178 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1180 _center_mode = CENTER_LEAD;
1181 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1182 map_refresh_mark(TRUE);
1185 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1190 menu_cb_view_ac_latlon(GtkMenuItem *item)
1192 printf("%s()\n", __PRETTY_FUNCTION__);
1194 if(gtk_check_menu_item_get_active(
1195 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1197 _center_mode = CENTER_LATLON;
1198 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1199 map_refresh_mark(TRUE);
1202 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1207 menu_cb_view_ac_none(GtkMenuItem *item)
1209 printf("%s()\n", __PRETTY_FUNCTION__);
1211 if(gtk_check_menu_item_get_active(
1212 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1214 _center_mode = -_center_mode;
1215 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1218 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1222 /****************************************************************************
1223 * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1224 ****************************************************************************/
1227 menu_cb_view_fullscreen(GtkMenuItem *item)
1229 printf("%s()\n", __PRETTY_FUNCTION__);
1231 if((_fullscreen = gtk_check_menu_item_get_active(
1232 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1233 gtk_window_fullscreen(GTK_WINDOW(_window));
1235 gtk_window_unfullscreen(GTK_WINDOW(_window));
1237 g_idle_add((GSourceFunc)window_present, NULL);
1239 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1243 /****************************************************************************
1244 * BELOW: GPS MENU **********************************************************
1245 ****************************************************************************/
1248 menu_cb_gps_enable(GtkMenuItem *item)
1250 printf("%s()\n", __PRETTY_FUNCTION__);
1252 if((_enable_gps = gtk_check_menu_item_get_active(
1253 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item))))
1260 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1261 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1263 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1268 menu_cb_gps_show_info(GtkMenuItem *item)
1270 printf("%s()\n", __PRETTY_FUNCTION__);
1272 _gps_info = gtk_check_menu_item_get_active(
1273 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1277 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1282 menu_cb_gps_details(GtkMenuItem *item)
1284 printf("%s()\n", __PRETTY_FUNCTION__);
1288 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1293 menu_cb_gps_reset(GtkMenuItem *item)
1295 printf("%s()\n", __PRETTY_FUNCTION__);
1299 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1303 /****************************************************************************
1304 * ABOVE: GPS MENU **********************************************************
1305 ****************************************************************************/
1308 menu_cb_settings(GtkMenuItem *item)
1310 printf("%s()\n", __PRETTY_FUNCTION__);
1312 if(settings_dialog())
1314 /* Settings have changed - reconnect to receiver. */
1322 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1327 menu_cb_help(GtkMenuItem *item)
1329 printf("%s()\n", __PRETTY_FUNCTION__);
1332 hildon_help_show(_osso, HELP_ID_INTRO, 0);
1334 ossohelp_show(_osso, HELP_ID_INTRO, 0);
1337 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1342 menu_cb_about(GtkMenuItem *item)
1344 printf("%s()\n", __PRETTY_FUNCTION__);
1347 hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1349 ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1352 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1359 menu_maps_remove_repos()
1362 printf("%s()\n", __PRETTY_FUNCTION__);
1364 /* Delete one menu item for each repo. */
1365 for(curr = _repo_list; curr; curr = curr->next)
1367 gtk_widget_destroy(gtk_container_get_children(
1368 GTK_CONTAINER(_menu_maps_submenu))->data);
1370 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1374 menu_maps_add_repos()
1377 GtkWidget *last_repo = NULL;
1378 printf("%s()\n", __PRETTY_FUNCTION__);
1380 for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1382 RepoData *rd = (RepoData*)curr->data;
1383 GtkWidget *menu_item;
1385 gtk_menu_prepend(_menu_maps_submenu, menu_item
1386 = gtk_radio_menu_item_new_with_label_from_widget(
1387 GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1390 gtk_menu_prepend(_menu_maps_submenu, menu_item
1391 = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1392 last_repo = menu_item;
1394 gtk_check_menu_item_set_active(
1395 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1396 rd->menu_item = menu_item;
1399 /* Add signals (must be after entire menu is built). */
1401 GList *currmi = gtk_container_get_children(
1402 GTK_CONTAINER(_menu_maps_submenu));
1403 for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1405 g_signal_connect(G_OBJECT(currmi->data), "activate",
1406 G_CALLBACK(menu_cb_maps_select), curr->data);
1410 gtk_widget_show_all(_menu_maps_submenu);
1411 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1415 * Create the menu items needed for the drop down menu.
1420 /* Create needed handles. */
1423 GtkWidget *submenu2;
1424 GtkWidget *menu_item;
1425 printf("%s()\n", __PRETTY_FUNCTION__);
1427 /* Get the menu of our view. */
1428 menu = GTK_MENU(gtk_menu_new());
1430 /* Create the menu items. */
1432 /* The "Routes" submenu. */
1433 gtk_menu_append(menu, menu_item
1434 = gtk_menu_item_new_with_label(_("Route")));
1435 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1436 submenu = gtk_menu_new());
1437 gtk_menu_append(submenu, _menu_route_open_item
1438 = gtk_menu_item_new_with_label(_("Open...")));
1439 gtk_menu_append(submenu, _menu_route_download_item
1440 = gtk_menu_item_new_with_label(_("Download...")));
1441 gtk_menu_append(submenu, _menu_route_save_item
1442 = gtk_menu_item_new_with_label(_("Save...")));
1443 gtk_menu_append(submenu, _menu_route_distnext_item
1444 = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1445 gtk_menu_append(submenu, _menu_route_distlast_item
1446 = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1447 gtk_menu_append(submenu, _menu_route_reset_item
1448 = gtk_menu_item_new_with_label(_("Reset")));
1449 gtk_menu_append(submenu, _menu_route_clear_item
1450 = gtk_menu_item_new_with_label(_("Clear")));
1452 /* The "Track" submenu. */
1453 gtk_menu_append(menu, menu_item
1454 = gtk_menu_item_new_with_label(_("Track")));
1455 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1456 submenu = gtk_menu_new());
1457 gtk_menu_append(submenu, _menu_track_open_item
1458 = gtk_menu_item_new_with_label(_("Open...")));
1459 gtk_menu_append(submenu, _menu_track_save_item
1460 = gtk_menu_item_new_with_label(_("Save...")));
1461 gtk_menu_append(submenu, _menu_track_insert_break_item
1462 = gtk_menu_item_new_with_label(_("Insert Break")));
1463 gtk_menu_append(submenu, _menu_track_insert_mark_item
1464 = gtk_menu_item_new_with_label(_("Insert Mark...")));
1465 gtk_menu_append(submenu, _menu_track_distlast_item
1466 = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1467 gtk_menu_append(submenu, _menu_track_distfirst_item
1468 = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1469 gtk_menu_append(submenu, _menu_track_clear_item
1470 = gtk_menu_item_new_with_label(_("Clear")));
1471 gtk_menu_append(submenu, _menu_track_enable_item
1472 = gtk_check_menu_item_new_with_label(_("Enable Track")));
1473 gtk_check_menu_item_set_active(
1474 GTK_CHECK_MENU_ITEM(_menu_track_enable_item), _enable_track);
1476 /* The "POI" submenu. */
1477 gtk_menu_append(menu, menu_item = _menu_poi_item
1478 = gtk_menu_item_new_with_label(_("POI")));
1479 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1480 submenu = gtk_menu_new());
1481 gtk_menu_append(submenu, _menu_poi_import_item
1482 = gtk_menu_item_new_with_label(_("Import...")));
1483 gtk_menu_append(submenu, _menu_poi_download_item
1484 = gtk_menu_item_new_with_label(_("Download...")));
1485 gtk_menu_append(submenu, _menu_poi_browse_item
1486 = gtk_menu_item_new_with_label(_("Browse...")));
1487 gtk_menu_append(submenu, _menu_poi_categories_item
1488 = gtk_menu_item_new_with_label(_("Categories...")));
1490 /* The "Maps" submenu. */
1491 gtk_menu_append(menu, menu_item
1492 = gtk_menu_item_new_with_label(_("Maps")));
1493 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1494 _menu_maps_submenu = gtk_menu_new());
1495 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1496 gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1497 = gtk_menu_item_new_with_label(_("Manage Maps...")));
1498 gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1499 = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1500 gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1501 = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1502 gtk_check_menu_item_set_active(
1503 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1504 menu_maps_add_repos();
1506 gtk_menu_append(menu, gtk_separator_menu_item_new());
1508 /* The "View" submenu. */
1509 gtk_menu_append(menu, menu_item
1510 = gtk_menu_item_new_with_label(_("View")));
1511 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1512 submenu = gtk_menu_new());
1514 /* The "View"/"Zoom" submenu. */
1515 gtk_menu_append(submenu, menu_item
1516 = gtk_menu_item_new_with_label(_("Zoom")));
1517 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1518 submenu2 = gtk_menu_new());
1519 gtk_menu_append(submenu2, _menu_view_zoom_in_item
1520 = gtk_menu_item_new_with_label(_("Zoom In")));
1521 gtk_menu_append(submenu2, _menu_view_zoom_out_item
1522 = gtk_menu_item_new_with_label(_("Zoom Out")));
1524 /* The "View"/"Rotate" submenu. */
1525 gtk_menu_append(submenu, menu_item
1526 = gtk_menu_item_new_with_label(_("Rotate")));
1527 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1528 submenu2 = gtk_menu_new());
1529 gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1530 = gtk_menu_item_new_with_label(_("Clockwise")));
1531 gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1532 = gtk_menu_item_new_with_label(_("Counter")));
1533 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1534 gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1535 = gtk_menu_item_new_with_label(_("Reset")));
1536 gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1537 = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1538 gtk_check_menu_item_set_active(
1539 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1541 /* The "View"/"Pan" submenu. */
1542 gtk_menu_append(submenu, menu_item
1543 = gtk_menu_item_new_with_label(_("Pan")));
1544 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1545 submenu2 = gtk_menu_new());
1546 gtk_menu_append(submenu2, _menu_view_pan_up_item
1547 = gtk_menu_item_new_with_label(_("Up")));
1548 gtk_menu_append(submenu2, _menu_view_pan_down_item
1549 = gtk_menu_item_new_with_label(_("Down")));
1550 gtk_menu_append(submenu2, _menu_view_pan_left_item
1551 = gtk_menu_item_new_with_label(_("Left")));
1552 gtk_menu_append(submenu2, _menu_view_pan_right_item
1553 = gtk_menu_item_new_with_label(_("Right")));
1554 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1555 gtk_menu_append(submenu2, _menu_view_pan_north_item
1556 = gtk_menu_item_new_with_label(_("North")));
1557 gtk_menu_append(submenu2, _menu_view_pan_south_item
1558 = gtk_menu_item_new_with_label(_("South")));
1559 gtk_menu_append(submenu2, _menu_view_pan_west_item
1560 = gtk_menu_item_new_with_label(_("West")));
1561 gtk_menu_append(submenu2, _menu_view_pan_east_item
1562 = gtk_menu_item_new_with_label(_("East")));
1564 /* The "Go to" submenu. */
1565 gtk_menu_append(submenu, menu_item
1566 = gtk_menu_item_new_with_label(_("Go to")));
1567 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1568 submenu2 = gtk_menu_new());
1569 gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1570 = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1571 gtk_menu_append(submenu2, _menu_view_goto_address_item
1572 = gtk_menu_item_new_with_label(_("Address...")));
1573 gtk_menu_append(submenu2, _menu_view_goto_gps_item
1574 = gtk_menu_item_new_with_label(_("GPS Location")));
1575 gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1576 = gtk_menu_item_new_with_label(_("Next Waypoint")));
1577 gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1578 = gtk_menu_item_new_with_label(_("Nearest POI")));
1580 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1582 /* The "View"/"Show" submenu. */
1583 gtk_menu_append(submenu, menu_item
1584 = gtk_menu_item_new_with_label(_("Show")));
1585 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1586 submenu2 = gtk_menu_new());
1587 gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1588 = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1589 gtk_check_menu_item_set_active(
1590 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1592 gtk_menu_append(submenu2, _menu_view_show_scale_item
1593 = gtk_check_menu_item_new_with_label(_("Scale")));
1594 gtk_check_menu_item_set_active(
1595 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1597 gtk_menu_append(submenu2, _menu_view_show_comprose_item
1598 = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1599 gtk_check_menu_item_set_active(
1600 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1602 gtk_menu_append(submenu2, _menu_view_show_routes_item
1603 = gtk_check_menu_item_new_with_label(_("Route")));
1604 gtk_check_menu_item_set_active(
1605 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1606 _show_paths & ROUTES_MASK);
1607 gtk_menu_append(submenu2, _menu_view_show_tracks_item
1608 = gtk_check_menu_item_new_with_label(_("Track")));
1609 gtk_check_menu_item_set_active(
1610 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1611 _show_paths & TRACKS_MASK);
1612 gtk_menu_append(submenu2, _menu_view_show_velvec_item
1613 = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1614 gtk_check_menu_item_set_active(
1615 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1616 gtk_menu_append(submenu2, _menu_view_show_poi_item
1617 = gtk_check_menu_item_new_with_label(_("POI")));
1618 gtk_check_menu_item_set_active(
1619 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1621 /* The "View"/"Auto-Center" submenu. */
1622 gtk_menu_append(submenu, menu_item
1623 = gtk_menu_item_new_with_label(_("Auto-Center")));
1624 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1625 submenu2 = gtk_menu_new());
1626 gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1627 = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1628 gtk_check_menu_item_set_active(
1629 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1630 _center_mode == CENTER_LATLON);
1631 gtk_menu_append(submenu2, _menu_view_ac_lead_item
1632 = gtk_radio_menu_item_new_with_label_from_widget(
1633 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1634 gtk_check_menu_item_set_active(
1635 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1636 _center_mode == CENTER_LEAD);
1637 gtk_menu_append(submenu2, _menu_view_ac_none_item
1638 = gtk_radio_menu_item_new_with_label_from_widget(
1639 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1640 gtk_check_menu_item_set_active(
1641 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1644 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1646 gtk_menu_append(submenu, _menu_view_fullscreen_item
1647 = gtk_check_menu_item_new_with_label(_("Full Screen")));
1648 gtk_check_menu_item_set_active(
1649 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1651 /* The "GPS" submenu. */
1652 gtk_menu_append(menu, menu_item
1653 = gtk_menu_item_new_with_label(_("GPS")));
1654 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1655 submenu = gtk_menu_new());
1656 gtk_menu_append(submenu, _menu_gps_enable_item
1657 = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1658 gtk_check_menu_item_set_active(
1659 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item), _enable_gps);
1660 gtk_menu_append(submenu, _menu_gps_show_info_item
1661 = gtk_check_menu_item_new_with_label(_("Show Information")));
1662 gtk_check_menu_item_set_active(
1663 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1664 gtk_menu_append(submenu, _menu_gps_details_item
1665 = gtk_menu_item_new_with_label(_("Details...")));
1666 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1667 gtk_menu_append(submenu, _menu_gps_reset_item
1668 = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1669 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1671 gtk_menu_append(menu, gtk_separator_menu_item_new());
1673 /* The other menu items. */
1674 gtk_menu_append(menu, _menu_settings_item
1675 = gtk_menu_item_new_with_label(_("Settings...")));
1676 gtk_menu_append(menu, gtk_separator_menu_item_new());
1677 gtk_menu_append(menu, _menu_help_item
1678 = gtk_menu_item_new_with_label(_("Help...")));
1679 gtk_menu_append(menu, _menu_about_item
1680 = gtk_menu_item_new_with_label(_("About...")));
1681 gtk_menu_append(menu, _menu_close_item
1682 = gtk_menu_item_new_with_label(_("Close")));
1684 /* We need to show menu items. */
1685 gtk_widget_show_all(GTK_WIDGET(menu));
1687 hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1689 /* Connect the "Route" signals. */
1690 g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1691 G_CALLBACK(menu_cb_route_open), NULL);
1692 g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1693 G_CALLBACK(menu_cb_route_download), NULL);
1694 g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1695 G_CALLBACK(menu_cb_route_save), NULL);
1696 g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1697 G_CALLBACK(menu_cb_route_distnext), NULL);
1698 g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1699 G_CALLBACK(menu_cb_route_distlast), NULL);
1700 g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1701 G_CALLBACK(menu_cb_route_reset), NULL);
1702 g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1703 G_CALLBACK(menu_cb_route_clear), NULL);
1705 /* Connect the "Track" signals. */
1706 g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1707 G_CALLBACK(menu_cb_track_open), NULL);
1708 g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1709 G_CALLBACK(menu_cb_track_save), NULL);
1710 g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1711 G_CALLBACK(menu_cb_track_insert_break), NULL);
1712 g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1713 G_CALLBACK(menu_cb_track_insert_mark), NULL);
1714 g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1715 G_CALLBACK(menu_cb_track_distlast), NULL);
1716 g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1717 G_CALLBACK(menu_cb_track_distfirst), NULL);
1718 g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1719 G_CALLBACK(menu_cb_track_clear), NULL);
1720 g_signal_connect(G_OBJECT(_menu_track_enable_item), "toggled",
1721 G_CALLBACK(menu_cb_track_enable), NULL);
1723 /* Connect the "POI" signals. */
1724 g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1725 G_CALLBACK(menu_cb_poi_import), NULL);
1726 g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1727 G_CALLBACK(menu_cb_poi_download), NULL);
1728 g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1729 G_CALLBACK(menu_cb_poi_browse), NULL);
1730 g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1731 G_CALLBACK(menu_cb_poi_categories), NULL);
1733 /* Connect the "Maps" signals. */
1734 g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1735 G_CALLBACK(menu_cb_maps_repoman), NULL);
1736 g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1737 G_CALLBACK(menu_cb_maps_mapman), NULL);
1738 g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1739 G_CALLBACK(menu_cb_maps_auto_download), NULL);
1741 /* Connect the "View" signals. */
1742 g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1743 G_CALLBACK(menu_cb_view_zoom_in), NULL);
1744 g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1745 G_CALLBACK(menu_cb_view_zoom_out), NULL);
1747 g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1748 G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1749 g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1750 G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1751 g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1752 G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1753 g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1754 G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1756 g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1757 G_CALLBACK(menu_cb_view_pan_up), NULL);
1758 g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1759 G_CALLBACK(menu_cb_view_pan_down), NULL);
1760 g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1761 G_CALLBACK(menu_cb_view_pan_left), NULL);
1762 g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1763 G_CALLBACK(menu_cb_view_pan_right), NULL);
1764 g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1765 G_CALLBACK(menu_cb_view_pan_north), NULL);
1766 g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1767 G_CALLBACK(menu_cb_view_pan_south), NULL);
1768 g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1769 G_CALLBACK(menu_cb_view_pan_west), NULL);
1770 g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1771 G_CALLBACK(menu_cb_view_pan_east), NULL);
1773 g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1774 G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1775 g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1776 G_CALLBACK(menu_cb_view_goto_address), NULL);
1777 g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1778 G_CALLBACK(menu_cb_view_goto_gps), NULL);
1779 g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1780 G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1781 g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1782 G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1784 g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1785 G_CALLBACK(menu_cb_view_show_tracks), NULL);
1786 g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1787 G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1788 g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1789 G_CALLBACK(menu_cb_view_show_scale), NULL);
1790 g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1791 G_CALLBACK(menu_cb_view_show_comprose), NULL);
1792 g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1793 G_CALLBACK(menu_cb_view_show_routes), NULL);
1794 g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1795 G_CALLBACK(menu_cb_view_show_velvec), NULL);
1796 g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1797 G_CALLBACK(menu_cb_view_show_poi), NULL);
1799 g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1800 G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1801 g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1802 G_CALLBACK(menu_cb_view_ac_lead), NULL);
1803 g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1804 G_CALLBACK(menu_cb_view_ac_none), NULL);
1806 g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1807 G_CALLBACK(menu_cb_view_fullscreen), NULL);
1809 /* Connect the "GPS" signals. */
1810 g_signal_connect(G_OBJECT(_menu_gps_enable_item), "toggled",
1811 G_CALLBACK(menu_cb_gps_enable), NULL);
1812 g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1813 G_CALLBACK(menu_cb_gps_show_info), NULL);
1814 g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1815 G_CALLBACK(menu_cb_gps_details), NULL);
1816 g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1817 G_CALLBACK(menu_cb_gps_reset), NULL);
1819 /* Connect the other menu item signals. */
1820 g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1821 G_CALLBACK(menu_cb_settings), NULL);
1822 g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1823 G_CALLBACK(menu_cb_help), NULL);
1824 g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1825 G_CALLBACK(menu_cb_about), NULL);
1826 g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1827 G_CALLBACK(gtk_main_quit), NULL);
1829 vprintf("%s(): return\n", __PRETTY_FUNCTION__);