]> err.no Git - mapper/blobdiff - src/ui-common.c
Map widget:
[mapper] / src / ui-common.c
index d9a9d52dea37624e2bcd256c240bbe633890734f..d4ca92d827991638ed3f48f9a2a999e6dcc06241 100644 (file)
@@ -1,7 +1,5 @@
 #include <config.h>
 
-#define _GNU_SOURCE
-
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
 #include <glib/gi18n.h>
 
 #include "gtkgps.h"
+#include "gtkcompass.h"
 
 #include "hildon-mapper.h"
 
 #include "utils.h"
 #include "poi.h"
+#include "path.h"
 #include "route.h"
+#include "track.h"
 #include "settings.h"
 #include "gps.h"
 #include "map.h"
 #include "mapper-types.h"
-#include "bt.h"
 #include "ui-common.h"
 #include "db.h"
-
+#include "gps-panels.h"
+#include "gps-conn.h"
+#include "filter.h"
+#include "dialogs.h"
 #include "settings-gui.h"
+#include "map-repo.h"
+#include "poi-gui.h"
+
+#ifdef WITH_GST
+#include "audio-note.h"
+#endif
 
 /* Callbacks */
 #include "cb.h"
 
 /* Default size */
 #define WINDOW_SIZE_X 800
-#define WINDOW_SIZE_Y 600
+#define WINDOW_SIZE_Y 480
 
 static GtkWidget *menu_bar;
-static GtkWidget *toolbar;
 GtkWidget *_fix_banner=NULL;
 
 static GtkActionGroup *actions;
@@ -51,19 +59,27 @@ static GtkActionGroup *map_repos_action_group;
 static GtkUIManager *ui;
 
 struct ui_notebook_struct {
-    GtkWidget *notebook;
-    gint map;
-    gint gps;
-    gint heading;
+       GtkWidget *notebook;
+       gint map;
+       gint gps;
+       gint heading;
+       gint route;
+       gint track;
+       gint qpoi;
+       gint audio;
 };
 struct ui_notebook_struct ui_notebook;
 
+static poi_quick_data tqp;
+
 /* A GPS icon would be nice.. anyone ? */
 
 #ifndef GTK_STOCK_INFO
 #define GTK_STOCK_INFO GTK_STOCK_PROPERTIES
 #endif
 
+static gboolean mapper_cb_quit(GtkWidget *widget, GdkEvent *event, gpointer data);
+
 /**
  * Action groups and UI
  */
@@ -71,8 +87,19 @@ static const gchar *mapper_ui =
 "<ui>"
 "  <menubar name='MenuBar'>"
 "    <menu action='file'>"
-"      <menuitem action='file_settings'/>"
+"      <menu action='file_settings'>"
+"       <menuitem action='file_settings_gps'/>"
+"       <menuitem action='file_settings_generic'/>"
+"       <menuitem action='file_settings_colors'/>"
+"       <separator/>"
+"       <menuitem action='file_settings_osm'/>"
+#ifdef WITH_DEVICE_770
+"       <separator/>"
+"       <menuitem action='file_settings_keys'/>"
+#endif
+"         </menu>"
 "      <separator/>"
+"      <menuitem action='file_import_osm'/>"
 "      <menuitem action='file_quit'/>"
 "    </menu>"
 "    <menu action='map' name='map'>"
@@ -90,6 +117,9 @@ static const gchar *mapper_ui =
 "      <menuitem action='autocenter_none'/>"
 "     </menu>"
 "    </menu>"
+"    <menu action='search'>"
+"      <menuitem action='search_address'/>"
+"    </menu>"
 "    <menu action='track'>"
 "      <menuitem action='track_open'/>"
 "      <menuitem action='track_save'/>"
@@ -116,8 +146,12 @@ static const gchar *mapper_ui =
 "    </menu>"
 "    <menu action='poi'>"
 "      <menuitem action='poi_categories'/>"
+"      <menuitem action='poi_search'/>"
+#if 0
 "      <separator/>"
-"      <menuitem action='poi_settings'/>"
+"      <menuitem action='poi_import'/>"
+"      <menuitem action='poi_export'/>"
+#endif
 "    </menu>"
 "    <menu action='view'>"
 "      <menuitem action='view_zoom_in'/>"
@@ -127,6 +161,8 @@ static const gchar *mapper_ui =
 "      <separator/>"
 "      <menuitem action='view_fullscreen'/>"
 "      <separator/>"
+"      <menuitem action='view_toolbar'/>"
+"      <separator/>"
 "      <menu action='view_items'>"
 "       <menuitem action='view_scale'/>"
 "       <menuitem action='view_route'/>"
@@ -139,22 +175,20 @@ static const gchar *mapper_ui =
 "      <menuitem action='goto_home'/>"
 "      <menuitem action='goto_destination'/>"
 "      <menuitem action='goto_gps'/>"
-"      <menuitem action='goto_address'/>"
+"      <separator/>"
 "      <menuitem action='goto_latlon'/>"
-"      <menuitem action='goto_nextway'/>"
 "      <menuitem action='goto_nearpoi'/>"
+"      <menuitem action='goto_nextway'/>"
 "      <separator/>"
 "    </menu>"
 "    <menu action='gps'>"
 "      <menuitem action='gps_enabled'/>"
 "      <menuitem action='gps_information'/>"
-"      <separator/>"
-"      <menuitem action='gps_details'/>"
-"      <separator/>"
-"      <menuitem action='gps_settings'/>"
 "    </menu>"
 "    <menu action='help'>"
+#if defined (WITH_OSSO_HELP) || defined(WITH_HILDON_HELP)
 "      <menuitem action='help_help'/>"
+#endif
 "      <menuitem action='help_about'/>"
 "    </menu>"
 "  </menubar>"
@@ -165,24 +199,39 @@ static const gchar *mapper_ui =
 "    <separator/>"
 "    <toolitem action='poi_add'/>"
 "    <toolitem action='poi_quick_add'/>"
-"    <toolitem action='poi_search'/>"
 "    <separator/>"
-#if 0
-"    <toolitem action='view_fullscreen'/>"
+"    <toolitem action='search_address'/>"
 "    <separator/>"
-#endif
 "    <toolitem action='view_zoom_in'/>"
 "    <toolitem action='view_zoom_out'/>"
+#ifndef WITH_DEVICE_770
 "    <toolitem action='view_zoom_normal'/>"
 "    <toolitem action='view_zoom_auto'/>"
+#endif
 "    <separator/>"
 "  </toolbar>"
+"  <toolbar name='MappingToolBar'>"
+"    <toolitem action='goto_gps'/>"
+"    <separator/>"
+"    <toolitem action='poi_add'/>"
+"    <toolitem action='poi_quick_add'/>"
+"    <toolitem action='track_insert_break'/>"
+"    <toolitem action='track_insert_mark'/>"
+"    <separator/>"
+"    <toolitem action='search_address'/>"
+"  </toolbar>"
 "</ui>";
 
 static GtkActionEntry ui_entries[] = {
        {"file", NULL, N_("_File"), NULL, NULL, NULL },
-       {"file_settings", GTK_STOCK_PREFERENCES, N_("_Settings..."), NULL, NULL, G_CALLBACK(menu_cb_settings) },
-       {"file_quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", NULL, G_CALLBACK(gtk_main_quit) },
+       {"file_settings", GTK_STOCK_PREFERENCES, N_("_Settings..."), NULL, NULL, NULL },
+       {"file_settings_generic", NULL, N_("Generic..."), NULL, NULL, G_CALLBACK(menu_cb_settings) },
+       {"file_settings_colors", NULL, N_("_Colors..."), NULL, NULL, G_CALLBACK(menu_cb_settings_colors) },
+       {"file_settings_gps", NULL, N_("_Gps..."), NULL, NULL, G_CALLBACK(menu_cb_settings_gps) },
+       {"file_settings_osm", NULL, N_("_Map info..."), NULL, NULL, G_CALLBACK(menu_cb_settings_osm) },
+       {"file_settings_keys", NULL, N_("_Keys..."), NULL, NULL, G_CALLBACK(menu_cb_settings_keys) },
+       {"file_import_osm", NULL, N_("_Import OSM data..."), NULL, NULL, G_CALLBACK(menu_cb_import_osm) },
+       {"file_quit", GTK_STOCK_QUIT, N_("_Quit"), "<control>Q", NULL, G_CALLBACK(mapper_cb_quit) },
 
        {"help", NULL, N_("_Help"), NULL, NULL, NULL },
        {"help_help", GTK_STOCK_HELP, N_("_Help"), NULL, NULL, G_CALLBACK(menu_cb_help) },
@@ -208,11 +257,16 @@ static GtkActionEntry ui_entries[] = {
        {"route_dist_last", NULL, N_("Show Distance to _End of Route"), NULL, NULL, G_CALLBACK(menu_cb_route_distlast) },
 
        {"poi", NULL, N_("_Poi"), NULL, NULL, NULL },
-       {"poi_categories", GTK_STOCK_INDEX, N_("_Categories"), NULL, NULL, G_CALLBACK(menu_cb_category) },
+       {"poi_categories", GTK_STOCK_INDEX, N_("_Categories.."), NULL, NULL, G_CALLBACK(menu_cb_category) },
        {"poi_settings", GTK_STOCK_PREFERENCES, N_("_Settings..."), NULL, NULL, NULL },
-       {"poi_add", GTK_STOCK_ADD, N_("_Add"), "<control>A", NULL, G_CALLBACK(cb_add_poi) },
-       {"poi_quick_add", GTK_STOCK_ABOUT, N_("_Quick Add"), "<control>E", NULL, G_CALLBACK(cb_add_poi) },
-       {"poi_search", GTK_STOCK_FIND, N_("_Search"), NULL, NULL, NULL },
+       {"poi_add", GTK_STOCK_ADD, N_("_Add"), "<control>A", NULL, G_CALLBACK(cb_poi_add) },
+       {"poi_quick_add", GTK_STOCK_ABOUT, N_("_Quick Add"), "<control>E", NULL, G_CALLBACK(cb_poi_add) },
+       {"poi_search", GTK_STOCK_FIND, N_("_Search..."), NULL, NULL, G_CALLBACK(cb_poi_search) },
+       {"poi_import", GTK_STOCK_OPEN, N_("_Import..."), NULL, NULL, NULL },
+       {"poi_export", GTK_STOCK_SAVE, N_("_Export..."), NULL, NULL, NULL },
+
+       {"search", NULL, N_("_Search"), NULL, NULL, NULL },
+       {"search_address", GTK_STOCK_FIND, N_("Address..."), "<control>F", NULL, G_CALLBACK(menu_cb_search_address) },
 
        {"map", NULL, N_("_Map"), NULL, NULL, NULL },
        {"map_maps", NULL, N_("_Maps"), NULL, NULL, NULL },
@@ -231,13 +285,11 @@ static GtkActionEntry ui_entries[] = {
        {"goto_home", GTK_STOCK_HOME, N_("_Home"), "<control>H", NULL, G_CALLBACK(menu_cb_goto_home) },
        {"goto_destination", GTK_STOCK_JUMP_TO, N_("_Destination"), "<control>J", NULL, G_CALLBACK(menu_cb_goto_destination) },
        {"goto_gps", NULL, N_("_GPS"), "<control>G", NULL, G_CALLBACK(menu_cb_goto_gps) },
-       {"goto_address", GTK_STOCK_FIND, N_("Address..."), NULL, NULL, NULL },
        {"goto_latlon", NULL, N_("Lat/Lon"), NULL, NULL, G_CALLBACK(menu_cb_goto_latlon) },
        {"goto_nextway", NULL, N_("Next Waypoint"), NULL, NULL, G_CALLBACK(menu_cb_goto_nextway) },
        {"goto_nearpoi", NULL, N_("Near POI"), NULL, NULL, G_CALLBACK(menu_cb_goto_nearpoi) },
 
        {"gps", NULL, N_("Gp_s"), NULL, NULL, NULL },
-       {"gps_details", GTK_STOCK_INFO, N_("_Details..."), NULL, NULL, G_CALLBACK(menu_cb_gps_details) },
        {"gps_settings", NULL, N_("_Settings..."), NULL, NULL, NULL },
 };
 static guint n_ui_entries = G_N_ELEMENTS (ui_entries);
@@ -252,6 +304,7 @@ static GtkToggleActionEntry ui_toggle_entries[] = {
 #else
        {"view_fullscreen", NULL, N_("Fullscreen"), "F11", NULL, G_CALLBACK(cb_fullscreen), FALSE},
 #endif
+       {"view_toolbar", NULL, N_("Toolbar"), NULL, NULL, G_CALLBACK(menu_cb_view_toolbar), FALSE},
        {"view_scale", NULL, N_("Scale"), NULL, NULL, G_CALLBACK(menu_cb_show_scale), TRUE},
        {"view_route", NULL, N_("Route"), NULL, NULL, G_CALLBACK(menu_cb_show_routes), TRUE},
        {"view_track", NULL, N_("Track"), NULL, NULL, G_CALLBACK(menu_cb_show_tracks), TRUE},
@@ -261,9 +314,9 @@ static GtkToggleActionEntry ui_toggle_entries[] = {
 static guint n_ui_toggle_entries = G_N_ELEMENTS (ui_toggle_entries);
 
 static GtkRadioActionEntry ui_autocenter_entries[] = {
-  { "autocenter_latlon", NULL, "Lat/Lon", "<control>1", NULL, CENTER_LATLON },
-  { "autocenter_lead", NULL, "Lead", "<control>2", NULL, CENTER_LEAD },
-  { "autocenter_none", NULL, "None", "<control>3", NULL, CENTER_MANUAL },
+  { "autocenter_latlon", NULL, "Lat/Lon", "<control>L", NULL, CENTER_LATLON },
+  { "autocenter_lead", NULL, "Lead", "<control>E", NULL, CENTER_LEAD },
+  { "autocenter_none", NULL, "None", "<control>N", NULL, CENTER_MANUAL },
 };
 static guint n_ui_autocenter_entries = G_N_ELEMENTS (ui_autocenter_entries);
 
@@ -311,30 +364,20 @@ void force_min_visible_bars(void *a, gint b)
 }
 #endif
 
-/**
- * Pop up a modal dialog box with simple error information in it.
- */
-void 
-popup_error(GtkWidget * window, const gchar * error)
+static gboolean
+mapper_cb_quit(GtkWidget *widget, GdkEvent  *event, gpointer data)
 {
-GtkWidget *dialog;
-
-#ifdef WITH_HILDON
-dialog = hildon_note_new_information(GTK_WINDOW(window), error);
-#else
-dialog = gtk_message_dialog_new (GTK_WINDOW(window),
-       GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-       GTK_MESSAGE_INFO, GTK_BUTTONS_OK, error);
-#endif
-gtk_dialog_run(GTK_DIALOG(dialog));
-gtk_widget_destroy(dialog);
+if (dialog_confirm(_window, _("Are sure you'd like to quit ?"))==TRUE) {
+       gtk_main_quit();
+       return FALSE;
+}
+return TRUE;
 }
 
 void 
 menu_maps_add_repos(void)
 {
 GList *curr;
-GtkWidget *last_repo = NULL;
 static gint id=0;
 gint i=0;
 
@@ -370,63 +413,12 @@ for (curr = g_list_last(_repo_list); curr; curr = curr->prev) {
 }
 
 /**
- * Call gtk_window_present() on Mapper.  This also checks the
- * configuration and brings up the Settings dialog if the GPS Receiver is
- * not set up, the first time it is called.
+ * Call gtk_window_present() on Mapper.
  */
 gboolean 
 window_present()
 {
-static gint been_here = 0;
-static gint done_here = 0;
-
-if (!been_here++) {
-       /* Set connection state first, to avoid going into this if twice. */
-       if (!_rcvr_mac && _enable_gps) {
-               GtkWidget *confirm;
-
-               gtk_window_present(GTK_WINDOW(_window));
-               popup_error(_window, _("It looks like this is your first time running "
-                                                 "Mapper. Press OK to continue."));
-
-               if (settings_dialog()) {
-                       popup_error(_window,
-                                  _("OpenStreetMap.org provides public, free-to-use maps.  "
-                                    "You can also download a sample set of repositories from "
-                                    " the internet by using the \"Download...\" button."));
-                       repoman_dialog();
-                       if (_curr_repo->type != REPOTYPE_NONE) {
-                               confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
-                                            _("You will now see a blank screen.  You can download"
-                                             " maps using the \"Manage Maps\" menu item in the"
-                                             " \"Maps\" menu.  Or, press OK to enable"
-                                             " Auto-Download."));
-                               if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
-                                       set_action_activate("map_auto_download", FALSE);
-                               }
-                               gtk_widget_destroy(confirm);
-                       }
-               } else {
-                       gtk_main_quit();
-               }
-       }
-       /* Connect to receiver. */
-       if (_enable_gps)
-               rcvr_connect_now();
-
-       done_here++;    /* Don't ask... */
-}
-if (done_here) {
-       gtk_window_present(GTK_WINDOW(_window));
-
-       /* Re-enable any banners that might have been up. */
-       {
-               ConnState old_state = _conn_state;
-               set_conn_state(RCVR_OFF);
-               set_conn_state(old_state);
-       }
-}
-
+gtk_window_present(GTK_WINDOW(_window));
 return FALSE;
 }
 
@@ -454,7 +446,6 @@ gtk_menu_append(submenu, _cmenu_loc_route_to_item= gtk_menu_item_new_with_label(
 gtk_menu_append(submenu, gtk_separator_menu_item_new());
 gtk_menu_append(submenu, _cmenu_loc_add_route= gtk_menu_item_new_with_label(_("Add Route Point")));
 gtk_menu_append(submenu, _cmenu_loc_add_way    = gtk_menu_item_new_with_label(_("Add Waypoint...")));
-gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
 gtk_menu_append(submenu, gtk_separator_menu_item_new());
 gtk_menu_append(submenu, _cmenu_loc_set_gps = gtk_menu_item_new_with_label(_("Set as GPS Location")));
 gtk_menu_append(submenu, _cmenu_loc_set_home = gtk_menu_item_new_with_label(_("Set as Home Location")));
@@ -532,105 +523,70 @@ _menu_map = menu;
 #endif
 }
 
-static void 
-toolbar_progress_init(void)
+static GtkWidget *
+mapper_window_new(void) 
 {
-GtkToolItem *item;
+GtkWidget *window;
 
-item=gtk_tool_item_new();
-_progress_item=gtk_progress_bar_new();
-gtk_container_add(item, _progress_item);
-gtk_toolbar_insert(GTK_TOOLBAR (toolbar), item, -1);
+#ifdef WITH_HILDON
+_program=HILDON_PROGRAM(hildon_program_get_instance());
+window=GTK_WIDGET(hildon_window_new());
+hildon_program_add_window(_program, HILDON_WINDOW(window));
+#else
+window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
+gtk_window_set_title(GTK_WINDOW(window), "Mapper");
+gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+gtk_widget_set_size_request(GTK_WIDGET(window), WINDOW_SIZE_X, WINDOW_SIZE_Y);
+gtk_window_resize(GTK_WINDOW(window), WINDOW_SIZE_X, WINDOW_SIZE_Y);
+#endif
+
+return window;
 }
 
-void 
-mapper_init_variables(void)
+/**
+ * Set sensitivity of route menu items
+ */
+void
+route_menu_set_sensitive(gboolean s)
+{
+set_action_sensitive("route_save", s);
+set_action_sensitive("route_dist_next", s);
+set_action_sensitive("route_dist_last", s);
+set_action_sensitive("route_reset", s);
+set_action_sensitive("route_clear", s);
+}
+
+/**
+ * Create a tree view inside given container
+ */
+static GtkWidget *
+mapper_tree_view_new(GtkWidget *container) 
 {
-UNITS_TEXT[UNITS_KM] = _("km");
-UNITS_TEXT[UNITS_MI] = _("mi.");
-UNITS_TEXT[UNITS_NM] = _("n.m.");
-
-INFO_FONT_TEXT[INFO_FONT_XXSMALL] = "xx-small";
-INFO_FONT_TEXT[INFO_FONT_XSMALL] = "x-small";
-INFO_FONT_TEXT[INFO_FONT_SMALL] = "small";
-INFO_FONT_TEXT[INFO_FONT_MEDIUM] = "medium";
-INFO_FONT_TEXT[INFO_FONT_LARGE] = "large";
-INFO_FONT_TEXT[INFO_FONT_XLARGE] = "x-large";
-INFO_FONT_TEXT[INFO_FONT_XXLARGE] = "xx-large";
-
-CUSTOM_KEY_GCONF[CUSTOM_KEY_UP] = GCONF_KEY_PREFIX "/key_up";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_DOWN] = GCONF_KEY_PREFIX "/key_down";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_LEFT] = GCONF_KEY_PREFIX "/key_left";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_RIGHT] = GCONF_KEY_PREFIX "/key_right";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_SELECT] = GCONF_KEY_PREFIX "/key_select";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_INCREASE] = GCONF_KEY_PREFIX "/key_increase";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_DECREASE] = GCONF_KEY_PREFIX "/key_decrease";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_FULLSCREEN] = GCONF_KEY_PREFIX "/key_fullscreen";
-CUSTOM_KEY_GCONF[CUSTOM_KEY_ESC] = GCONF_KEY_PREFIX "/key_esc";
-
-CUSTOM_KEY_ICON[CUSTOM_KEY_UP] = HWK_BUTTON_UP;
-CUSTOM_KEY_ICON[CUSTOM_KEY_LEFT] = HWK_BUTTON_LEFT;
-CUSTOM_KEY_ICON[CUSTOM_KEY_DOWN] = HWK_BUTTON_DOWN;
-CUSTOM_KEY_ICON[CUSTOM_KEY_RIGHT] = HWK_BUTTON_RIGHT;
-CUSTOM_KEY_ICON[CUSTOM_KEY_SELECT] = HWK_BUTTON_SELECT;
-CUSTOM_KEY_ICON[CUSTOM_KEY_INCREASE] = HWK_BUTTON_INCREASE;
-CUSTOM_KEY_ICON[CUSTOM_KEY_DECREASE] = HWK_BUTTON_DECREASE;
-CUSTOM_KEY_ICON[CUSTOM_KEY_FULLSCREEN] = HWK_BUTTON_VIEW;
-CUSTOM_KEY_ICON[CUSTOM_KEY_ESC] = HWK_BUTTON_CANCEL;
-
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_UP] = CUSTOM_ACTION_PAN_NORTH;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_LEFT] = CUSTOM_ACTION_PAN_WEST;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_DOWN] = CUSTOM_ACTION_PAN_SOUTH;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_RIGHT] = CUSTOM_ACTION_PAN_EAST;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_SELECT] = CUSTOM_ACTION_TOGGLE_AUTOCENTER;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_INCREASE] = CUSTOM_ACTION_ZOOM_IN;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_DECREASE] = CUSTOM_ACTION_ZOOM_OUT;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_FULLSCREEN] = CUSTOM_ACTION_TOGGLE_FULLSCREEN;
-CUSTOM_KEY_DEFAULT[CUSTOM_KEY_ESC] = CUSTOM_ACTION_TOGGLE_TRACKS;
-
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_PAN_NORTH] = _("Pan North");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_PAN_WEST] = _("Pan West");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_PAN_SOUTH] = _("Pan South");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_PAN_EAST] = _("Pan East");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_AUTOCENTER] = _("Toggle Auto-Center");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_FULLSCREEN] = _("Toggle Fullscreen");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_ZOOM_IN] = _("Zoom In");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_ZOOM_OUT] = _("Zoom Out");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_TRACKS] = _("Toggle Tracks");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_SCALE] = _("Toggle Scale");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_POI] = _("Toggle POIs");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_CHANGE_REPO] = _("Select Next Repository");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_ROUTE_DISTNEXT] = _("Show Distance to Next Waypoint");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_ROUTE_DISTLAST] = _("Show Distance to End of Route");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TRACK_BREAK] = _("Insert Track Break");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TRACK_DISTLAST] = _("Show Distance from Last Break");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TRACK_DISTFIRST] = _("Show Distance from Beginning");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_GPS] = _("Toggle GPS");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_GPSINFO] = _("Toggle GPS Info");
-CUSTOM_ACTION_TEXT[CUSTOM_ACTION_TOGGLE_SPEEDLIMIT] = _("Toggle Speed Limit");
-
-COLORABLE_GCONF[COLORABLE_MARK] = GCONF_KEY_PREFIX "/color_mark";
-COLORABLE_GCONF[COLORABLE_MARK_VELOCITY] = GCONF_KEY_PREFIX "/color_mark_velocity";
-COLORABLE_GCONF[COLORABLE_MARK_OLD] = GCONF_KEY_PREFIX "/color_mark_old";
-COLORABLE_GCONF[COLORABLE_TRACK] = GCONF_KEY_PREFIX "/color_track";
-COLORABLE_GCONF[COLORABLE_TRACK_MARK] = GCONF_KEY_PREFIX "/color_track_mark";
-COLORABLE_GCONF[COLORABLE_TRACK_BREAK] = GCONF_KEY_PREFIX "/color_track_break";
-COLORABLE_GCONF[COLORABLE_ROUTE] = GCONF_KEY_PREFIX "/color_route";
-COLORABLE_GCONF[COLORABLE_ROUTE_WAY] = GCONF_KEY_PREFIX "/color_route_way";
-COLORABLE_GCONF[COLORABLE_ROUTE_BREAK] = GCONF_KEY_PREFIX "/color_route_break";
-COLORABLE_GCONF[COLORABLE_POI] = GCONF_KEY_PREFIX "/color_poi";
-
-DEG_FORMAT_TEXT[DDPDDDDD] = "-dd.ddddd°";
-DEG_FORMAT_TEXT[DD_MMPMMM] = "-dd°mm.mmm'";
-DEG_FORMAT_TEXT[DD_MM_SSPS] = "-dd°mm'ss.s\"";
-DEG_FORMAT_TEXT[DDPDDDDD_NSEW] = "dd.ddddd° S";
-DEG_FORMAT_TEXT[DD_MMPMMM_NSEW] = "dd°mm.mmm' S";
-DEG_FORMAT_TEXT[DD_MM_SSPS_NSEW] = "dd°mm'ss.s\" S";
-
-SPEED_LOCATION_TEXT[SPEED_LOCATION_TOP_LEFT] = _("Top-Left");
-SPEED_LOCATION_TEXT[SPEED_LOCATION_TOP_RIGHT] = _("Top-Right");
-SPEED_LOCATION_TEXT[SPEED_LOCATION_BOTTOM_RIGHT] = _("Bottom-Right");
-SPEED_LOCATION_TEXT[SPEED_LOCATION_BOTTOM_LEFT] = _("Bottom-Left");
+GtkWidget *tree_view, *sw;
+GtkTreeViewColumn *column;
+GtkCellRenderer *renderer;
+
+tree_view=gtk_tree_view_new();
+sw=gtk_scrolled_window_new(NULL, NULL);
+gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+gtk_container_add(GTK_CONTAINER(sw), tree_view);
+gtk_box_pack_start(container, sw, TRUE, TRUE, 0);
+gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)), GTK_SELECTION_SINGLE);
+gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), TRUE);
+
+renderer=gtk_cell_renderer_text_new();
+column=gtk_tree_view_column_new_with_attributes(_("Location"), renderer, "text", ROUTE_LATLON, NULL);
+gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
+
+renderer=gtk_cell_renderer_text_new();
+column=gtk_tree_view_column_new_with_attributes(_("Distance"), renderer, "text", ROUTE_DISTANCE, NULL);
+gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
+
+renderer=gtk_cell_renderer_text_new();
+column=gtk_tree_view_column_new_with_attributes(_("Waypoint"), renderer, "text", ROUTE_WAYPOINT, NULL);
+gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
+
+return tree_view;
 }
 
 /**
@@ -639,27 +595,15 @@ SPEED_LOCATION_TEXT[SPEED_LOCATION_BOTTOM_LEFT] = _("Bottom-Left");
 void 
 mapper_ui_init(void)
 {
+GError *error = NULL;
 GtkWidget *hbox, *mapvbox, *label, *vbox_main;
-GtkWidget *gpsvbox, *headingvbox;
+GtkWidget *vbox;
 GtkNotebook *notebook;
-GdkColor color;
-GError *error = NULL;
-
-#ifdef WITH_HILDON
-/* Initialize _program. */
-_program = HILDON_PROGRAM(hildon_program_get_instance());
-
-/* Initialize _window. */
-_window = GTK_WIDGET(hildon_window_new());
-hildon_program_add_window(_program, HILDON_WINDOW(_window));
-#else
-_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-gtk_window_set_title(GTK_WINDOW(_window), "Mapper");
-gtk_widget_set_size_request(GTK_WIDGET(_window), WINDOW_SIZE_X, WINDOW_SIZE_Y);
-gtk_window_resize(GTK_WINDOW(_window), WINDOW_SIZE_X, WINDOW_SIZE_Y);
-gtk_window_set_resizable(GTK_WINDOW(_window), TRUE);
-#endif
+GtkToolItem *item;
+GtkTreeViewColumn *column;
+GtkCellRenderer *renderer;
 
+_window=mapper_window_new();
 gtk_container_set_border_width (GTK_CONTAINER (_window), 0);
 
 actions = gtk_action_group_new ("Actions");
@@ -676,9 +620,8 @@ gtk_action_group_add_radio_actions (actions, ui_autocenter_entries,
 gtk_ui_manager_insert_action_group (ui, actions, 0);
 g_object_unref (actions);
 
-#ifndef WITH_HILDON
+/* N810 has keyboard so set this up on hildon too */
 gtk_window_add_accel_group (GTK_WINDOW(_window), gtk_ui_manager_get_accel_group (ui));
-#endif
 
 if (!gtk_ui_manager_add_ui_from_string (ui, mapper_ui, -1, &error)) {
        g_message ("building menus failed: %s", error->message);
@@ -690,9 +633,17 @@ if (!gtk_ui_manager_add_ui_from_string (ui, mapper_ui, -1, &error)) {
 menu_bar = gtk_ui_manager_get_widget (ui, "/MenuBar");
 g_assert(menu_bar);
 
-toolbar = gtk_ui_manager_get_widget (ui, "/ToolBar");
-g_assert(toolbar);
-toolbar_progress_init();
+_toolbar = gtk_ui_manager_get_widget (ui, "/ToolBar");
+g_assert(_toolbar);
+
+/* Toolbar progress item */
+item=gtk_tool_item_new();
+_progress_item=gtk_progress_bar_new();
+gtk_tool_item_set_expand(item, TRUE);
+gtk_progress_bar_set_ellipsize(_progress_item, PANGO_ELLIPSIZE_END);
+gtk_progress_bar_set_pulse_step(_progress_item, 0.2);
+gtk_container_add(item, _progress_item);
+gtk_toolbar_insert(GTK_TOOLBAR(_toolbar), item, -1);
 
 /* Notebook with different views */
 notebook = gtk_notebook_new();
@@ -702,129 +653,123 @@ info_banner.container=gtk_hbox_new(FALSE, 0);
 info_banner.location=gtk_label_new("");
 info_banner.speed=gtk_label_new("");
 info_banner.distance=gtk_label_new("");
-gtk_label_set_max_width_chars(GTK_LABEL(info_banner.speed), 10);
-gtk_label_set_width_chars(GTK_LABEL(info_banner.speed), 14);
-gtk_box_pack_start(GTK_BOX(info_banner.container), info_banner.speed, FALSE, FALSE, 0);
+
+gtk_misc_set_alignment(GTK_MISC(info_banner.location), 0.f, 0.5f);
+gtk_misc_set_alignment(GTK_MISC(info_banner.speed), 1.f, 0.5f);
+gtk_misc_set_alignment(GTK_MISC(info_banner.distance), 1.f, 0.5f);
+
 gtk_box_pack_start(GTK_BOX(info_banner.container), info_banner.location, TRUE, TRUE, 0);
-gtk_box_pack_start(GTK_BOX(info_banner.container), info_banner.distance, FALSE, FALSE, 0);
+gtk_box_pack_end(GTK_BOX(info_banner.container), info_banner.speed, FALSE, FALSE, 0);
+gtk_box_pack_end(GTK_BOX(info_banner.container), info_banner.distance, FALSE, FALSE, 0);
 
 vbox_main = gtk_vbox_new(FALSE, 0);
 gtk_container_add(GTK_CONTAINER(_window), vbox_main);
 
 #ifdef WITH_HILDON
 /* Create and add widgets and supporting data. */
-gtk_box_pack_start(GTK_BOX(vbox_main), notebook, TRUE, TRUE, 0);
-gtk_box_pack_start(GTK_BOX(vbox_main), info_banner.container, FALSE, FALSE, 0);
-hildon_program_set_common_toolbar(_program, toolbar);
+gtk_box_pack_start(GTK_BOX(vbox_main), GTK_WIDGET(notebook), TRUE, TRUE, 0);
+gtk_box_pack_start(GTK_BOX(vbox_main), GTK_WIDGET(info_banner.container), FALSE, FALSE, 0);
 {
        GtkMenu *hmenu;
        hmenu = GTK_MENU(gtk_menu_new());
 
-       gtk_container_foreach(GTK_CONTAINER(menu_bar),
-               (GtkCallback) gtk_widget_reparent, hmenu);
-
+       gtk_container_foreach(GTK_CONTAINER(menu_bar), (GtkCallback)gtk_widget_reparent, hmenu);
        hildon_window_set_menu(HILDON_WINDOW(_window), hmenu);
 }
-gtk_widget_show_all(GTK_WIDGET(toolbar));
+hildon_window_add_toolbar(_window, GTK_TOOLBAR(_toolbar));
+gtk_widget_show_all(GTK_WIDGET(_toolbar));
 #else
 _status_bar = gtk_statusbar_new();
-
 gtk_box_pack_start(GTK_BOX(vbox_main), menu_bar, FALSE, FALSE, 0);
-gtk_box_pack_start(GTK_BOX(vbox_main), toolbar, FALSE, FALSE, 0);
+gtk_box_pack_start(GTK_BOX(vbox_main), _toolbar, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(vbox_main), notebook, TRUE, TRUE, 0);
 gtk_box_pack_start(GTK_BOX(vbox_main), info_banner.container, FALSE, FALSE, 0);
 gtk_box_pack_start(GTK_BOX(vbox_main), _status_bar, FALSE, FALSE, 0);
 #endif
 
-gtk_widget_show_all(GTK_WIDGET(vbox_main));
-
 label = gtk_label_new("Map");
 hbox = gtk_hpaned_new();
 
-gtk_widget_hide(GTK_WIDGET(_progress_item));
+/* GPS Panel */
+_gps_widget=gps_info_panel();
+gtk_widget_set_size_request(GTK_WIDGET(_gps_widget), 180, 0);
+gtk_paned_add1(GTK_PANED(hbox), _gps_widget);
 
-mapvbox = gtk_vbox_new(FALSE, 0);
+mapvbox=gtk_vbox_new(FALSE, 0);
 gtk_box_pack_start(GTK_BOX(mapvbox), hbox, TRUE, TRUE, 0);
 ui_notebook.map=gtk_notebook_append_page(notebook, mapvbox, label);
-gtk_widget_show_all(GTK_WIDGET(mapvbox));
+
+/* Map widget */
+_map_widget = map_new();
+gtk_paned_add2(GTK_PANED(hbox), _map_widget);
+
+#ifndef WITH_DEVICE_770
+map_set_cache_size(256);
+#endif
 
 /* GPS Tab */
-gpsvbox = gtk_vbox_new(FALSE, 0);
+vbox = gtk_vbox_new(FALSE, 0);
 label = gtk_label_new("Gps");
-_gps_sat_view = gtk_gps_new(GTK_GPS_MODE_SKY, &_gps);
-gtk_box_pack_start(GTK_BOX(gpsvbox), _gps_sat_view, TRUE, TRUE, 0);
-ui_notebook.gps=gtk_notebook_append_page(notebook, gpsvbox, label);
-gtk_widget_show_all(GTK_WIDGET(gpsvbox));
-
-/* Heading */
-headingvbox = gtk_vbox_new(FALSE, 0);
+_gps_sat_view = gtk_gps_new(GTK_GPS_MODE_SKY, &_gps->data);
+gtk_box_pack_start(GTK_BOX(vbox), _gps_sat_view, TRUE, TRUE, 0);
+_gps_sat_view = gtk_gps_new(GTK_GPS_MODE_SIGNAL, &_gps->data);
+gtk_box_pack_start(GTK_BOX(vbox), _gps_sat_view, TRUE, TRUE, 0);
+ui_notebook.gps=gtk_notebook_append_page(notebook, vbox, label);
+
+/* Heading Tab */
+vbox = gtk_vbox_new(FALSE, 0);
 label = gtk_label_new("Heading");
-_tab_compass = gtk_compass_new(&_gps);
-gtk_box_pack_start(GTK_BOX(headingvbox), _tab_compass, TRUE, TRUE, 0);
-ui_notebook.heading=gtk_notebook_append_page(notebook, headingvbox, label);
-gtk_widget_show_all(GTK_WIDGET(headingvbox));
+_tab_compass = gtk_compass_new(&_gps->data);
+gtk_box_pack_start(GTK_BOX(vbox), _tab_compass, TRUE, TRUE, 0);
+ui_notebook.heading=gtk_notebook_append_page(notebook, vbox, label);
+
+/* Track Tab */
+vbox=gtk_vbox_new(FALSE, 0);
+label=gtk_label_new("Track");
+track_tree_view=mapper_tree_view_new(vbox);
+#if 0
+g_signal_connect(G_OBJECT(track_tree_view), "row-activated", G_CALLBACK(track_waypoint_activated_cb), NULL);
+#endif
+ui_notebook.track=gtk_notebook_append_page(notebook, vbox, label);
 
-_gps_widget = gps_info_panel();
-gtk_widget_set_size_request(GTK_WIDGET(_gps_widget), 180, 0);
-gtk_paned_add1(GTK_PANED(hbox), _gps_widget);
+/* Route Tab */
+vbox=gtk_vbox_new(FALSE, 0);
+label=gtk_label_new("Route");
+route_tree_view=mapper_tree_view_new(vbox);
+#if 0
+g_signal_connect(G_OBJECT(route_tree_view), "row-activated", G_CALLBACK(route_waypoint_activated_cb), NULL);
+#endif
+ui_notebook.route=gtk_notebook_append_page(notebook, vbox, label);
 
-_map_widget = gtk_drawing_area_new();
-gtk_paned_add2(GTK_PANED(hbox), _map_widget);
+/* Quick POI Tab */
+label=gtk_label_new("Quick POI");
+tqp.fixed=FALSE;
+tqp.close=FALSE;
+vbox=poi_quick_button_box(&tqp);
+ui_notebook.qpoi=gtk_notebook_append_page(notebook, vbox, label);
 
-gps_show_info();
-gtk_widget_realize(_map_widget);
-map_poi_init(_map_widget);
+#ifdef WITH_GST
+{
+audio_note_ui *an_ui;
+label=gtk_label_new("Audio");
+an_ui=audio_note_new();
+ui_notebook.audio=gtk_notebook_append_page(notebook, an_ui->vbox, label);
+}
+#endif
 
 menu_maps_add_repos();
-
 menu_init_cmenu();
 
-/* -1: use bit depth of widget->window. */
-_map_pixmap = gdk_pixmap_new(_map_widget->window, BUF_WIDTH_PIXELS, BUF_HEIGHT_PIXELS, -1);    
+memset(&_autoroute_data, 0, sizeof(_autoroute_data));
 
-/* Connect signals. */
+g_signal_connect(G_OBJECT(_window), "delete_event", G_CALLBACK(mapper_cb_quit), NULL);
 g_signal_connect(G_OBJECT(_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
-g_signal_connect(G_OBJECT(_window), "key_press_event", G_CALLBACK(window_cb_key_press), NULL);
-g_signal_connect(G_OBJECT(_window), "key_release_event", G_CALLBACK(window_cb_key_release), NULL);
 
-g_signal_connect(G_OBJECT(_map_widget), "configure_event", G_CALLBACK(map_cb_configure), NULL);
-g_signal_connect(G_OBJECT(_map_widget), "expose_event", G_CALLBACK(map_cb_expose), NULL);
-g_signal_connect(G_OBJECT(_map_widget), "button_press_event", G_CALLBACK(map_cb_button_press), NULL);
-g_signal_connect(G_OBJECT(_map_widget), "button_release_event",G_CALLBACK(map_cb_button_release), NULL);
-g_signal_connect(G_OBJECT(_map_widget), "scroll_event",         G_CALLBACK(map_cb_scroll_event), NULL);
-
-gtk_widget_add_events(_map_widget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-      | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
-
-gtk_widget_show_all(hbox);
-
-/* Cache some pango and GCs for drawing. */
-_scale_context = gtk_widget_get_pango_context(_map_widget);
-_scale_layout = pango_layout_new(_scale_context);
-_scale_font = pango_font_description_new();
-pango_font_description_set_size(_scale_font, 12 * PANGO_SCALE);
-pango_layout_set_font_description(_scale_layout, _scale_font);
-
-/* speed limit */
-_speed_limit_gc1 = gdk_gc_new(_map_widget->window);
-color.red = 0xffff;
-color.green = 0;
-color.blue = 0;
-gdk_gc_set_rgb_fg_color(_speed_limit_gc1, &color);
-color.red = 0;
-color.green = 0;
-color.blue = 0;
-_speed_limit_gc2 = gdk_gc_new(_map_widget->window);
-gdk_gc_set_rgb_fg_color(_speed_limit_gc2, &color);
-_speed_limit_context = gtk_widget_get_pango_context(_map_widget);
-_speed_limit_layout = pango_layout_new(_speed_limit_context);
-_speed_limit_fontdesc = pango_font_description_new();
-pango_font_description_set_size(_speed_limit_fontdesc, 64 * PANGO_SCALE);
-pango_layout_set_font_description(_speed_limit_layout, _speed_limit_fontdesc);
-pango_layout_set_alignment(_speed_limit_layout, PANGO_ALIGN_CENTER);
-
-_last_spoken_phrase = g_strdup("");
-memset(&_autoroute_data, 0, sizeof(_autoroute_data));
+gtk_widget_show_all(GTK_WIDGET(vbox_main));
+gtk_widget_show_all(GTK_WIDGET(_window));
+
+/* Initialize our line styles. */
+update_gcs();
 
 /* Set defaults for items */
 set_action_activate("map_auto_download", _auto_download);
@@ -836,6 +781,8 @@ set_action_sensitive("autocenter_lead", _enable_gps);
 
 set_action_activate("gps_information", _gps_info);
 
+set_action_activate("view_toolbar", TRUE);
+
 set_action_activate("view_scale", _show_scale);
 set_action_activate("view_vector", _show_velvec);
 set_action_activate("view_poi", _show_poi);
@@ -843,33 +790,69 @@ set_action_activate("view_poi", _show_poi);
 set_action_activate("view_track", _show_tracks & TRACKS_MASK);
 set_action_activate("view_route", _show_tracks & ROUTES_MASK);
 
-/* Initialize our line styles. */
-update_gcs();
+route_menu_set_sensitive(FALSE);
 
-/* If we have a route, calculate the next point. */
-route_find_nearest_point();
+gps_show_info(&_gps->data);
+
+/* Connect signals. */
+g_signal_connect(G_OBJECT(_window), "key_press_event", G_CALLBACK(window_cb_key_press), NULL);
+g_signal_connect(G_OBJECT(_window), "key_release_event", G_CALLBACK(window_cb_key_release), NULL);
 
 gtk_idle_add((GSourceFunc)window_present, NULL);
 }
 
-GtkWidget *
-progress_dialog(const gchar *title, GtkWidget *progress)
+/******* XXX: Move these !! *******/
+
+gboolean
+gps_info_update(Gps *gps)
 {
-GtkWidget *dialog;
-
-dialog = gtk_dialog_new();
-gtk_window_set_title(GTK_WINDOW(dialog), title);
-gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(_window));
-gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
-gtk_window_set_default_size(GTK_WINDOW(dialog), 300, 100);
-gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), progress, TRUE, TRUE, 0);
-gtk_widget_show_all(dialog);
-return dialog;
+g_assert(gps);
+if (_gps_info)
+    gps_display_data(&gps->data);
+
+gps_display_data_speed(info_banner.speed, gps->data.speed);
+
+return FALSE;
 }
 
-void
-progress_dialog_remove(GtkWidget *dialog)
+gboolean
+gps_satellite_update(Gps *gps)
+{
+g_assert(gps);
+if (_satdetails_on)
+    gps_display_details(&gps->data);
+
+return FALSE;
+}
+
+gboolean
+gps_location_update(Gps *gps)
+{
+g_assert(gps);
+if (filter_check(&filter, &gps->data, &map_loc)==TRUE) {
+       if (track_add(_track, &_gps->data)) {
+               KEEP_DISPLAY_ON();
+               route_check_waypoint_announce(_route, &_gps->data);
+               route_autoroute_check(_route);
+       }
+       map_refresh_mark();
+}
+return FALSE;
+}
+
+/**
+ * Simple dialog to ask if we should try to reconnect to GPS
+ * returns TRUE or FALSE
+ */
+gboolean
+gps_retry_connection(Gps *gps, const gchar *error)
 {
-if (dialog)
-       gtk_widget_destroy(dialog);
+GtkWidget *confirm;
+gboolean r;
+
+g_assert(gps);
+confirm=hildon_note_new_confirmation(GTK_WINDOW(_window), _("Failed to connect to GPS receiver. Retry?"));
+r=(GTK_RESPONSE_OK==gtk_dialog_run(GTK_DIALOG(confirm))) ? TRUE : FALSE;
+gtk_widget_destroy(confirm);
+return r;
 }