]> git.itanic.dy.fi Git - maemo-mapper/blob - src/menu.c
Make buildable without conic, gpsbt, gpsmgr, or the maemo version of gtk+
[maemo-mapper] / src / menu.c
1 /*
2  * Copyright (C) 2006, 2007 John Costigan.
3  *
4  * POI and GPS-Info code originally written by Cezary Jackiewicz.
5  *
6  * Default map data provided by http://www.openstreetmap.org/
7  *
8  * This file is part of Maemo Mapper.
9  *
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.
14  *
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.
19  *
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/>.
22  */
23
24 #ifdef HAVE_CONFIG_H
25 #    include "config.h"
26 #endif
27
28 #define _GNU_SOURCE
29
30 #include <math.h>
31
32 #ifndef LEGACY
33 #    include <hildon/hildon-help.h>
34 #    include <hildon/hildon-program.h>
35 #    include <hildon/hildon-banner.h>
36 #else
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>
41 #endif
42
43 #include "types.h"
44 #include "data.h"
45 #include "defines.h"
46
47 #include "display.h"
48 #include "gps.h"
49 #include "gdk-pixbuf-rotate.h"
50 #include "gpx.h"
51 #include "maps.h"
52 #include "menu.h"
53 #include "path.h"
54 #include "poi.h"
55 #include "settings.h"
56 #include "util.h"
57
58 /****************************************************************************
59  * BELOW: ROUTE MENU ********************************************************
60  ****************************************************************************/
61
62 static gboolean
63 menu_cb_route_open(GtkMenuItem *item)
64 {
65     gchar *buffer;
66     gint size;
67     printf("%s()\n", __PRETTY_FUNCTION__);
68
69     if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
70                 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_OPEN))
71     {
72         /* If auto is enabled, append the route, otherwise replace it. */
73         if(gpx_path_parse(&_route, buffer, size,
74                     _autoroute_data.enabled ? 0 : 1))
75         {
76             path_save_route_to_db();
77
78             cancel_autoroute();
79
80             /* Find the nearest route point, if we're connected. */
81             route_find_nearest_point();
82
83             map_force_redraw();
84             MACRO_BANNER_SHOW_INFO(_window, _("Route Opened"));
85         }
86         else
87             popup_error(_window, _("Error parsing GPX file."));
88         g_free(buffer);
89     }
90
91     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
92     return TRUE;
93 }
94
95 static gboolean
96 menu_cb_route_download(GtkMenuItem *item)
97 {
98     printf("%s()\n", __PRETTY_FUNCTION__);
99     route_download(NULL);
100     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
101     return TRUE;
102 }
103
104 static gboolean
105 menu_cb_route_save(GtkMenuItem *item)
106 {
107     GnomeVFSHandle *handle;
108     printf("%s()\n", __PRETTY_FUNCTION__);
109
110     if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
111                 &_route_dir_uri, NULL, GTK_FILE_CHOOSER_ACTION_SAVE))
112     {
113         if(gpx_path_write(&_route, handle))
114         {
115             MACRO_BANNER_SHOW_INFO(_window, _("Route Saved"));
116         }
117         else
118             popup_error(_window, _("Error writing GPX file."));
119         gnome_vfs_close(handle);
120     }
121
122     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
123     return TRUE;
124 }
125
126 static gboolean
127 menu_cb_route_distnext(GtkMenuItem *item)
128 {
129     printf("%s()\n", __PRETTY_FUNCTION__);
130
131     route_show_distance_to_next();
132
133     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
134     return TRUE;
135 }
136
137 static gboolean
138 menu_cb_route_distlast(GtkMenuItem *item)
139 {
140     printf("%s()\n", __PRETTY_FUNCTION__);
141
142     route_show_distance_to_last();
143
144     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
145     return TRUE;
146 }
147
148 gboolean
149 menu_cb_route_reset(GtkMenuItem *item)
150 {
151     printf("%s()\n", __PRETTY_FUNCTION__);
152
153     path_reset_route();
154
155     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
156     return TRUE;
157 }
158
159 static gboolean
160 menu_cb_route_clear(GtkMenuItem *item)
161 {
162     printf("%s()\n", __PRETTY_FUNCTION__);
163
164     cancel_autoroute();
165     MACRO_PATH_FREE(_route);
166     MACRO_PATH_INIT(_route);
167     path_save_route_to_db();
168     route_find_nearest_point();
169     map_force_redraw();
170
171     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
172     return TRUE;
173 }
174
175 /****************************************************************************
176  * ABOVE: ROUTE MENU ********************************************************
177  ****************************************************************************/
178
179 /****************************************************************************
180  * BELOW: TRACK MENU ********************************************************
181  ****************************************************************************/
182
183 static gboolean
184 menu_cb_track_open(GtkMenuItem *item)
185 {
186     gchar *buffer;
187     gint size;
188     printf("%s()\n", __PRETTY_FUNCTION__);
189
190     if(display_open_file(GTK_WINDOW(_window), &buffer, NULL, &size,
191                 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_OPEN))
192     {
193         if(gpx_path_parse(&_track, buffer, size, -1))
194         {
195             map_force_redraw();
196             MACRO_BANNER_SHOW_INFO(_window, _("Track Opened"));
197         }
198         else
199             popup_error(_window, _("Error parsing GPX file."));
200         g_free(buffer);
201     }
202
203     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
204     return TRUE;
205 }
206
207 static gboolean
208 menu_cb_track_save(GtkMenuItem *item)
209 {
210     GnomeVFSHandle *handle;
211     printf("%s()\n", __PRETTY_FUNCTION__);
212
213     if(display_open_file(GTK_WINDOW(_window), NULL, &handle, NULL,
214                 NULL, &_track_file_uri, GTK_FILE_CHOOSER_ACTION_SAVE))
215     {
216         if(gpx_path_write(&_track, handle))
217         {
218             MACRO_BANNER_SHOW_INFO(_window, _("Track Saved"));
219         }
220         else
221             popup_error(_window, _("Error writing GPX file."));
222         gnome_vfs_close(handle);
223     }
224
225     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
226     return TRUE;
227 }
228
229 static gboolean
230 menu_cb_track_insert_break(GtkMenuItem *item)
231 {
232     printf("%s()\n", __PRETTY_FUNCTION__);
233
234     track_insert_break(TRUE);
235
236     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
237     return TRUE;
238 }
239
240 static gboolean
241 menu_cb_track_insert_mark(GtkMenuItem *item)
242 {
243     gdouble lat, lon;
244     gchar tmp1[LL_FMT_LEN], tmp2[LL_FMT_LEN], *p_latlon;
245     static GtkWidget *dialog = NULL;
246     static GtkWidget *table = NULL;
247     static GtkWidget *label = NULL;
248     static GtkWidget *lbl_latlon = NULL;
249     static GtkWidget *txt_scroll = NULL;
250     static GtkWidget *txt_desc = NULL;
251     printf("%s()\n", __PRETTY_FUNCTION__);
252
253     if(dialog == NULL)
254     {
255         dialog = gtk_dialog_new_with_buttons(_("Insert Mark"),
256                 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
257                 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
258                 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
259                 NULL);
260
261         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
262                 table = gtk_table_new(2, 2, FALSE), TRUE, TRUE, 0);
263
264         gtk_table_attach(GTK_TABLE(table),
265                 label = gtk_label_new(_("Lat, Lon:")),
266                 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
267         gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
268
269         gtk_table_attach(GTK_TABLE(table),
270                 lbl_latlon = gtk_label_new(""),
271                 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
272         gtk_misc_set_alignment(GTK_MISC(lbl_latlon), 0.0f, 0.5f);
273
274         gtk_table_attach(GTK_TABLE(table),
275                 label = gtk_label_new(_("Description")),
276                 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
277         gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
278
279         txt_scroll = gtk_scrolled_window_new(NULL, NULL);
280         gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(txt_scroll),
281                                        GTK_SHADOW_IN);
282         gtk_table_attach(GTK_TABLE(table),
283                 txt_scroll,
284                 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
285
286         gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(txt_scroll),
287                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
288
289         txt_desc = gtk_text_view_new ();
290         gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(txt_desc), GTK_WRAP_WORD);
291
292         gtk_container_add(GTK_CONTAINER(txt_scroll), txt_desc);
293         gtk_widget_set_size_request(GTK_WIDGET(txt_scroll), 400, 60);
294     }
295
296     unit2latlon(_pos.unitx, _pos.unity, lat, lon);
297     lat_format(lat, tmp1);
298     lon_format(lon, tmp2);
299     p_latlon = g_strdup_printf("%s, %s", tmp1, tmp2);
300     gtk_label_set_text(GTK_LABEL(lbl_latlon), p_latlon);
301     g_free(p_latlon);
302
303     gtk_text_buffer_set_text(
304             gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc)), "", 0);
305
306     gtk_widget_show_all(dialog);
307
308     while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
309     {
310         GtkTextBuffer *tbuf;
311         GtkTextIter ti1, ti2;
312         gchar *desc;
313
314         tbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(txt_desc));
315         gtk_text_buffer_get_iter_at_offset(tbuf, &ti1, 0);
316         gtk_text_buffer_get_end_iter(tbuf, &ti2);
317         desc = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
318
319         if(*desc)
320         {
321             MACRO_PATH_INCREMENT_WTAIL(_track);
322             _track.wtail->point = _track.tail;
323             _track.wtail->desc
324                 = gtk_text_buffer_get_text(tbuf, &ti1, &ti2, TRUE);
325         }
326         else
327         {
328             popup_error(dialog,
329                     _("Please provide a description for the mark."));
330             g_free(desc);
331             continue;
332         }
333
334         map_render_paths();
335         MACRO_QUEUE_DRAW_AREA();
336         break;
337     }
338     gtk_widget_hide(dialog);
339
340     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
341     return TRUE;
342 }
343
344 static gboolean
345 menu_cb_track_distlast(GtkMenuItem *item)
346 {
347     printf("%s()\n", __PRETTY_FUNCTION__);
348
349     track_show_distance_from_last();
350
351     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
352     return TRUE;
353 }
354
355 static gboolean
356 menu_cb_track_distfirst(GtkMenuItem *item)
357 {
358     printf("%s()\n", __PRETTY_FUNCTION__);
359
360     track_show_distance_from_first();
361
362     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
363     return TRUE;
364 }
365
366 static gboolean
367 menu_cb_track_clear(GtkMenuItem *item)
368 {
369     printf("%s()\n", __PRETTY_FUNCTION__);
370
371     track_clear();
372
373     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
374     return TRUE;
375 }
376
377 static gboolean
378 menu_cb_track_enable_tracking(GtkMenuItem *item)
379 {
380     printf("%s()\n", __PRETTY_FUNCTION__);
381
382     if(!(_enable_tracking = gtk_check_menu_item_get_active(
383                 GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item))))
384     {
385         track_insert_break(FALSE); /* FALSE = not temporary */
386         MACRO_BANNER_SHOW_INFO(_window, _("Tracking Disabled"));
387     }
388     else
389     {
390         MACRO_BANNER_SHOW_INFO(_window, _("Tracking Enabled"));
391     }
392
393
394     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
395     return TRUE;
396 }
397
398 /****************************************************************************
399  * ABOVE: TRACK MENU ********************************************************
400  ****************************************************************************/
401
402 /****************************************************************************
403  * BELOW: POI MENU **********************************************************
404  ****************************************************************************/
405
406 static gboolean
407 menu_cb_poi_import(GtkMenuItem *item)
408 {
409     printf("%s()\n", __PRETTY_FUNCTION__);
410
411     if(poi_import_dialog(_center.unitx, _center.unity))
412         map_force_redraw();
413
414     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
415     return TRUE;
416 }
417
418 static gboolean
419 menu_cb_poi_download(GtkMenuItem *item)
420 {
421     printf("%s()\n", __PRETTY_FUNCTION__);
422
423     if(poi_download_dialog(0, 0)) /* 0, 0 means no default origin */
424         map_force_redraw();
425
426     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
427     return TRUE;
428 }
429
430 static gboolean
431 menu_cb_poi_browse(GtkMenuItem *item)
432 {
433     printf("%s()\n", __PRETTY_FUNCTION__);
434
435     if(poi_browse_dialog(0, 0)) /* 0, 0 means no default origin */
436         map_force_redraw();
437
438     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
439     return TRUE;
440 }
441
442 static gboolean
443 menu_cb_poi_categories(GtkMenuItem *item)
444 {
445     printf("%s()\n", __PRETTY_FUNCTION__);
446
447     if(category_list_dialog(_window))
448         map_force_redraw();
449
450     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
451     return TRUE;
452 }
453
454 /****************************************************************************
455  * ABOVE: POI MENU **********************************************************
456  ****************************************************************************/
457
458 /****************************************************************************
459  * BELOW: MAPS MENU *********************************************************
460  ****************************************************************************/
461
462 static gboolean
463 menu_cb_maps_repoman(GtkMenuItem *item)
464 {
465     printf("%s()\n", __PRETTY_FUNCTION__);
466     repoman_dialog();
467     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
468     return TRUE;
469 }
470
471 static gboolean
472 menu_cb_maps_select(GtkMenuItem *item, gpointer new_repo)
473 {
474     printf("%s()\n", __PRETTY_FUNCTION__);
475
476     if(gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item)))
477     {
478         repo_set_curr(new_repo);
479         map_refresh_mark(TRUE);
480     }
481     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
482     return TRUE;
483 }
484
485 static gboolean
486 menu_cb_maps_mapman(GtkMenuItem *item)
487 {
488     printf("%s()\n", __PRETTY_FUNCTION__);
489
490     mapman_dialog();
491
492     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
493     return TRUE;
494 }
495
496 static gboolean
497 menu_cb_maps_auto_download(GtkMenuItem *item)
498 {
499     printf("%s()\n", __PRETTY_FUNCTION__);
500
501     if((_auto_download = gtk_check_menu_item_get_active(
502             GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item))))
503     {
504         if(_curr_repo->url == REPOTYPE_NONE)
505             popup_error(_window,
506                 _("NOTE: You must set a Map URI in the current repository in "
507                     "order to download maps."));
508         map_refresh_mark(TRUE);
509     }
510
511     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
512     return TRUE;
513 }
514
515 /****************************************************************************
516  * ABOVE: MAPS MENU *********************************************************
517  ****************************************************************************/
518
519 /****************************************************************************
520  * BELOW: VIEW/ZOOM MENU ****************************************************
521  ****************************************************************************/
522
523 static gboolean
524 menu_cb_view_zoom_in(GtkMenuItem *item)
525 {
526     printf("%s()\n", __PRETTY_FUNCTION__);
527
528     if(_zoom > MIN_ZOOM)
529     {
530         gchar buffer[80];
531         snprintf(buffer, sizeof(buffer),"%s %d",
532                 _("Zoom to Level"), _next_zoom - 1);
533         MACRO_BANNER_SHOW_INFO(_window, buffer);
534         map_set_zoom(_next_zoom - 1);
535     }
536
537     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
538     return TRUE;
539 }
540
541 static gboolean
542 menu_cb_view_zoom_out(GtkMenuItem *item)
543 {
544     printf("%s()\n", __PRETTY_FUNCTION__);
545
546     if(_zoom < MAX_ZOOM)
547     {
548         gchar buffer[80];
549         snprintf(buffer, sizeof(buffer),"%s %d",
550                 _("Zoom to Level"), _next_zoom + 1);
551         MACRO_BANNER_SHOW_INFO(_window, buffer);
552         map_set_zoom(_next_zoom + 1);
553     }
554
555     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
556     return TRUE;
557 }
558
559 /****************************************************************************
560  * ABOVE: VIEW/ZOOM MENU ****************************************************
561  ****************************************************************************/
562
563 /****************************************************************************
564  * BELOW: VIEW/ROTATE MENU **************************************************
565  ****************************************************************************/
566
567 static gboolean
568 menu_cb_view_rotate_clock(GtkMenuItem *item)
569 {
570     printf("%s()\n", __PRETTY_FUNCTION__);
571
572     map_rotate(-ROTATE_DEGREES);
573
574     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
575     return TRUE;
576 }
577
578 static gboolean
579 menu_cb_view_rotate_counter(GtkMenuItem *item)
580 {
581     printf("%s()\n", __PRETTY_FUNCTION__);
582
583     map_rotate(ROTATE_DEGREES);
584
585     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
586     return TRUE;
587 }
588
589 static gboolean
590 menu_cb_view_rotate_reset(GtkMenuItem *item)
591 {
592     printf("%s()\n", __PRETTY_FUNCTION__);
593
594     map_rotate(-_next_map_rotate_angle);
595
596     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
597     return TRUE;
598 }
599
600 static gboolean
601 menu_cb_view_rotate_auto(GtkMenuItem *item)
602 {
603     printf("%s()\n", __PRETTY_FUNCTION__);
604
605     if(gtk_check_menu_item_get_active(
606                 GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item)))
607     {
608         _center_rotate = TRUE;
609         if(_center_mode > 0)
610             map_refresh_mark(TRUE);
611         MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Enabled"));
612     }
613     else
614     {
615         _center_rotate = FALSE;
616         MACRO_BANNER_SHOW_INFO(_window, _("Auto-Rotate Disabled"));
617     }
618
619     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
620     return TRUE;
621 }
622
623 /****************************************************************************
624  * ABOVE: VIEW/ROTATE MENU **************************************************
625  ****************************************************************************/
626
627 /****************************************************************************
628  * BELOW: VIEW/PAN MENU *****************************************************
629  ****************************************************************************/
630
631 static gboolean
632 menu_cb_view_pan_up(GtkMenuItem *item)
633 {
634     gfloat panx_adj, pany_adj;
635     printf("%s()\n", __PRETTY_FUNCTION__);
636
637     /* Adjust for rotate angle. */
638     gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
639             0, -PAN_PIXELS);
640
641     map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
642                 pixel2unit((gint)(pany_adj + 0.5f)));
643
644     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
645     return TRUE;
646 }
647
648 static gboolean
649 menu_cb_view_pan_down(GtkMenuItem *item)
650 {
651     gfloat panx_adj, pany_adj;
652     printf("%s()\n", __PRETTY_FUNCTION__);
653
654     /* Adjust for rotate angle. */
655     gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
656             0, PAN_PIXELS);
657
658     map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
659                 pixel2unit((gint)(pany_adj + 0.5f)));
660
661     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
662     return TRUE;
663 }
664
665 static gboolean
666 menu_cb_view_pan_left(GtkMenuItem *item)
667 {
668     gfloat panx_adj, pany_adj;
669     printf("%s()\n", __PRETTY_FUNCTION__);
670
671     /* Adjust for rotate angle. */
672     gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
673             -PAN_PIXELS, 0);
674
675     map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
676                 pixel2unit((gint)(pany_adj + 0.5f)));
677
678     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
679     return TRUE;
680 }
681
682 static gboolean
683 menu_cb_view_pan_right(GtkMenuItem *item)
684 {
685     gfloat panx_adj, pany_adj;
686     printf("%s()\n", __PRETTY_FUNCTION__);
687
688     /* Adjust for rotate angle. */
689     gdk_pixbuf_rotate_vector(&panx_adj, &pany_adj, _map_reverse_matrix,
690             PAN_PIXELS, 0);
691
692     map_pan(pixel2unit((gint)(panx_adj + 0.5f)),
693                 pixel2unit((gint)(pany_adj + 0.5f)));
694
695     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
696     return TRUE;
697 }
698
699 static gboolean
700 menu_cb_view_pan_north(GtkMenuItem *item)
701 {
702     printf("%s()\n", __PRETTY_FUNCTION__);
703
704     map_pan(0, -pixel2unit(PAN_PIXELS));
705
706     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
707     return TRUE;
708 }
709
710 static gboolean
711 menu_cb_view_pan_south(GtkMenuItem *item)
712 {
713     printf("%s()\n", __PRETTY_FUNCTION__);
714
715     map_pan(0, pixel2unit(PAN_PIXELS));
716
717     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
718     return TRUE;
719 }
720
721 static gboolean
722 menu_cb_view_pan_west(GtkMenuItem *item)
723 {
724     printf("%s()\n", __PRETTY_FUNCTION__);
725
726     map_pan(-pixel2unit(PAN_PIXELS), 0);
727
728     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
729     return TRUE;
730 }
731
732 static gboolean
733 menu_cb_view_pan_east(GtkMenuItem *item)
734 {
735     printf("%s()\n", __PRETTY_FUNCTION__);
736
737     map_pan(pixel2unit(PAN_PIXELS), 0);
738
739     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
740     return TRUE;
741 }
742
743 /****************************************************************************
744  * ABOVE: VIEW/PAN MENU *****************************************************
745  ****************************************************************************/
746
747 /****************************************************************************
748  * BELOW: VIEW/GOTO MENU ****************************************************
749  ****************************************************************************/
750
751 static gboolean
752 menu_cb_view_goto_latlon(GtkMenuItem *item)
753 {
754     static GtkWidget *dialog = NULL;
755     static GtkWidget *table = NULL;
756     static GtkWidget *label = NULL;
757     static GtkWidget *txt_lat = NULL;
758     static GtkWidget *txt_lon = NULL;
759     printf("%s()\n", __PRETTY_FUNCTION__);
760
761     if(dialog == NULL)
762     {
763         dialog = gtk_dialog_new_with_buttons(_("Go to Lat/Lon"),
764                 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
765                 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
766                 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
767                 NULL);
768
769         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
770                 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
771
772         gtk_table_attach(GTK_TABLE(table),
773                 label = gtk_label_new(_("Latitude")),
774                 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
775         gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
776
777         gtk_table_attach(GTK_TABLE(table),
778                 txt_lat = gtk_entry_new(),
779                 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
780         gtk_entry_set_width_chars(GTK_ENTRY(txt_lat), 16);
781         gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
782 #ifdef MAEMO_CHANGES
783 #ifndef LEGACY
784         g_object_set(G_OBJECT(txt_lat), "hildon-input-mode",
785                 HILDON_GTK_INPUT_MODE_FULL, NULL);
786 #else
787         g_object_set(G_OBJECT(txt_lat), HILDON_AUTOCAP, FALSE, NULL);
788         g_object_set(G_OBJECT(txt_lat), HILDON_INPUT_MODE_HINT,
789                 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
790 #endif
791 #endif
792
793         gtk_table_attach(GTK_TABLE(table),
794                 label = gtk_label_new(_("Longitude")),
795                 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
796         gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
797
798         gtk_table_attach(GTK_TABLE(table),
799                 txt_lon = gtk_entry_new(),
800                 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
801         gtk_entry_set_width_chars(GTK_ENTRY(txt_lon), 16);
802         gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
803 #ifdef MAEMO_CHANGES
804 #ifndef LEGACY
805         g_object_set(G_OBJECT(txt_lon), "hildon-input-mode",
806                 HILDON_GTK_INPUT_MODE_FULL, NULL);
807 #else
808         g_object_set(G_OBJECT(txt_lon), HILDON_AUTOCAP, FALSE, NULL);
809         g_object_set(G_OBJECT(txt_lon), HILDON_INPUT_MODE_HINT,
810                 HILDON_INPUT_MODE_HINT_ALPHANUMERICSPECIAL, NULL);
811 #endif
812 #endif
813     }
814
815     /* Initialize with the current center position. */
816     {
817         gchar buffer[32];
818         gdouble lat, lon;
819         unit2latlon(_center.unitx, _center.unity, lat, lon);
820         lat_format(lat, buffer);
821         gtk_entry_set_text(GTK_ENTRY(txt_lat), buffer);
822         lon_format(lon, buffer);
823         gtk_entry_set_text(GTK_ENTRY(txt_lon), buffer);
824     }
825
826     gtk_widget_show_all(dialog);
827
828     while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
829     {
830         const gchar *text;
831         gchar *error_check;
832         gdouble lat, lon;
833         Point sel_unit;
834
835         text = gtk_entry_get_text(GTK_ENTRY(txt_lat));
836         lat = strdmstod(text, &error_check);
837         if(text == error_check || lat < -90. || lat > 90.) {
838             popup_error(dialog, _("Invalid Latitude"));
839             continue;
840         }
841
842         text = gtk_entry_get_text(GTK_ENTRY(txt_lon));
843         lon = strdmstod(text, &error_check);
844         if(text == error_check || lon < -180. || lon > 180.) {
845             popup_error(dialog, _("Invalid Longitude"));
846             continue;
847         }
848
849         latlon2unit(lat, lon, sel_unit.unitx, sel_unit.unity);
850         if(_center_mode > 0)
851             gtk_check_menu_item_set_active(
852                     GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
853         map_center_unit(sel_unit);
854         break;
855     }
856     gtk_widget_hide(dialog);
857     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
858     return TRUE;
859 }
860
861 static gboolean
862 menu_cb_view_goto_address(GtkMenuItem *item)
863 {
864     static GtkWidget *dialog = NULL;
865     static GtkWidget *table = NULL;
866     static GtkWidget *label = NULL;
867     static GtkWidget *txt_addr = NULL;
868     printf("%s()\n", __PRETTY_FUNCTION__);
869
870     if(dialog == NULL)
871     {
872         GtkEntryCompletion *comp;
873         dialog = gtk_dialog_new_with_buttons(_("Go to Address"),
874                 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
875                 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
876                 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
877                 NULL);
878
879         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
880                 table = gtk_table_new(2, 3, FALSE), TRUE, TRUE, 0);
881
882         gtk_table_attach(GTK_TABLE(table),
883                 label = gtk_label_new(_("Address")),
884                 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
885         gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
886
887         gtk_table_attach(GTK_TABLE(table),
888                 txt_addr = gtk_entry_new(),
889                 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
890         gtk_entry_set_width_chars(GTK_ENTRY(txt_addr), 25);
891         gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
892
893         /* Set up auto-completion. */
894         comp = gtk_entry_completion_new();
895         gtk_entry_completion_set_model(comp, GTK_TREE_MODEL(_loc_model));
896         gtk_entry_completion_set_text_column(comp, 0);
897         gtk_entry_set_completion(GTK_ENTRY(txt_addr), comp);
898     }
899
900     gtk_widget_show_all(dialog);
901
902     while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
903     {
904         Point origin = locate_address(dialog,
905                 gtk_entry_get_text(GTK_ENTRY(txt_addr)));
906         if(origin.unity)
907         {
908             MACRO_BANNER_SHOW_INFO(_window, _("Address Located"));
909
910             if(_center_mode > 0)
911                 gtk_check_menu_item_set_active(
912                         GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
913
914             map_center_unit(origin);
915
916             /* Success! Get out of the while loop. */
917             break;
918         }
919     }
920     gtk_widget_hide(dialog);
921     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
922     return TRUE;
923 }
924
925 static gboolean
926 menu_cb_view_goto_gps(GtkMenuItem *item)
927 {
928     printf("%s()\n", __PRETTY_FUNCTION__);
929
930     if(_center_mode > 0)
931         gtk_check_menu_item_set_active(
932                 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
933
934     map_center_unit(_pos);
935
936     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
937     return TRUE;
938 }
939
940 gboolean
941 menu_cb_view_goto_nextway(GtkMenuItem *item)
942 {
943     WayPoint *next_way;
944     printf("%s()\n", __PRETTY_FUNCTION__);
945
946     next_way = path_get_next_way();
947
948     if(next_way && next_way->point->unity)
949     {
950         if(_center_mode > 0)
951             gtk_check_menu_item_set_active(
952                     GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
953
954         map_center_unit(*next_way->point);
955     }
956     else
957     {
958         MACRO_BANNER_SHOW_INFO(_window, _("There is no next waypoint."));
959     }
960
961     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
962     return TRUE;
963 }
964
965 gboolean
966 menu_cb_view_goto_nearpoi(GtkMenuItem *item)
967 {
968     printf("%s()\n", __PRETTY_FUNCTION__);
969
970     if(_poi_enabled)
971     {
972         PoiInfo poi;
973         gchar *banner;
974
975         if((_center_mode > 0 ? get_nearest_poi(_pos.unitx, _pos.unity, &poi)
976                     : get_nearest_poi(_center.unitx, _center.unity, &poi) ))
977         {
978             /* Auto-Center is enabled - use the GPS position. */
979             Point unit;
980             latlon2unit(poi.lat, poi.lon, unit.unitx, unit.unity);
981             banner = g_strdup_printf("%s (%s)", poi.label, poi.clabel);
982             MACRO_BANNER_SHOW_INFO(_window, banner);
983             g_free(banner);
984             g_free(poi.label);
985             g_free(poi.desc);
986             g_free(poi.clabel);
987
988             if(_center_mode > 0)
989                 gtk_check_menu_item_set_active(
990                         GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item), TRUE);
991
992             map_center_unit(unit);
993         }
994         else
995         {
996             MACRO_BANNER_SHOW_INFO(_window, _("No POIs found."));
997             /* Auto-Center is disabled - use the view center. */
998         }
999     }
1000
1001     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1002     return TRUE;
1003 }
1004
1005 /****************************************************************************
1006  * ABOVE: VIEW/GOTO MENU ****************************************************
1007  ****************************************************************************/
1008
1009 /****************************************************************************
1010  * BELOW: VIEW/SHOW MENU ****************************************************
1011  ****************************************************************************/
1012
1013 static gboolean
1014 menu_cb_view_show_tracks(GtkMenuItem *item)
1015 {
1016     printf("%s()\n", __PRETTY_FUNCTION__);
1017
1018     _show_paths ^= TRACKS_MASK;
1019     if(gtk_check_menu_item_get_active(
1020                 GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item)))
1021     {
1022         _show_paths |= TRACKS_MASK;
1023         map_render_paths();
1024         MACRO_QUEUE_DRAW_AREA();
1025         MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now shown"));
1026     }
1027     else
1028     {
1029         _show_paths &= ~TRACKS_MASK;
1030         map_force_redraw();
1031         MACRO_BANNER_SHOW_INFO(_window, _("Tracks are now hidden"));
1032     }
1033
1034     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1035     return TRUE;
1036 }
1037
1038 static gboolean
1039 menu_cb_view_show_zoomlevel(GtkMenuItem *item)
1040 {
1041     printf("%s()\n", __PRETTY_FUNCTION__);
1042
1043     _show_zoomlevel = gtk_check_menu_item_get_active(
1044                 GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item));
1045     map_force_redraw();
1046
1047     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1048     return TRUE;
1049 }
1050
1051 static gboolean
1052 menu_cb_view_show_scale(GtkMenuItem *item)
1053 {
1054     printf("%s()\n", __PRETTY_FUNCTION__);
1055
1056     _show_scale = gtk_check_menu_item_get_active(
1057                 GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item));
1058     map_force_redraw();
1059
1060     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1061     return TRUE;
1062 }
1063
1064 static gboolean
1065 menu_cb_view_show_comprose(GtkMenuItem *item)
1066 {
1067     printf("%s()\n", __PRETTY_FUNCTION__);
1068
1069     _show_comprose = gtk_check_menu_item_get_active(
1070                 GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item));
1071     map_force_redraw();
1072
1073     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1074     return TRUE;
1075 }
1076
1077 static gboolean
1078 menu_cb_view_show_routes(GtkMenuItem *item)
1079 {
1080     printf("%s()\n", __PRETTY_FUNCTION__);
1081
1082     if(gtk_check_menu_item_get_active(
1083                 GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item)))
1084     {
1085         _show_paths |= ROUTES_MASK;
1086         map_render_paths();
1087         MACRO_QUEUE_DRAW_AREA();
1088         MACRO_BANNER_SHOW_INFO(_window, _("Routes are now shown"));
1089     }
1090     else
1091     {
1092         _show_paths &= ~ROUTES_MASK;
1093         map_force_redraw();
1094         MACRO_BANNER_SHOW_INFO(_window, _("Routes are now hidden"));
1095     }
1096
1097     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1098     return TRUE;
1099 }
1100
1101 static gboolean
1102 menu_cb_view_show_velvec(GtkMenuItem *item)
1103 {
1104     printf("%s()\n", __PRETTY_FUNCTION__);
1105
1106     _show_velvec = gtk_check_menu_item_get_active(
1107             GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item));
1108     map_move_mark();
1109
1110     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1111     return TRUE;
1112 }
1113
1114 static gboolean
1115 menu_cb_view_show_poi(GtkMenuItem *item)
1116 {
1117     printf("%s()\n", __PRETTY_FUNCTION__);
1118
1119     _show_poi = gtk_check_menu_item_get_active(
1120             GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item));
1121     map_force_redraw();
1122
1123     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1124     return TRUE;
1125 }
1126
1127 /****************************************************************************
1128  * ABOVE: VIEW/SHOW MENU ****************************************************
1129  ****************************************************************************/
1130
1131 /****************************************************************************
1132  * BELOW: VIEW/AUTO-CENTER MENU *********************************************
1133  ****************************************************************************/
1134
1135 static gboolean
1136 menu_cb_view_ac_lead(GtkMenuItem *item)
1137 {
1138     printf("%s()\n", __PRETTY_FUNCTION__);
1139
1140     if(gtk_check_menu_item_get_active(
1141                 GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item)))
1142     {
1143         _center_mode = CENTER_LEAD;
1144         MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lead"));
1145         map_refresh_mark(TRUE);
1146     }
1147
1148     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1149     return TRUE;
1150 }
1151
1152 static gboolean
1153 menu_cb_view_ac_latlon(GtkMenuItem *item)
1154 {
1155     printf("%s()\n", __PRETTY_FUNCTION__);
1156
1157     if(gtk_check_menu_item_get_active(
1158                 GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item)))
1159     {
1160         _center_mode = CENTER_LATLON;
1161         MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Mode: Lat/Lon"));
1162         map_refresh_mark(TRUE);
1163     }
1164
1165     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1166     return TRUE;
1167 }
1168
1169 static gboolean
1170 menu_cb_view_ac_none(GtkMenuItem *item)
1171 {
1172     printf("%s()\n", __PRETTY_FUNCTION__);
1173
1174     if(gtk_check_menu_item_get_active(
1175                 GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item)))
1176     {
1177         _center_mode = -_center_mode;
1178         MACRO_BANNER_SHOW_INFO(_window, _("Auto-Center Off"));
1179     }
1180
1181     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1182     return TRUE;
1183 }
1184
1185 /****************************************************************************
1186  * ABOVE: VIEW/AUTO-CENTER MENU *********************************************
1187  ****************************************************************************/
1188
1189 static gboolean
1190 menu_cb_view_fullscreen(GtkMenuItem *item)
1191 {
1192     printf("%s()\n", __PRETTY_FUNCTION__);
1193
1194     if((_fullscreen = gtk_check_menu_item_get_active(
1195                 GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item))))
1196         gtk_window_fullscreen(GTK_WINDOW(_window));
1197     else
1198         gtk_window_unfullscreen(GTK_WINDOW(_window));
1199
1200     g_idle_add((GSourceFunc)window_present, NULL);
1201
1202     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1203     return TRUE;
1204 }
1205
1206 /****************************************************************************
1207  * BELOW: GPS MENU **********************************************************
1208  ****************************************************************************/
1209
1210 static gboolean
1211 menu_cb_gps_enable(GtkMenuItem *item)
1212 {
1213     printf("%s()\n", __PRETTY_FUNCTION__);
1214
1215     if((_enable_gps = gtk_check_menu_item_get_active(
1216                 GTK_CHECK_MENU_ITEM(_menu_gps_enable_item))))
1217         rcvr_connect();
1218     else
1219         rcvr_disconnect();
1220
1221     map_move_mark();
1222     gps_show_info();
1223     gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1224     gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1225
1226     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1227     return TRUE;
1228 }
1229
1230 static gboolean
1231 menu_cb_gps_show_info(GtkMenuItem *item)
1232 {
1233     printf("%s()\n", __PRETTY_FUNCTION__);
1234
1235     _gps_info = gtk_check_menu_item_get_active(
1236                 GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item));
1237
1238     gps_show_info();
1239
1240     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1241     return TRUE;
1242 }
1243
1244 static gboolean
1245 menu_cb_gps_details(GtkMenuItem *item)
1246 {
1247     printf("%s()\n", __PRETTY_FUNCTION__);
1248
1249     gps_details();
1250
1251     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1252     return TRUE;
1253 }
1254
1255 static gboolean
1256 menu_cb_gps_reset(GtkMenuItem *item)
1257 {
1258     printf("%s()\n", __PRETTY_FUNCTION__);
1259
1260     reset_bluetooth();
1261
1262     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1263     return TRUE;
1264 }
1265
1266 /****************************************************************************
1267  * ABOVE: GPS MENU **********************************************************
1268  ****************************************************************************/
1269
1270 static gboolean
1271 menu_cb_settings(GtkMenuItem *item)
1272 {
1273     printf("%s()\n", __PRETTY_FUNCTION__);
1274
1275     if(settings_dialog())
1276     {
1277         /* Settings have changed - reconnect to receiver. */
1278         if(_enable_gps)
1279         {
1280             rcvr_disconnect();
1281             rcvr_connect();
1282         }
1283     }
1284
1285     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1286     return TRUE;
1287 }
1288
1289 static gboolean
1290 menu_cb_help(GtkMenuItem *item)
1291 {
1292     printf("%s()\n", __PRETTY_FUNCTION__);
1293
1294 #ifndef LEGACY
1295     hildon_help_show(_osso, HELP_ID_INTRO, 0);
1296 #else
1297     ossohelp_show(_osso, HELP_ID_INTRO, 0);
1298 #endif
1299
1300     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1301     return TRUE;
1302 }
1303
1304 static gboolean
1305 menu_cb_about(GtkMenuItem *item)
1306 {
1307     printf("%s()\n", __PRETTY_FUNCTION__);
1308
1309 #ifndef LEGACY
1310     hildon_help_show(_osso, HELP_ID_ABOUT, HILDON_HELP_SHOW_DIALOG);
1311 #else
1312     ossohelp_show(_osso, HELP_ID_ABOUT, OSSO_HELP_SHOW_DIALOG);
1313 #endif
1314
1315     vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1316     return TRUE;
1317 }
1318
1319
1320
1321 void
1322 menu_maps_remove_repos()
1323 {
1324     GList *curr;
1325     printf("%s()\n", __PRETTY_FUNCTION__);
1326
1327     /* Delete one menu item for each repo. */
1328     for(curr = _repo_list; curr; curr = curr->next)
1329     {
1330         gtk_widget_destroy(gtk_container_get_children(
1331                     GTK_CONTAINER(_menu_maps_submenu))->data);
1332     }
1333     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1334 }
1335
1336 void
1337 menu_maps_add_repos()
1338 {
1339     GList *curr;
1340     GtkWidget *last_repo = NULL;
1341     printf("%s()\n", __PRETTY_FUNCTION__);
1342
1343     for(curr = g_list_last(_repo_list); curr; curr = curr->prev)
1344     {
1345         RepoData *rd = (RepoData*)curr->data;
1346         GtkWidget *menu_item;
1347         if(last_repo)
1348             gtk_menu_prepend(_menu_maps_submenu, menu_item
1349                     = gtk_radio_menu_item_new_with_label_from_widget(
1350                         GTK_RADIO_MENU_ITEM(last_repo), rd->name));
1351         else
1352         {
1353             gtk_menu_prepend(_menu_maps_submenu, menu_item
1354                     = gtk_radio_menu_item_new_with_label(NULL, rd->name));
1355             last_repo = menu_item;
1356         }
1357         gtk_check_menu_item_set_active(
1358                 GTK_CHECK_MENU_ITEM(menu_item), rd == _curr_repo);
1359         rd->menu_item = menu_item;
1360     }
1361
1362     /* Add signals (must be after entire menu is built). */
1363     {
1364         GList *currmi = gtk_container_get_children(
1365                 GTK_CONTAINER(_menu_maps_submenu));
1366         for(curr = _repo_list; curr; curr = curr->next, currmi = currmi->next)
1367         {
1368             g_signal_connect(G_OBJECT(currmi->data), "activate",
1369                              G_CALLBACK(menu_cb_maps_select), curr->data);
1370         }
1371     }
1372
1373     gtk_widget_show_all(_menu_maps_submenu);
1374     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1375 }
1376
1377 /**
1378  * Create the menu items needed for the drop down menu.
1379  */
1380 void
1381 menu_init()
1382 {
1383     /* Create needed handles. */
1384     GtkMenu *menu;
1385     GtkWidget *submenu;
1386     GtkWidget *submenu2;
1387     GtkWidget *menu_item;
1388     printf("%s()\n", __PRETTY_FUNCTION__);
1389
1390     /* Get the menu of our view. */
1391     menu = GTK_MENU(gtk_menu_new());
1392
1393     /* Create the menu items. */
1394
1395     /* The "Routes" submenu. */
1396     gtk_menu_append(menu, menu_item
1397             = gtk_menu_item_new_with_label(_("Route")));
1398     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1399             submenu = gtk_menu_new());
1400     gtk_menu_append(submenu, _menu_route_open_item
1401             = gtk_menu_item_new_with_label(_("Open...")));
1402     gtk_menu_append(submenu, _menu_route_download_item
1403             = gtk_menu_item_new_with_label(_("Download...")));
1404     gtk_menu_append(submenu, _menu_route_save_item
1405             = gtk_menu_item_new_with_label(_("Save...")));
1406     gtk_menu_append(submenu, _menu_route_distnext_item
1407         = gtk_menu_item_new_with_label(_("Show Distance to Next Waypoint")));
1408     gtk_menu_append(submenu, _menu_route_distlast_item
1409         = gtk_menu_item_new_with_label(_("Show Distance to End of Route")));
1410     gtk_menu_append(submenu, _menu_route_reset_item
1411             = gtk_menu_item_new_with_label(_("Reset")));
1412     gtk_menu_append(submenu, _menu_route_clear_item
1413             = gtk_menu_item_new_with_label(_("Clear")));
1414
1415     /* The "Track" submenu. */
1416     gtk_menu_append(menu, menu_item
1417             = gtk_menu_item_new_with_label(_("Track")));
1418     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1419             submenu = gtk_menu_new());
1420     gtk_menu_append(submenu, _menu_track_open_item
1421             = gtk_menu_item_new_with_label(_("Open...")));
1422     gtk_menu_append(submenu, _menu_track_save_item
1423             = gtk_menu_item_new_with_label(_("Save...")));
1424     gtk_menu_append(submenu, _menu_track_insert_break_item
1425             = gtk_menu_item_new_with_label(_("Insert Break")));
1426     gtk_menu_append(submenu, _menu_track_insert_mark_item
1427             = gtk_menu_item_new_with_label(_("Insert Mark...")));
1428     gtk_menu_append(submenu, _menu_track_distlast_item
1429             = gtk_menu_item_new_with_label(_("Show Distance from Last Mark")));
1430     gtk_menu_append(submenu, _menu_track_distfirst_item
1431             = gtk_menu_item_new_with_label(_("Show Distance from Beginning")));
1432     gtk_menu_append(submenu, _menu_track_clear_item
1433             = gtk_menu_item_new_with_label(_("Clear")));
1434     gtk_menu_append(submenu, _menu_track_enable_tracking_item
1435             = gtk_check_menu_item_new_with_label(_("Enable Tracking")));
1436     gtk_check_menu_item_set_active(
1437             GTK_CHECK_MENU_ITEM(_menu_track_enable_tracking_item), _enable_tracking);
1438
1439     /* The "POI" submenu. */
1440     gtk_menu_append(menu, menu_item = _menu_poi_item
1441             = gtk_menu_item_new_with_label(_("POI")));
1442     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1443             submenu = gtk_menu_new());
1444     gtk_menu_append(submenu, _menu_poi_import_item
1445             = gtk_menu_item_new_with_label(_("Import...")));
1446     gtk_menu_append(submenu, _menu_poi_download_item
1447             = gtk_menu_item_new_with_label(_("Download...")));
1448     gtk_menu_append(submenu, _menu_poi_browse_item
1449             = gtk_menu_item_new_with_label(_("Browse...")));
1450     gtk_menu_append(submenu, _menu_poi_categories_item
1451             = gtk_menu_item_new_with_label(_("Categories...")));
1452
1453     /* The "Maps" submenu. */
1454     gtk_menu_append(menu, menu_item
1455             = gtk_menu_item_new_with_label(_("Maps")));
1456     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1457             _menu_maps_submenu = gtk_menu_new());
1458     gtk_menu_append(_menu_maps_submenu, gtk_separator_menu_item_new());
1459     gtk_menu_append(_menu_maps_submenu, _menu_maps_mapman_item
1460             = gtk_menu_item_new_with_label(_("Manage Maps...")));
1461     gtk_menu_append(_menu_maps_submenu, _menu_maps_repoman_item
1462             = gtk_menu_item_new_with_label(_("Manage Repositories...")));
1463     gtk_menu_append(_menu_maps_submenu, _menu_maps_auto_download_item
1464             = gtk_check_menu_item_new_with_label(_("Auto-Download")));
1465     gtk_check_menu_item_set_active(
1466             GTK_CHECK_MENU_ITEM(_menu_maps_auto_download_item),_auto_download);
1467     menu_maps_add_repos();
1468
1469     gtk_menu_append(menu, gtk_separator_menu_item_new());
1470
1471     /* The "View" submenu. */
1472     gtk_menu_append(menu, menu_item
1473             = gtk_menu_item_new_with_label(_("View")));
1474     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1475             submenu = gtk_menu_new());
1476
1477     /* The "View"/"Zoom" submenu. */
1478     gtk_menu_append(submenu, menu_item
1479             = gtk_menu_item_new_with_label(_("Zoom")));
1480     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1481             submenu2 = gtk_menu_new());
1482     gtk_menu_append(submenu2, _menu_view_zoom_in_item
1483             = gtk_menu_item_new_with_label(_("Zoom In")));
1484     gtk_menu_append(submenu2, _menu_view_zoom_out_item
1485             = gtk_menu_item_new_with_label(_("Zoom Out")));
1486
1487     /* The "View"/"Rotate" submenu. */
1488     gtk_menu_append(submenu, menu_item
1489             = gtk_menu_item_new_with_label(_("Rotate")));
1490     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1491             submenu2 = gtk_menu_new());
1492     gtk_menu_append(submenu2, _menu_view_rotate_clock_item
1493             = gtk_menu_item_new_with_label(_("Clockwise")));
1494     gtk_menu_append(submenu2, _menu_view_rotate_counter_item
1495             = gtk_menu_item_new_with_label(_("Counter")));
1496     gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1497     gtk_menu_append(submenu2, _menu_view_rotate_reset_item
1498             = gtk_menu_item_new_with_label(_("Reset")));
1499     gtk_menu_append(submenu2, _menu_view_rotate_auto_item
1500             = gtk_check_menu_item_new_with_label(_("Auto-Rotate")));
1501     gtk_check_menu_item_set_active(
1502             GTK_CHECK_MENU_ITEM(_menu_view_rotate_auto_item), _center_rotate);
1503
1504     /* The "View"/"Pan" submenu. */
1505     gtk_menu_append(submenu, menu_item
1506             = gtk_menu_item_new_with_label(_("Pan")));
1507     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1508             submenu2 = gtk_menu_new());
1509     gtk_menu_append(submenu2, _menu_view_pan_up_item
1510             = gtk_menu_item_new_with_label(_("Up")));
1511     gtk_menu_append(submenu2, _menu_view_pan_down_item
1512             = gtk_menu_item_new_with_label(_("Down")));
1513     gtk_menu_append(submenu2, _menu_view_pan_left_item
1514             = gtk_menu_item_new_with_label(_("Left")));
1515     gtk_menu_append(submenu2, _menu_view_pan_right_item
1516             = gtk_menu_item_new_with_label(_("Right")));
1517     gtk_menu_append(submenu2, gtk_separator_menu_item_new());
1518     gtk_menu_append(submenu2, _menu_view_pan_north_item
1519             = gtk_menu_item_new_with_label(_("North")));
1520     gtk_menu_append(submenu2, _menu_view_pan_south_item
1521             = gtk_menu_item_new_with_label(_("South")));
1522     gtk_menu_append(submenu2, _menu_view_pan_west_item
1523             = gtk_menu_item_new_with_label(_("West")));
1524     gtk_menu_append(submenu2, _menu_view_pan_east_item
1525             = gtk_menu_item_new_with_label(_("East")));
1526
1527     /* The "Go to" submenu. */
1528     gtk_menu_append(submenu, menu_item
1529             = gtk_menu_item_new_with_label(_("Go to")));
1530     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1531             submenu2 = gtk_menu_new());
1532     gtk_menu_append(submenu2, _menu_view_goto_latlon_item
1533             = gtk_menu_item_new_with_label(_("Lat/Lon...")));
1534     gtk_menu_append(submenu2, _menu_view_goto_address_item
1535             = gtk_menu_item_new_with_label(_("Address...")));
1536     gtk_menu_append(submenu2, _menu_view_goto_gps_item
1537             = gtk_menu_item_new_with_label(_("GPS Location")));
1538     gtk_menu_append(submenu2, _menu_view_goto_nextway_item
1539             = gtk_menu_item_new_with_label(_("Next Waypoint")));
1540     gtk_menu_append(submenu2, _menu_view_goto_nearpoi_item
1541             = gtk_menu_item_new_with_label(_("Nearest POI")));
1542
1543     gtk_menu_append(submenu, gtk_separator_menu_item_new());
1544
1545     /* The "View"/"Show" submenu. */
1546     gtk_menu_append(submenu, menu_item
1547             = gtk_menu_item_new_with_label(_("Show")));
1548     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1549             submenu2 = gtk_menu_new());
1550     gtk_menu_append(submenu2, _menu_view_show_zoomlevel_item
1551             = gtk_check_menu_item_new_with_label(_("Zoom Level")));
1552     gtk_check_menu_item_set_active(
1553             GTK_CHECK_MENU_ITEM(_menu_view_show_zoomlevel_item),
1554             _show_zoomlevel);
1555     gtk_menu_append(submenu2, _menu_view_show_scale_item
1556             = gtk_check_menu_item_new_with_label(_("Scale")));
1557     gtk_check_menu_item_set_active(
1558             GTK_CHECK_MENU_ITEM(_menu_view_show_scale_item),
1559             _show_scale);
1560     gtk_menu_append(submenu2, _menu_view_show_comprose_item
1561             = gtk_check_menu_item_new_with_label(_("Compass Rose")));
1562     gtk_check_menu_item_set_active(
1563             GTK_CHECK_MENU_ITEM(_menu_view_show_comprose_item),
1564             _show_comprose);
1565     gtk_menu_append(submenu2, _menu_view_show_routes_item
1566             = gtk_check_menu_item_new_with_label(_("Route")));
1567     gtk_check_menu_item_set_active(
1568             GTK_CHECK_MENU_ITEM(_menu_view_show_routes_item),
1569             _show_paths & ROUTES_MASK);
1570     gtk_menu_append(submenu2, _menu_view_show_tracks_item
1571             = gtk_check_menu_item_new_with_label(_("Track")));
1572     gtk_check_menu_item_set_active(
1573             GTK_CHECK_MENU_ITEM(_menu_view_show_tracks_item),
1574             _show_paths & TRACKS_MASK);
1575     gtk_menu_append(submenu2, _menu_view_show_velvec_item
1576             = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
1577     gtk_check_menu_item_set_active(
1578             GTK_CHECK_MENU_ITEM(_menu_view_show_velvec_item), _show_velvec);
1579     gtk_menu_append(submenu2, _menu_view_show_poi_item
1580             = gtk_check_menu_item_new_with_label(_("POI")));
1581     gtk_check_menu_item_set_active(
1582             GTK_CHECK_MENU_ITEM(_menu_view_show_poi_item), _show_poi);
1583
1584     /* The "View"/"Auto-Center" submenu. */
1585     gtk_menu_append(submenu, menu_item
1586             = gtk_menu_item_new_with_label(_("Auto-Center")));
1587     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1588             submenu2 = gtk_menu_new());
1589     gtk_menu_append(submenu2, _menu_view_ac_latlon_item
1590             = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
1591     gtk_check_menu_item_set_active(
1592             GTK_CHECK_MENU_ITEM(_menu_view_ac_latlon_item),
1593             _center_mode == CENTER_LATLON);
1594     gtk_menu_append(submenu2, _menu_view_ac_lead_item
1595             = gtk_radio_menu_item_new_with_label_from_widget(
1596                 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("Lead")));
1597     gtk_check_menu_item_set_active(
1598             GTK_CHECK_MENU_ITEM(_menu_view_ac_lead_item),
1599             _center_mode == CENTER_LEAD);
1600     gtk_menu_append(submenu2, _menu_view_ac_none_item
1601             = gtk_radio_menu_item_new_with_label_from_widget(
1602                 GTK_RADIO_MENU_ITEM(_menu_view_ac_latlon_item), _("None")));
1603     gtk_check_menu_item_set_active(
1604             GTK_CHECK_MENU_ITEM(_menu_view_ac_none_item),
1605             _center_mode < 0);
1606
1607     gtk_menu_append(submenu, gtk_separator_menu_item_new());
1608
1609     gtk_menu_append(submenu, _menu_view_fullscreen_item
1610             = gtk_check_menu_item_new_with_label(_("Full Screen")));
1611     gtk_check_menu_item_set_active(
1612             GTK_CHECK_MENU_ITEM(_menu_view_fullscreen_item), _fullscreen);
1613
1614     /* The "GPS" submenu. */
1615     gtk_menu_append(menu, menu_item
1616             = gtk_menu_item_new_with_label(_("GPS")));
1617     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
1618             submenu = gtk_menu_new());
1619     gtk_menu_append(submenu, _menu_gps_enable_item
1620             = gtk_check_menu_item_new_with_label(_("Enable GPS")));
1621     gtk_check_menu_item_set_active(
1622             GTK_CHECK_MENU_ITEM(_menu_gps_enable_item), _enable_gps);
1623     gtk_menu_append(submenu, _menu_gps_show_info_item
1624             = gtk_check_menu_item_new_with_label(_("Show Information")));
1625     gtk_check_menu_item_set_active(
1626             GTK_CHECK_MENU_ITEM(_menu_gps_show_info_item), _gps_info);
1627     gtk_menu_append(submenu, _menu_gps_details_item
1628             = gtk_menu_item_new_with_label(_("Details...")));
1629     gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_details_item), _enable_gps);
1630     gtk_menu_append(submenu, _menu_gps_reset_item
1631         = gtk_menu_item_new_with_label(_("Reset Bluetooth")));
1632     gtk_widget_set_sensitive(GTK_WIDGET(_menu_gps_reset_item), _enable_gps);
1633
1634     gtk_menu_append(menu, gtk_separator_menu_item_new());
1635
1636     /* The other menu items. */
1637     gtk_menu_append(menu, _menu_settings_item
1638         = gtk_menu_item_new_with_label(_("Settings...")));
1639     gtk_menu_append(menu, gtk_separator_menu_item_new());
1640     gtk_menu_append(menu, _menu_help_item
1641         = gtk_menu_item_new_with_label(_("Help...")));
1642     gtk_menu_append(menu, _menu_about_item
1643         = gtk_menu_item_new_with_label(_("About...")));
1644     gtk_menu_append(menu, _menu_close_item
1645         = gtk_menu_item_new_with_label(_("Close")));
1646
1647     /* We need to show menu items. */
1648     gtk_widget_show_all(GTK_WIDGET(menu));
1649
1650     hildon_window_set_menu(HILDON_WINDOW(_window), menu);
1651
1652     /* Connect the "Route" signals. */
1653     g_signal_connect(G_OBJECT(_menu_route_open_item), "activate",
1654                       G_CALLBACK(menu_cb_route_open), NULL);
1655     g_signal_connect(G_OBJECT(_menu_route_download_item), "activate",
1656                       G_CALLBACK(menu_cb_route_download), NULL);
1657     g_signal_connect(G_OBJECT(_menu_route_save_item), "activate",
1658                       G_CALLBACK(menu_cb_route_save), NULL);
1659     g_signal_connect(G_OBJECT(_menu_route_distnext_item), "activate",
1660                       G_CALLBACK(menu_cb_route_distnext), NULL);
1661     g_signal_connect(G_OBJECT(_menu_route_distlast_item), "activate",
1662                       G_CALLBACK(menu_cb_route_distlast), NULL);
1663     g_signal_connect(G_OBJECT(_menu_route_reset_item), "activate",
1664                       G_CALLBACK(menu_cb_route_reset), NULL);
1665     g_signal_connect(G_OBJECT(_menu_route_clear_item), "activate",
1666                       G_CALLBACK(menu_cb_route_clear), NULL);
1667
1668     /* Connect the "Track" signals. */
1669     g_signal_connect(G_OBJECT(_menu_track_open_item), "activate",
1670                       G_CALLBACK(menu_cb_track_open), NULL);
1671     g_signal_connect(G_OBJECT(_menu_track_save_item), "activate",
1672                       G_CALLBACK(menu_cb_track_save), NULL);
1673     g_signal_connect(G_OBJECT(_menu_track_insert_break_item), "activate",
1674                       G_CALLBACK(menu_cb_track_insert_break), NULL);
1675     g_signal_connect(G_OBJECT(_menu_track_insert_mark_item), "activate",
1676                       G_CALLBACK(menu_cb_track_insert_mark), NULL);
1677     g_signal_connect(G_OBJECT(_menu_track_distlast_item), "activate",
1678                       G_CALLBACK(menu_cb_track_distlast), NULL);
1679     g_signal_connect(G_OBJECT(_menu_track_distfirst_item), "activate",
1680                       G_CALLBACK(menu_cb_track_distfirst), NULL);
1681     g_signal_connect(G_OBJECT(_menu_track_clear_item), "activate",
1682                       G_CALLBACK(menu_cb_track_clear), NULL);
1683     g_signal_connect(G_OBJECT(_menu_track_enable_tracking_item), "toggled",
1684                       G_CALLBACK(menu_cb_track_enable_tracking), NULL);
1685
1686     /* Connect the "POI" signals. */
1687     g_signal_connect(G_OBJECT(_menu_poi_import_item), "activate",
1688                       G_CALLBACK(menu_cb_poi_import), NULL);
1689     g_signal_connect(G_OBJECT(_menu_poi_download_item), "activate",
1690                       G_CALLBACK(menu_cb_poi_download), NULL);
1691     g_signal_connect(G_OBJECT(_menu_poi_browse_item), "activate",
1692                       G_CALLBACK(menu_cb_poi_browse), NULL);
1693     g_signal_connect(G_OBJECT(_menu_poi_categories_item), "activate",
1694                       G_CALLBACK(menu_cb_poi_categories), NULL);
1695
1696     /* Connect the "Maps" signals. */
1697     g_signal_connect(G_OBJECT(_menu_maps_repoman_item), "activate",
1698                       G_CALLBACK(menu_cb_maps_repoman), NULL);
1699     g_signal_connect(G_OBJECT(_menu_maps_mapman_item), "activate",
1700                       G_CALLBACK(menu_cb_maps_mapman), NULL);
1701     g_signal_connect(G_OBJECT(_menu_maps_auto_download_item), "toggled",
1702                       G_CALLBACK(menu_cb_maps_auto_download), NULL);
1703
1704     /* Connect the "View" signals. */
1705     g_signal_connect(G_OBJECT(_menu_view_zoom_in_item), "activate",
1706                       G_CALLBACK(menu_cb_view_zoom_in), NULL);
1707     g_signal_connect(G_OBJECT(_menu_view_zoom_out_item), "activate",
1708                       G_CALLBACK(menu_cb_view_zoom_out), NULL);
1709
1710     g_signal_connect(G_OBJECT(_menu_view_rotate_clock_item), "activate",
1711                       G_CALLBACK(menu_cb_view_rotate_clock), NULL);
1712     g_signal_connect(G_OBJECT(_menu_view_rotate_counter_item), "activate",
1713                       G_CALLBACK(menu_cb_view_rotate_counter), NULL);
1714     g_signal_connect(G_OBJECT(_menu_view_rotate_reset_item), "activate",
1715                       G_CALLBACK(menu_cb_view_rotate_reset), NULL);
1716     g_signal_connect(G_OBJECT(_menu_view_rotate_auto_item), "toggled",
1717                       G_CALLBACK(menu_cb_view_rotate_auto), NULL);
1718
1719     g_signal_connect(G_OBJECT(_menu_view_pan_up_item), "activate",
1720                       G_CALLBACK(menu_cb_view_pan_up), NULL);
1721     g_signal_connect(G_OBJECT(_menu_view_pan_down_item), "activate",
1722                       G_CALLBACK(menu_cb_view_pan_down), NULL);
1723     g_signal_connect(G_OBJECT(_menu_view_pan_left_item), "activate",
1724                       G_CALLBACK(menu_cb_view_pan_left), NULL);
1725     g_signal_connect(G_OBJECT(_menu_view_pan_right_item), "activate",
1726                       G_CALLBACK(menu_cb_view_pan_right), NULL);
1727     g_signal_connect(G_OBJECT(_menu_view_pan_north_item), "activate",
1728                       G_CALLBACK(menu_cb_view_pan_north), NULL);
1729     g_signal_connect(G_OBJECT(_menu_view_pan_south_item), "activate",
1730                       G_CALLBACK(menu_cb_view_pan_south), NULL);
1731     g_signal_connect(G_OBJECT(_menu_view_pan_west_item), "activate",
1732                       G_CALLBACK(menu_cb_view_pan_west), NULL);
1733     g_signal_connect(G_OBJECT(_menu_view_pan_east_item), "activate",
1734                       G_CALLBACK(menu_cb_view_pan_east), NULL);
1735
1736     g_signal_connect(G_OBJECT(_menu_view_goto_latlon_item), "activate",
1737                       G_CALLBACK(menu_cb_view_goto_latlon), NULL);
1738     g_signal_connect(G_OBJECT(_menu_view_goto_address_item), "activate",
1739                       G_CALLBACK(menu_cb_view_goto_address), NULL);
1740     g_signal_connect(G_OBJECT(_menu_view_goto_gps_item), "activate",
1741                       G_CALLBACK(menu_cb_view_goto_gps), NULL);
1742     g_signal_connect(G_OBJECT(_menu_view_goto_nextway_item), "activate",
1743                       G_CALLBACK(menu_cb_view_goto_nextway), NULL);
1744     g_signal_connect(G_OBJECT(_menu_view_goto_nearpoi_item), "activate",
1745                       G_CALLBACK(menu_cb_view_goto_nearpoi), NULL);
1746
1747     g_signal_connect(G_OBJECT(_menu_view_show_tracks_item), "toggled",
1748                       G_CALLBACK(menu_cb_view_show_tracks), NULL);
1749     g_signal_connect(G_OBJECT(_menu_view_show_zoomlevel_item), "toggled",
1750                       G_CALLBACK(menu_cb_view_show_zoomlevel), NULL);
1751     g_signal_connect(G_OBJECT(_menu_view_show_scale_item), "toggled",
1752                       G_CALLBACK(menu_cb_view_show_scale), NULL);
1753     g_signal_connect(G_OBJECT(_menu_view_show_comprose_item), "toggled",
1754                       G_CALLBACK(menu_cb_view_show_comprose), NULL);
1755     g_signal_connect(G_OBJECT(_menu_view_show_routes_item), "toggled",
1756                       G_CALLBACK(menu_cb_view_show_routes), NULL);
1757     g_signal_connect(G_OBJECT(_menu_view_show_velvec_item), "toggled",
1758                       G_CALLBACK(menu_cb_view_show_velvec), NULL);
1759     g_signal_connect(G_OBJECT(_menu_view_show_poi_item), "toggled",
1760                       G_CALLBACK(menu_cb_view_show_poi), NULL);
1761
1762     g_signal_connect(G_OBJECT(_menu_view_ac_latlon_item), "toggled",
1763                       G_CALLBACK(menu_cb_view_ac_latlon), NULL);
1764     g_signal_connect(G_OBJECT(_menu_view_ac_lead_item), "toggled",
1765                       G_CALLBACK(menu_cb_view_ac_lead), NULL);
1766     g_signal_connect(G_OBJECT(_menu_view_ac_none_item), "toggled",
1767                       G_CALLBACK(menu_cb_view_ac_none), NULL);
1768
1769     g_signal_connect(G_OBJECT(_menu_view_fullscreen_item), "toggled",
1770                       G_CALLBACK(menu_cb_view_fullscreen), NULL);
1771
1772     /* Connect the "GPS" signals. */
1773     g_signal_connect(G_OBJECT(_menu_gps_enable_item), "toggled",
1774                       G_CALLBACK(menu_cb_gps_enable), NULL);
1775     g_signal_connect(G_OBJECT(_menu_gps_show_info_item), "toggled",
1776                       G_CALLBACK(menu_cb_gps_show_info), NULL);
1777     g_signal_connect(G_OBJECT(_menu_gps_details_item), "activate",
1778                       G_CALLBACK(menu_cb_gps_details), NULL);
1779     g_signal_connect(G_OBJECT(_menu_gps_reset_item), "activate",
1780                       G_CALLBACK(menu_cb_gps_reset), NULL);
1781
1782     /* Connect the other menu item signals. */
1783     g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
1784                       G_CALLBACK(menu_cb_settings), NULL);
1785     g_signal_connect(G_OBJECT(_menu_help_item), "activate",
1786                       G_CALLBACK(menu_cb_help), NULL);
1787     g_signal_connect(G_OBJECT(_menu_about_item), "activate",
1788                       G_CALLBACK(menu_cb_about), NULL);
1789     g_signal_connect(G_OBJECT(_menu_close_item), "activate",
1790                       G_CALLBACK(gtk_main_quit), NULL);
1791
1792     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1793 }
1794