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/>.
34 # include <hildon/hildon-help.h>
35 # include <hildon/hildon-program.h>
36 # include <hildon/hildon-banner.h>
38 # include <osso-helplib.h>
39 # include <hildon-widgets/hildon-program.h>
40 # include <hildon-widgets/hildon-banner.h>
41 # include <hildon-widgets/hildon-input-mode-hint.h>
50 #include "gdk-pixbuf-rotate.h"
59 /****************************************************************************
60 * BELOW: ROUTE MENU ********************************************************
61 ****************************************************************************/
64 menu_cb_route_open(GtkMenuItem *item)
68 printf("%s()\n", __PRETTY_FUNCTION__);
70 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
71 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_OPEN))
73 /* If auto is enabled, append the route, otherwise replace it. */
74 if(gpx_path_parse(&_route, buffer, size,
75 _autoroute_data.enabled ? 0 : 1))
77 path_save_route_to_db();
81 /* Find the nearest route point, if we're connected. */
82 route_find_nearest_point();
85 MACRO_BANNER_SHOW_INFO(_window, _("Route Opened"));
88 popup_error(_window, _("Error parsing GPX file."));
92 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
97 menu_cb_route_download(GtkMenuItem *item)
99 printf("%s()\n", __PRETTY_FUNCTION__);
100 route_download(NULL);
101 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
106 menu_cb_route_save(GtkMenuItem *item)
108 GnomeVFSHandle *handle;
109 printf("%s()\n", __PRETTY_FUNCTION__);
111 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
112 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_SAVE))
114 if(gpx_path_write(&_route, handle))
116 MACRO_BANNER_SHOW_INFO(_window, _("Route Saved"));
119 popup_error(_window, _("Error writing GPX file."));
120 gnome_vfs_close(handle);
123 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
128 menu_cb_route_distnext(GtkMenuItem *item)
130 printf("%s()\n", __PRETTY_FUNCTION__);
132 route_show_distance_to_next();
134 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
139 menu_cb_route_distlast(GtkMenuItem *item)
141 printf("%s()\n", __PRETTY_FUNCTION__);
143 route_show_distance_to_last();
145 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
150 menu_cb_route_reset(GtkMenuItem *item)
152 printf("%s()\n", __PRETTY_FUNCTION__);
156 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
161 menu_cb_route_clear(GtkMenuItem *item)
163 printf("%s()\n", __PRETTY_FUNCTION__);
166 MACRO_PATH_FREE(_route);
167 MACRO_PATH_INIT(_route);
168 path_save_route_to_db();
169 route_find_nearest_point();
172 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
176 /****************************************************************************
177 * ABOVE: ROUTE MENU ********************************************************
178 ****************************************************************************/
180 /****************************************************************************
181 * BELOW: TRACK MENU ********************************************************
182 ****************************************************************************/
185 menu_cb_track_open(GtkMenuItem *item)
189 printf("%s()\n", __PRETTY_FUNCTION__);
191 if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
192 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_OPEN))
194 if(gpx_path_parse(&_track, buffer, size, -1))
197 MACRO_BANNER_SHOW_INFO(_window, _("Track Opened"));
200 popup_error(_window, _("Error parsing GPX file."));
204 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
209 menu_cb_track_save(GtkMenuItem *item)
211 GnomeVFSHandle *handle;
212 printf("%s()\n", __PRETTY_FUNCTION__);
214 if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
215 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_SAVE))
217 if(gpx_path_write(&_track, handle))
219 MACRO_BANNER_SHOW_INFO(_window, _("Track Saved"));
222 popup_error(_window, _("Error writing GPX file."));
223 gnome_vfs_close(handle);
226 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
231 menu_cb_track_insert_break(GtkMenuItem *item)
233 printf("%s()\n", __PRETTY_FUNCTION__);
235 track_insert_break(TRUE);
237 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
242 menu_cb_track_insert_mark(GtkMenuItem *item)
245 gchar tmp1[LL_FMT_LEN], tmp2[LL_FMT_LEN], *p_latlon;
246 static GtkWidget *dialog = NULL;
247 static GtkWidget *table = NULL;
248 static GtkWidget *label = NULL;
249 static GtkWidget *lbl_latlon = NULL;
250 static GtkWidget *txt_scroll = NULL;
251 static GtkWidget *txt_desc = NULL;
252 printf("%s()\n", __PRETTY_FUNCTION__);
256 dialog = gtk_dialog_new_with_buttons(_("Insert Mark"),
257 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
258 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
259 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
262 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
263 table = gtk_table_new(2, 2, FALSE), TRUE, TRUE, 0);
265 gtk_table_attach(GTK_TABLE(table),
266 label = gtk_label_new(_("Lat, Lon:")),
267 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
268 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
270 gtk_table_attach(GTK_TABLE(table),
271 lbl_latlon = gtk_label_new(""),
272 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
273 gtk_misc_set_alignment(GTK_MISC(lbl_latlon), 0.0f, 0.5f);
275 gtk_table_attach(GTK_TABLE(table),
276 label = gtk_label_new(_("Description")),
277 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
278 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
280 txt_scroll = gtk_scrolled_window_new(NULL, NULL);
281 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(txt_scroll),
283 gtk_table_attach(GTK_TABLE(table),
285 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
287 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scroll),
288 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
290 txt_desc = gtk_text_view_new ();
291 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt_desc), GTK_WRAP_WORD);
293 gtk_container_add(GTK_CONTAINER(txt_scroll), txt_desc);
294 gtk_widget_set_size_request(GTK_WIDGET(txt_scroll), 400, 60);
297 unit2latlon(_pos.unitx, _pos.unity, lat, lon);
298 lat_format(lat, tmp1);
299 lon_format(lon, tmp2);
300 p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2);
301 gtk_label_set_text(GTK_LABEL(lbl_latlon), p_latlon);
304 gtk_text_buffer_set_text(
305 gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)), "", 0);
307 gtk_widget_show_all(dialog);
309 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
312 GtkTextIter ti1, ti2;
315 tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc));
316 gtk_text_buffer_get_iter_at_offset(tbuf, &ti1, 0);
317 gtk_text_buffer_get_end_iter(tbuf, &ti2);
318 desc = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
322 MACRO_PATH_INCREMENT_WTAIL(_track);
323 _track.wtail->point = _track.tail;
325 = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
330 _("Please provide a description for the mark."));
336 MACRO_QUEUE_DRAW_AREA();
339 gtk_widget_hide(dialog);
341 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
346 menu_cb_track_distlast(GtkMenuItem *item)
348 printf("%s()\n", __PRETTY_FUNCTION__);
350 track_show_distance_from_last();
352 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
357 menu_cb_track_distfirst(GtkMenuItem *item)
359 printf("%s()\n", __PRETTY_FUNCTION__);
361 track_show_distance_from_first();
363 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
368 menu_cb_track_clear(GtkMenuItem *item)
370 printf("%s()\n", __PRETTY_FUNCTION__);
374 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
379 menu_cb_track_enable_tracking(GtkMenuItem *item)
381 printf("%s()\n", __PRETTY_FUNCTION__);
383 if(!(_enable_tracking = gtk_check_menu_item_get_active(
384 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item))))
386 track_insert_break(FALSE); /* FALSE = not temporary */
387 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Disabled"));
391 MACRO_BANNER_SHOW_INFO(_window, _("Tracking Enabled"));
395 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
399 /****************************************************************************
400 * ABOVE: TRACK MENU ********************************************************
401 ****************************************************************************/
403 /****************************************************************************
404 * BELOW: POI MENU **********************************************************
405 ****************************************************************************/
408 menu_cb_poi_import(GtkMenuItem *item)
410 printf("%s()\n", __PRETTY_FUNCTION__);
412 if(poi_import_dialog(_center.unitx, _center.unity))
415 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
420 menu_cb_poi_download(GtkMenuItem *item)
422 printf("%s()\n", __PRETTY_FUNCTION__);
424 if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
427 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
432 menu_cb_poi_browse(GtkMenuItem *item)
434 printf("%s()\n", __PRETTY_FUNCTION__);
436 if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
439 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
444 menu_cb_poi_categories(GtkMenuItem *item)
446 printf("%s()\n", __PRETTY_FUNCTION__);
448 if(category_list_dialog(_window))
451 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
455 /****************************************************************************
456 * ABOVE: POI MENU **********************************************************
457 ****************************************************************************/
459 /****************************************************************************
460 * BELOW: MAPS MENU *********************************************************
461 ****************************************************************************/
464 menu_cb_maps_repoman(GtkMenuItem *item)
466 printf("%s()\n", __PRETTY_FUNCTION__);
468 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
473 menu_cb_maps_repodown(GtkMenuItem *item)
475 printf("%s()\n", __PRETTY_FUNCTION__);
477 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
482 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
484 printf("%s()\n", __PRETTY_FUNCTION__);
486 if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
488 repo_set_curr(new_repo);
489 map_refresh_mark(TRUE);
491 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
496 menu_cb_maps_mapman(GtkMenuItem *item)
498 printf("%s()\n", __PRETTY_FUNCTION__);
502 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
507 menu_cb_maps_auto_download(GtkMenuItem *item)
509 printf("%s()\n", __PRETTY_FUNCTION__);
511 if((_auto_download = gtk_check_menu_item_get_active(
512 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
514 if(_curr_repo->url == REPOTYPE_NONE)
516 _("NOTE: You must set a Map URI in the current repository in "
517 "order to download maps."));
518 map_refresh_mark(TRUE);
521 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
525 /****************************************************************************
526 * ABOVE: MAPS MENU *********************************************************
527 ****************************************************************************/
529 /****************************************************************************
530 * BELOW: LAYERS MENU *******************************************************
531 ****************************************************************************/
534 menu_cb_layers_toggle(GtkCheckMenuItem *item, gpointer layer)
536 RepoData* rd = (RepoData*)layer;
538 printf("%s()\n", __PRETTY_FUNCTION__);
540 rd->layer_enabled = !rd->layer_enabled;
542 /* refresh if layer is on top of active map */
543 if (repo_is_layer (_curr_repo, rd)) {
544 /* reset layer's countdown */
545 rd->layer_refresh_countdown = rd->layer_refresh_interval;
547 map_refresh_mark (TRUE);
550 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
554 /****************************************************************************
555 * ABOVE: LAYERS MENU *******************************************************
556 ****************************************************************************/
558 /****************************************************************************
559 * BELOW: VIEW/ZOOM MENU ****************************************************
560 ****************************************************************************/
563 menu_cb_view_zoom_in(GtkMenuItem *item)
565 printf("%s()\n", __PRETTY_FUNCTION__);
570 snprintf(buffer, sizeof(buffer),"%s %d",
571 _("Zoom to Level"), _next_zoom - 1);
572 MACRO_BANNER_SHOW_INFO(_window, buffer);
573 map_set_zoom(_next_zoom - 1);
576 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
581 menu_cb_view_zoom_out(GtkMenuItem *item)
583 printf("%s()\n", __PRETTY_FUNCTION__);
588 snprintf(buffer, sizeof(buffer),"%s %d",
589 _("Zoom to Level"), _next_zoom + 1);
590 MACRO_BANNER_SHOW_INFO(_window, buffer);
591 map_set_zoom(_next_zoom + 1);
594 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
598 /****************************************************************************
599 * ABOVE: VIEW/ZOOM MENU ****************************************************
600 ****************************************************************************/
602 /****************************************************************************
603 * BELOW: VIEW/ROTATE MENU **************************************************
604 ****************************************************************************/
607 menu_cb_view_rotate_clock(GtkMenuItem *item)
609 printf("%s()\n", __PRETTY_FUNCTION__);
611 map_rotate(-ROTATE_DEGREES);
613 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
618 menu_cb_view_rotate_counter(GtkMenuItem *item)
620 printf("%s()\n", __PRETTY_FUNCTION__);
622 map_rotate(ROTATE_DEGREES);
624 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
629 menu_cb_view_rotate_reset(GtkMenuItem *item)
631 printf("%s()\n", __PRETTY_FUNCTION__);
633 map_rotate(-_next_map_rotate_angle);
635 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
640 menu_cb_view_rotate_auto(GtkMenuItem *item)
642 printf("%s()\n", __PRETTY_FUNCTION__);
644 if(gtk_check_menu_item_get_active(
645 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
647 _center_rotate = TRUE;
649 map_refresh_mark(TRUE);
650 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
654 _center_rotate = FALSE;
655 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
658 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
662 /****************************************************************************
663 * ABOVE: VIEW/ROTATE MENU **************************************************
664 ****************************************************************************/
666 /****************************************************************************
667 * BELOW: VIEW/PAN MENU *****************************************************
668 ****************************************************************************/
671 menu_cb_view_pan_up(GtkMenuItem *item)
673 gfloat panx_adj, pany_adj;
674 printf("%s()\n", __PRETTY_FUNCTION__);
676 /* Adjust for rotate angle. */
677 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
680 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
681 pixel2unit((gint)(pany_adj + 0.5f)));
683 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
688 menu_cb_view_pan_down(GtkMenuItem *item)
690 gfloat panx_adj, pany_adj;
691 printf("%s()\n", __PRETTY_FUNCTION__);
693 /* Adjust for rotate angle. */
694 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
697 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
698 pixel2unit((gint)(pany_adj + 0.5f)));
700 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
705 menu_cb_view_pan_left(GtkMenuItem *item)
707 gfloat panx_adj, pany_adj;
708 printf("%s()\n", __PRETTY_FUNCTION__);
710 /* Adjust for rotate angle. */
711 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
714 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
715 pixel2unit((gint)(pany_adj + 0.5f)));
717 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
722 menu_cb_view_pan_right(GtkMenuItem *item)
724 gfloat panx_adj, pany_adj;
725 printf("%s()\n", __PRETTY_FUNCTION__);
727 /* Adjust for rotate angle. */
728 gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
731 map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
732 pixel2unit((gint)(pany_adj + 0.5f)));
734 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
739 menu_cb_view_pan_north(GtkMenuItem *item)
741 printf("%s()\n", __PRETTY_FUNCTION__);
743 map_pan(0, -pixel2unit(PAN_PIXELS));
745 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
750 menu_cb_view_pan_south(GtkMenuItem *item)
752 printf("%s()\n", __PRETTY_FUNCTION__);
754 map_pan(0, pixel2unit(PAN_PIXELS));
756 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
761 menu_cb_view_pan_west(GtkMenuItem *item)
763 printf("%s()\n", __PRETTY_FUNCTION__);
765 map_pan(-pixel2unit(PAN_PIXELS), 0);
767 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
772 menu_cb_view_pan_east(GtkMenuItem *item)
774 printf("%s()\n", __PRETTY_FUNCTION__);
776 map_pan(pixel2unit(PAN_PIXELS), 0);
778 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
782 /****************************************************************************
783 * ABOVE: VIEW/PAN MENU *****************************************************
784 ****************************************************************************/
786 /****************************************************************************
787 * BELOW: VIEW/GOTO MENU ****************************************************
788 ****************************************************************************/
791 menu_cb_view_goto_latlon(GtkMenuItem *item)
793 static GtkWidget *dialog = NULL;
794 static GtkWidget *table = NULL;
795 static GtkWidget *label = NULL;
796 static GtkWidget *txt_lat = NULL;
797 static GtkWidget *txt_lon = NULL;
798 printf("%s()\n", __PRETTY_FUNCTION__);
802 dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
803 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
804 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
805 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
808 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
809 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
811 gtk_table_attach(GTK_TABLE(table),
812 label = gtk_label_new(_("Latitude")),
813 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
814 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
816 gtk_table_attach(GTK_TABLE(table),
817 txt_lat = gtk_entry_new(),
818 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
819 gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
820 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
823 g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
824 HILDON_GTK_INPUT_MODE_FULL, NULL);
826 g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
827 g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
828 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);
844 g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
845 HILDON_GTK_INPUT_MODE_FULL, NULL);
847 g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
848 g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
849 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
854 /* Initialize with the current center position. */
858 unit2latlon(_center.unitx, _center.unity, lat, lon);
859 lat_format(lat, buffer);
860 gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
861 lon_format(lon, buffer);
862 gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
865 gtk_widget_show_all(dialog);
867 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
874 text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
875 lat = strdmstod(text, &error_check);
876 if(text == error_check || lat < -90. || lat > 90.) {
877 popup_error(dialog, _("Invalid Latitude"));
881 text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
882 lon = strdmstod(text, &error_check);
883 if(text == error_check || lon < -180. || lon > 180.) {
884 popup_error(dialog, _("Invalid Longitude"));
888 latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
890 gtk_check_menu_item_set_active(
891 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
892 map_center_unit(sel_unit);
895 gtk_widget_hide(dialog);
896 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
901 menu_cb_view_goto_address(GtkMenuItem *item)
903 static GtkWidget *dialog = NULL;
904 static GtkWidget *table = NULL;
905 static GtkWidget *label = NULL;
906 static GtkWidget *txt_addr = NULL;
907 printf("%s()\n", __PRETTY_FUNCTION__);
911 GtkEntryCompletion *comp;
912 dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
913 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
914 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
915 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
918 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
919 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
921 gtk_table_attach(GTK_TABLE(table),
922 label = gtk_label_new(_("Address")),
923 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
924 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
926 gtk_table_attach(GTK_TABLE(table),
927 txt_addr = gtk_entry_new(),
928 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
929 gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
930 gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
932 /* Set up auto-completion. */
933 comp = gtk_entry_completion_new();
934 gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
935 gtk_entry_completion_set_text_column(comp, 0);
936 gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
939 gtk_widget_show_all(dialog);
941 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
943 Point origin = locate_address(dialog,
944 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
947 MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
950 gtk_check_menu_item_set_active(
951 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
953 map_center_unit(origin);
955 /* Success! Get out of the while loop. */
959 gtk_widget_hide(dialog);
960 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
965 menu_cb_view_goto_gps(GtkMenuItem *item)
967 printf("%s()\n", __PRETTY_FUNCTION__);
970 gtk_check_menu_item_set_active(
971 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
973 map_center_unit(_pos);
975 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
980 menu_cb_view_goto_nextway(GtkMenuItem *item)
983 printf("%s()\n", __PRETTY_FUNCTION__);
985 next_way = path_get_next_way();
987 if(next_way && next_way->point->unity)
990 gtk_check_menu_item_set_active(
991 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
993 map_center_unit(*next_way->point);
997 MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
1000 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1005 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
1007 printf("%s()\n", __PRETTY_FUNCTION__);
1014 if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
1015 : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
1017 /* Auto-Center is enabled - use the GPS position. */
1019 latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
1020 banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
1021 MACRO_BANNER_SHOW_INFO(_window, banner);
1027 if(_center_mode > 0)
1028 gtk_check_menu_item_set_active(
1029 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
1031 map_center_unit(unit);
1035 MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
1036 /* Auto-Center is disabled - use the view center. */
1040 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1044 /****************************************************************************
1045 * ABOVE: VIEW/GOTO MENU ****************************************************
1046 ****************************************************************************/
1048 /****************************************************************************
1049 * BELOW: VIEW/SHOW MENU ****************************************************
1050 ****************************************************************************/
1053 menu_cb_view_show_tracks(GtkMenuItem *item)
1055 printf("%s()\n", __PRETTY_FUNCTION__);
1057 _show_paths ^= TRACKS_MASK;
1058 if(gtk_check_menu_item_get_active(
1059 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1061 _show_paths |= TRACKS_MASK;
1063 MACRO_QUEUE_DRAW_AREA();
1064 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1068 _show_paths &= ~TRACKS_MASK;
1070 MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1073 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1078 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1080 printf("%s()\n", __PRETTY_FUNCTION__);
1082 _show_zoomlevel = gtk_check_menu_item_get_active(
1083 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1086 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1091 menu_cb_view_show_scale(GtkMenuItem *item)
1093 printf("%s()\n", __PRETTY_FUNCTION__);
1095 _show_scale = gtk_check_menu_item_get_active(
1096 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1099 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1104 menu_cb_view_show_comprose(GtkMenuItem *item)
1106 printf("%s()\n", __PRETTY_FUNCTION__);
1108 _show_comprose = gtk_check_menu_item_get_active(
1109 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1112 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1117 menu_cb_view_show_routes(GtkMenuItem *item)
1119 printf("%s()\n", __PRETTY_FUNCTION__);
1121 if(gtk_check_menu_item_get_active(
1122 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1124 _show_paths |= ROUTES_MASK;
1126 MACRO_QUEUE_DRAW_AREA();
1127 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1131 _show_paths &= ~ROUTES_MASK;
1133 MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1136 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1141 menu_cb_view_show_velvec(GtkMenuItem *item)
1143 printf("%s()\n", __PRETTY_FUNCTION__);
1145 _show_velvec = gtk_check_menu_item_get_active(
1146 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1149 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1154 menu_cb_view_show_poi(GtkMenuItem *item)
1156 printf("%s()\n", __PRETTY_FUNCTION__);
1158 _show_poi = gtk_check_menu_item_get_active(
1159 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1162 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1166 /****************************************************************************
1167 * ABOVE: VIEW/SHOW MENU ****************************************************
1168 ****************************************************************************/
1170 /****************************************************************************
1171 * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1172 ****************************************************************************/
1175 menu_cb_view_ac_lead(GtkMenuItem *item)
1177 printf("%s()\n", __PRETTY_FUNCTION__);
1179 if(gtk_check_menu_item_get_active(
1180 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1182 _center_mode = CENTER_LEAD;
1183 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1184 map_refresh_mark(TRUE);
1187 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1192 menu_cb_view_ac_latlon(GtkMenuItem *item)
1194 printf("%s()\n", __PRETTY_FUNCTION__);
1196 if(gtk_check_menu_item_get_active(
1197 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1199 _center_mode = CENTER_LATLON;
1200 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1201 map_refresh_mark(TRUE);
1204 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1209 menu_cb_view_ac_none(GtkMenuItem *item)
1211 printf("%s()\n", __PRETTY_FUNCTION__);
1213 if(gtk_check_menu_item_get_active(
1214 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1216 _center_mode = -_center_mode;
1217 MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1220 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1224 /****************************************************************************
1225 * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1226 ****************************************************************************/
1229 menu_cb_view_fullscreen(GtkMenuItem *item)
1231 printf("%s()\n", __PRETTY_FUNCTION__);
1233 if((_fullscreen = gtk_check_menu_item_get_active(
1234 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1235 gtk_window_fullscreen(GTK_WINDOW(_window));
1237 gtk_window_unfullscreen(GTK_WINDOW(_window));
1239 g_idle_add((GSourceFunc)window_present, NULL);
1241 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1245 /****************************************************************************
1246 * BELOW: GPS MENU **********************************************************
1247 ****************************************************************************/
1250 menu_cb_gps_enable(GtkMenuItem *item)
1252 printf("%s()\n", __PRETTY_FUNCTION__);
1254 if((_enable_gps = gtk_check_menu_item_get_active(
1255 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item))))
1262 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1263 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1265 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1270 menu_cb_gps_show_info(GtkMenuItem *item)
1272 printf("%s()\n", __PRETTY_FUNCTION__);
1274 _gps_info = gtk_check_menu_item_get_active(
1275 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1279 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1284 menu_cb_gps_details(GtkMenuItem *item)
1286 printf("%s()\n", __PRETTY_FUNCTION__);
1290 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1295 menu_cb_gps_reset(GtkMenuItem *item)
1297 printf("%s()\n", __PRETTY_FUNCTION__);
1301 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1305 /****************************************************************************
1306 * ABOVE: GPS MENU **********************************************************
1307 ****************************************************************************/
1310 menu_cb_settings(GtkMenuItem *item)
1312 printf("%s()\n", __PRETTY_FUNCTION__);
1314 if(settings_dialog())
1316 /* Settings have changed - reconnect to receiver. */
1324 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1329 menu_cb_help(GtkMenuItem *item)
1331 printf("%s()\n", __PRETTY_FUNCTION__);
1334 hildon_help_show(_osso, HELP_ID_INTRO, 0);
1336 ossohelp_show(_osso, HELP_ID_INTRO, 0);
1339 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1344 menu_cb_about(GtkMenuItem *item)
1346 printf("%s()\n", __PRETTY_FUNCTION__);
1349 hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1351 ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1354 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1361 menu_maps_remove_repos()
1364 printf("%s()\n", __PRETTY_FUNCTION__);
1366 /* Delete one menu item for each repo. */
1367 for(curr = _repo_list; curr; curr = curr->next)
1369 gtk_widget_destroy(gtk_container_get_children(
1370 GTK_CONTAINER(_menu_maps_submenu))->data);
1373 menu_layers_remove_repos ();
1375 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1380 menu_layers_remove_repos()
1383 printf("%s()\n", __PRETTY_FUNCTION__);
1385 /* Delete one menu item for each repo. */
1386 while ((child = gtk_container_get_children(GTK_CONTAINER(_menu_layers_submenu))))
1387 gtk_widget_destroy (child->data);
1389 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1394 menu_maps_add_repos()
1397 GtkWidget *last_repo = NULL;
1398 printf("%s()\n", __PRETTY_FUNCTION__);
1400 for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1402 RepoData *rd = (RepoData*)curr->data;
1403 GtkWidget *menu_item;
1405 gtk_menu_prepend(_menu_maps_submenu, menu_item
1406 = gtk_radio_menu_item_new_with_label_from_widget(
1407 GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1410 gtk_menu_prepend(_menu_maps_submenu, menu_item
1411 = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1412 last_repo = menu_item;
1414 gtk_check_menu_item_set_active(
1415 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1416 rd->menu_item = menu_item;
1419 /* Add signals (must be after entire menu is built). */
1421 GList *currmi = gtk_container_get_children(
1422 GTK_CONTAINER(_menu_maps_submenu));
1423 for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1425 g_signal_connect(G_OBJECT(currmi->data), "activate",
1426 G_CALLBACK(menu_cb_maps_select), curr->data);
1430 gtk_widget_show_all(_menu_maps_submenu);
1431 menu_layers_add_repos ();
1433 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1438 menu_layers_add_repos()
1442 printf("%s()\n", __PRETTY_FUNCTION__);
1444 for(curr = _repo_list; curr; curr = curr->next)
1446 RepoData* rd = (RepoData*)curr->data;
1447 GtkWidget *item, *submenu = NULL, *layer_item;
1449 /* if repository doesn't have layers, skip it */
1453 /* if it has only one layer, add just one check menu item */
1454 if (!rd->layers->layers) {
1455 gchar *title = g_malloc (strlen (rd->name) + strlen (rd->layers->name) + 3);
1457 sprintf (title, "%s[%s]", rd->name, rd->layers->name);
1460 gtk_menu_append (_menu_layers_submenu, layer_item = gtk_check_menu_item_new_with_label (title));
1461 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (layer_item), rd->layer_enabled);
1462 g_signal_connect (G_OBJECT (layer_item), "toggled", G_CALLBACK (menu_cb_layers_toggle), rd);
1463 rd->menu_item = layer_item;
1466 /* append main repository menu item */
1467 gtk_menu_append (_menu_layers_submenu, item = gtk_menu_item_new_with_label(rd->name));
1472 submenu = gtk_menu_new ();
1473 gtk_menu_append (submenu, layer_item = gtk_check_menu_item_new_with_label (rd->name));
1474 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (layer_item), rd->layer_enabled);
1475 g_signal_connect (G_OBJECT (layer_item), "toggled", G_CALLBACK (menu_cb_layers_toggle), rd);
1476 rd->menu_item = layer_item;
1481 gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
1485 gtk_widget_show_all(_menu_layers_submenu);
1486 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1491 * Create the menu items needed for the drop down menu.
1496 /* Create needed handles. */
1499 GtkWidget *submenu2;
1500 GtkWidget *menu_item;
1501 printf("%s()\n", __PRETTY_FUNCTION__);
1503 /* Get the menu of our view. */
1504 menu = GTK_MENU(gtk_menu_new());
1506 /* Create the menu items. */
1508 /* The "Routes" submenu. */
1509 gtk_menu_append(menu, menu_item
1510 = gtk_menu_item_new_with_label(_("Route")));
1511 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1512 submenu = gtk_menu_new());
1513 gtk_menu_append(submenu, _menu_route_open_item
1514 = gtk_menu_item_new_with_label(_("Open...")));
1515 gtk_menu_append(submenu, _menu_route_download_item
1516 = gtk_menu_item_new_with_label(_("Download...")));
1517 gtk_menu_append(submenu, _menu_route_save_item
1518 = gtk_menu_item_new_with_label(_("Save...")));
1519 gtk_menu_append(submenu, _menu_route_distnext_item
1520 = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1521 gtk_menu_append(submenu, _menu_route_distlast_item
1522 = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1523 gtk_menu_append(submenu, _menu_route_reset_item
1524 = gtk_menu_item_new_with_label(_("Reset")));
1525 gtk_menu_append(submenu, _menu_route_clear_item
1526 = gtk_menu_item_new_with_label(_("Clear")));
1528 /* The "Track" submenu. */
1529 gtk_menu_append(menu, menu_item
1530 = gtk_menu_item_new_with_label(_("Track")));
1531 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1532 submenu = gtk_menu_new());
1533 gtk_menu_append(submenu, _menu_track_open_item
1534 = gtk_menu_item_new_with_label(_("Open...")));
1535 gtk_menu_append(submenu, _menu_track_save_item
1536 = gtk_menu_item_new_with_label(_("Save...")));
1537 gtk_menu_append(submenu, _menu_track_insert_break_item
1538 = gtk_menu_item_new_with_label(_("Insert Break")));
1539 gtk_menu_append(submenu, _menu_track_insert_mark_item
1540 = gtk_menu_item_new_with_label(_("Insert Mark...")));
1541 gtk_menu_append(submenu, _menu_track_distlast_item
1542 = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1543 gtk_menu_append(submenu, _menu_track_distfirst_item
1544 = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1545 gtk_menu_append(submenu, _menu_track_clear_item
1546 = gtk_menu_item_new_with_label(_("Clear")));
1547 gtk_menu_append(submenu, _menu_track_enable_tracking_item
1548 = gtk_check_menu_item_new_with_label(_("Enable Tracking")));
1549 gtk_check_menu_item_set_active(
1550 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item), _enable_tracking);
1552 /* The "POI" submenu. */
1553 gtk_menu_append(menu, menu_item = _menu_poi_item
1554 = gtk_menu_item_new_with_label(_("POI")));
1555 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1556 submenu = gtk_menu_new());
1557 gtk_menu_append(submenu, _menu_poi_import_item
1558 = gtk_menu_item_new_with_label(_("Import...")));
1559 gtk_menu_append(submenu, _menu_poi_download_item
1560 = gtk_menu_item_new_with_label(_("Download...")));
1561 gtk_menu_append(submenu, _menu_poi_browse_item
1562 = gtk_menu_item_new_with_label(_("Browse...")));
1563 gtk_menu_append(submenu, _menu_poi_categories_item
1564 = gtk_menu_item_new_with_label(_("Categories...")));
1566 _menu_layers_submenu = gtk_menu_new();
1568 /* The "Maps" submenu. */
1569 gtk_menu_append(menu, menu_item
1570 = gtk_menu_item_new_with_label(_("Maps")));
1571 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1572 _menu_maps_submenu = gtk_menu_new());
1573 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1574 gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1575 = gtk_menu_item_new_with_label(_("Manage Maps...")));
1576 gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1577 = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1578 gtk_check_menu_item_set_active(
1579 GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1580 gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1581 gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1582 = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1583 gtk_menu_append(_menu_maps_submenu, _menu_maps_repodown_item
1584 = gtk_menu_item_new_with_label(
1585 _("Download Sample Repositories...")));
1586 menu_maps_add_repos();
1588 gtk_menu_append(menu, gtk_separator_menu_item_new());
1590 /* The "View" submenu. */
1591 gtk_menu_append(menu, menu_item
1592 = gtk_menu_item_new_with_label(_("View")));
1593 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1594 submenu = gtk_menu_new());
1596 /* The View/Layers submenu */
1597 gtk_menu_append(submenu, menu_item
1598 = gtk_menu_item_new_with_label(_("Layers")));
1599 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), _menu_layers_submenu);
1601 /* The "View"/"Zoom" submenu. */
1602 gtk_menu_append(submenu, menu_item
1603 = gtk_menu_item_new_with_label(_("Zoom")));
1604 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1605 submenu2 = gtk_menu_new());
1606 gtk_menu_append(submenu2, _menu_view_zoom_in_item
1607 = gtk_menu_item_new_with_label(_("Zoom In")));
1608 gtk_menu_append(submenu2, _menu_view_zoom_out_item
1609 = gtk_menu_item_new_with_label(_("Zoom Out")));
1611 /* The "View"/"Rotate" submenu. */
1612 gtk_menu_append(submenu, menu_item
1613 = gtk_menu_item_new_with_label(_("Rotate")));
1614 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1615 submenu2 = gtk_menu_new());
1616 gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1617 = gtk_menu_item_new_with_label(_("Clockwise")));
1618 gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1619 = gtk_menu_item_new_with_label(_("Counter")));
1620 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1621 gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1622 = gtk_menu_item_new_with_label(_("Reset")));
1623 gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1624 = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1625 gtk_check_menu_item_set_active(
1626 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1628 /* The "View"/"Pan" submenu. */
1629 gtk_menu_append(submenu, menu_item
1630 = gtk_menu_item_new_with_label(_("Pan")));
1631 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1632 submenu2 = gtk_menu_new());
1633 gtk_menu_append(submenu2, _menu_view_pan_up_item
1634 = gtk_menu_item_new_with_label(_("Up")));
1635 gtk_menu_append(submenu2, _menu_view_pan_down_item
1636 = gtk_menu_item_new_with_label(_("Down")));
1637 gtk_menu_append(submenu2, _menu_view_pan_left_item
1638 = gtk_menu_item_new_with_label(_("Left")));
1639 gtk_menu_append(submenu2, _menu_view_pan_right_item
1640 = gtk_menu_item_new_with_label(_("Right")));
1641 gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1642 gtk_menu_append(submenu2, _menu_view_pan_north_item
1643 = gtk_menu_item_new_with_label(_("North")));
1644 gtk_menu_append(submenu2, _menu_view_pan_south_item
1645 = gtk_menu_item_new_with_label(_("South")));
1646 gtk_menu_append(submenu2, _menu_view_pan_west_item
1647 = gtk_menu_item_new_with_label(_("West")));
1648 gtk_menu_append(submenu2, _menu_view_pan_east_item
1649 = gtk_menu_item_new_with_label(_("East")));
1651 /* The "Go to" submenu. */
1652 gtk_menu_append(submenu, menu_item
1653 = gtk_menu_item_new_with_label(_("Go to")));
1654 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1655 submenu2 = gtk_menu_new());
1656 gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1657 = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1658 gtk_menu_append(submenu2, _menu_view_goto_address_item
1659 = gtk_menu_item_new_with_label(_("Address...")));
1660 gtk_menu_append(submenu2, _menu_view_goto_gps_item
1661 = gtk_menu_item_new_with_label(_("GPS Location")));
1662 gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1663 = gtk_menu_item_new_with_label(_("Next Waypoint")));
1664 gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1665 = gtk_menu_item_new_with_label(_("Nearest POI")));
1667 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1669 /* The "View"/"Show" submenu. */
1670 gtk_menu_append(submenu, menu_item
1671 = gtk_menu_item_new_with_label(_("Show")));
1672 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1673 submenu2 = gtk_menu_new());
1674 gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1675 = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1676 gtk_check_menu_item_set_active(
1677 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1679 gtk_menu_append(submenu2, _menu_view_show_scale_item
1680 = gtk_check_menu_item_new_with_label(_("Scale")));
1681 gtk_check_menu_item_set_active(
1682 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1684 gtk_menu_append(submenu2, _menu_view_show_comprose_item
1685 = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1686 gtk_check_menu_item_set_active(
1687 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1689 gtk_menu_append(submenu2, _menu_view_show_routes_item
1690 = gtk_check_menu_item_new_with_label(_("Route")));
1691 gtk_check_menu_item_set_active(
1692 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1693 _show_paths & ROUTES_MASK);
1694 gtk_menu_append(submenu2, _menu_view_show_tracks_item
1695 = gtk_check_menu_item_new_with_label(_("Track")));
1696 gtk_check_menu_item_set_active(
1697 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1698 _show_paths & TRACKS_MASK);
1699 gtk_menu_append(submenu2, _menu_view_show_velvec_item
1700 = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1701 gtk_check_menu_item_set_active(
1702 GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1703 gtk_menu_append(submenu2, _menu_view_show_poi_item
1704 = gtk_check_menu_item_new_with_label(_("POI")));
1705 gtk_check_menu_item_set_active(
1706 GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1708 /* The "View"/"Auto-Center" submenu. */
1709 gtk_menu_append(submenu, menu_item
1710 = gtk_menu_item_new_with_label(_("Auto-Center")));
1711 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1712 submenu2 = gtk_menu_new());
1713 gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1714 = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1715 gtk_check_menu_item_set_active(
1716 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1717 _center_mode == CENTER_LATLON);
1718 gtk_menu_append(submenu2, _menu_view_ac_lead_item
1719 = gtk_radio_menu_item_new_with_label_from_widget(
1720 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1721 gtk_check_menu_item_set_active(
1722 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1723 _center_mode == CENTER_LEAD);
1724 gtk_menu_append(submenu2, _menu_view_ac_none_item
1725 = gtk_radio_menu_item_new_with_label_from_widget(
1726 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1727 gtk_check_menu_item_set_active(
1728 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1731 gtk_menu_append(submenu, gtk_separator_menu_item_new());
1733 gtk_menu_append(submenu, _menu_view_fullscreen_item
1734 = gtk_check_menu_item_new_with_label(_("Full Screen")));
1735 gtk_check_menu_item_set_active(
1736 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1738 /* The "GPS" submenu. */
1739 gtk_menu_append(menu, menu_item
1740 = gtk_menu_item_new_with_label(_("GPS")));
1741 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1742 submenu = gtk_menu_new());
1743 gtk_menu_append(submenu, _menu_gps_enable_item
1744 = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1745 gtk_check_menu_item_set_active(
1746 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item), _enable_gps);
1747 gtk_menu_append(submenu, _menu_gps_show_info_item
1748 = gtk_check_menu_item_new_with_label(_("Show Information")));
1749 gtk_check_menu_item_set_active(
1750 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1751 gtk_menu_append(submenu, _menu_gps_details_item
1752 = gtk_menu_item_new_with_label(_("Details...")));
1753 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1754 gtk_menu_append(submenu, _menu_gps_reset_item
1755 = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1756 gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1758 gtk_menu_append(menu, gtk_separator_menu_item_new());
1760 /* The other menu items. */
1761 gtk_menu_append(menu, _menu_settings_item
1762 = gtk_menu_item_new_with_label(_("Settings...")));
1763 gtk_menu_append(menu, gtk_separator_menu_item_new());
1764 gtk_menu_append(menu, _menu_help_item
1765 = gtk_menu_item_new_with_label(_("Help...")));
1766 gtk_menu_append(menu, _menu_about_item
1767 = gtk_menu_item_new_with_label(_("About...")));
1768 gtk_menu_append(menu, _menu_close_item
1769 = gtk_menu_item_new_with_label(_("Close")));
1771 /* We need to show menu items. */
1772 gtk_widget_show_all(GTK_WIDGET(menu));
1774 hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1776 /* Connect the "Route" signals. */
1777 g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1778 G_CALLBACK(menu_cb_route_open), NULL);
1779 g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1780 G_CALLBACK(menu_cb_route_download), NULL);
1781 g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1782 G_CALLBACK(menu_cb_route_save), NULL);
1783 g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1784 G_CALLBACK(menu_cb_route_distnext), NULL);
1785 g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1786 G_CALLBACK(menu_cb_route_distlast), NULL);
1787 g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1788 G_CALLBACK(menu_cb_route_reset), NULL);
1789 g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1790 G_CALLBACK(menu_cb_route_clear), NULL);
1792 /* Connect the "Track" signals. */
1793 g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1794 G_CALLBACK(menu_cb_track_open), NULL);
1795 g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1796 G_CALLBACK(menu_cb_track_save), NULL);
1797 g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1798 G_CALLBACK(menu_cb_track_insert_break), NULL);
1799 g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1800 G_CALLBACK(menu_cb_track_insert_mark), NULL);
1801 g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1802 G_CALLBACK(menu_cb_track_distlast), NULL);
1803 g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1804 G_CALLBACK(menu_cb_track_distfirst), NULL);
1805 g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1806 G_CALLBACK(menu_cb_track_clear), NULL);
1807 g_signal_connect(G_OBJECT(_menu_track_enable_tracking_item), "toggled",
1808 G_CALLBACK(menu_cb_track_enable_tracking), NULL);
1810 /* Connect the "POI" signals. */
1811 g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1812 G_CALLBACK(menu_cb_poi_import), NULL);
1813 g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1814 G_CALLBACK(menu_cb_poi_download), NULL);
1815 g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1816 G_CALLBACK(menu_cb_poi_browse), NULL);
1817 g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1818 G_CALLBACK(menu_cb_poi_categories), NULL);
1820 /* Connect the "Maps" signals. */
1821 g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1822 G_CALLBACK(menu_cb_maps_repoman), NULL);
1823 g_signal_connect(G_OBJECT(_menu_maps_repodown_item), "activate",
1824 G_CALLBACK(menu_cb_maps_repodown), NULL);
1825 g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1826 G_CALLBACK(menu_cb_maps_mapman), NULL);
1827 g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1828 G_CALLBACK(menu_cb_maps_auto_download), NULL);
1830 /* Connect the "View" signals. */
1831 g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1832 G_CALLBACK(menu_cb_view_zoom_in), NULL);
1833 g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1834 G_CALLBACK(menu_cb_view_zoom_out), NULL);
1836 g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1837 G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1838 g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1839 G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1840 g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1841 G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1842 g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1843 G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1845 g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1846 G_CALLBACK(menu_cb_view_pan_up), NULL);
1847 g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1848 G_CALLBACK(menu_cb_view_pan_down), NULL);
1849 g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1850 G_CALLBACK(menu_cb_view_pan_left), NULL);
1851 g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1852 G_CALLBACK(menu_cb_view_pan_right), NULL);
1853 g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1854 G_CALLBACK(menu_cb_view_pan_north), NULL);
1855 g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1856 G_CALLBACK(menu_cb_view_pan_south), NULL);
1857 g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1858 G_CALLBACK(menu_cb_view_pan_west), NULL);
1859 g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1860 G_CALLBACK(menu_cb_view_pan_east), NULL);
1862 g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1863 G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1864 g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1865 G_CALLBACK(menu_cb_view_goto_address), NULL);
1866 g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1867 G_CALLBACK(menu_cb_view_goto_gps), NULL);
1868 g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1869 G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1870 g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1871 G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1873 g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1874 G_CALLBACK(menu_cb_view_show_tracks), NULL);
1875 g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1876 G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1877 g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1878 G_CALLBACK(menu_cb_view_show_scale), NULL);
1879 g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1880 G_CALLBACK(menu_cb_view_show_comprose), NULL);
1881 g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1882 G_CALLBACK(menu_cb_view_show_routes), NULL);
1883 g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1884 G_CALLBACK(menu_cb_view_show_velvec), NULL);
1885 g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1886 G_CALLBACK(menu_cb_view_show_poi), NULL);
1888 g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1889 G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1890 g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1891 G_CALLBACK(menu_cb_view_ac_lead), NULL);
1892 g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1893 G_CALLBACK(menu_cb_view_ac_none), NULL);
1895 g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1896 G_CALLBACK(menu_cb_view_fullscreen), NULL);
1898 /* Connect the "GPS" signals. */
1899 g_signal_connect(G_OBJECT(_menu_gps_enable_item), "toggled",
1900 G_CALLBACK(menu_cb_gps_enable), NULL);
1901 g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1902 G_CALLBACK(menu_cb_gps_show_info), NULL);
1903 g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1904 G_CALLBACK(menu_cb_gps_details), NULL);
1905 g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1906 G_CALLBACK(menu_cb_gps_reset), NULL);
1908 /* Connect the other menu item signals. */
1909 g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1910 G_CALLBACK(menu_cb_settings), NULL);
1911 g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1912 G_CALLBACK(menu_cb_help), NULL);
1913 g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1914 G_CALLBACK(menu_cb_about), NULL);
1915 g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1916 G_CALLBACK(gtk_main_quit), NULL);
1918 vprintf("%s(): return\n", __PRETTY_FUNCTION__);