#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;
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
*/
"<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'>"
" <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'/>"
" <menuitem action='route_clear'/>"
" </menu>"
" <menu action='poi'>"
-" <menuitem action='poi_search'/>"
" <menuitem action='poi_categories'/>"
+" <menuitem action='poi_search'/>"
+#if 0
" <separator/>"
" <menuitem action='poi_import'/>"
" <menuitem action='poi_export'/>"
-" <separator/>"
-" <menuitem action='poi_settings'/>"
+#endif
" </menu>"
" <menu action='view'>"
" <menuitem action='view_zoom_in'/>"
" <separator/>"
" <menuitem action='view_fullscreen'/>"
" <separator/>"
+" <menuitem action='view_toolbar'/>"
+" <separator/>"
" <menu action='view_items'>"
" <menuitem action='view_scale'/>"
" <menuitem action='view_route'/>"
" <menuitem action='goto_destination'/>"
" <menuitem action='goto_gps'/>"
" <separator/>"
-" <menuitem action='search_address'/>"
" <menuitem action='goto_latlon'/>"
" <menuitem action='goto_nearpoi'/>"
" <menuitem action='goto_nextway'/>"
" <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>"
#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) },
{"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 },
{"map_manager", NULL, N_("Manager..."), NULL, NULL, G_CALLBACK(menu_cb_mapman) },
{"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) },
- {"search_address", GTK_STOCK_FIND, N_("Address..."), NULL, NULL, G_CALLBACK(menu_cb_search_address) },
{"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);
#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},
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);
}
#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
}
/**
- * 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_mac)
- 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;
- gps_conn_set_state(RCVR_OFF);
- gps_conn_set_state(old_state);
- }
-}
-
+gtk_window_present(GTK_WINDOW(_window));
return FALSE;
}
#endif
}
-void
-mapper_init_variables(void)
+static GtkWidget *
+mapper_window_new(void)
+{
+GtkWidget *window;
+
+#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;
+}
+
+/**
+ * Set sensitivity of route menu items
+ */
+void
+route_menu_set_sensitive(gboolean s)
{
-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");
+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)
+{
+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;
}
/**
GError *error = NULL;
GtkWidget *hbox, *mapvbox, *label, *vbox_main;
GtkWidget *vbox;
-GtkWidget *sw;
GtkNotebook *notebook;
GtkToolItem *item;
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
-
-#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_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
-
+_window=mapper_window_new();
gtk_container_set_border_width (GTK_CONTAINER (_window), 0);
actions = gtk_action_group_new ("Actions");
gtk_ui_manager_insert_action_group (ui, actions, 0);
g_object_unref (actions);
-/* N810 has keyboard so set this up */
+/* 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));
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 = 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);
+gtk_toolbar_insert(GTK_TOOLBAR(_toolbar), item, -1);
/* Notebook with different views */
notebook = gtk_notebook_new();
/* Create and add widgets and supporting data. */
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);
-hildon_program_set_common_toolbar(_program, GTK_TOOLBAR(toolbar));
{
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);
_map_widget = map_new();
gtk_paned_add2(GTK_PANED(hbox), _map_widget);
+#ifndef WITH_DEVICE_770
+map_set_cache_size(256);
+#endif
+
/* GPS Tab */
vbox = gtk_vbox_new(FALSE, 0);
label = gtk_label_new("Gps");
-_gps_sat_view = gtk_gps_new(GTK_GPS_MODE_SKY, &_gps);
+_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);
+_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);
+_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);
+
/* Route Tab */
vbox=gtk_vbox_new(FALSE, 0);
label=gtk_label_new("Route");
-
-route_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_box_pack_start(vbox, sw, TRUE, TRUE, 0);
-gtk_container_add(GTK_CONTAINER(sw), route_tree_view);
-
-gtk_tree_selection_set_mode(gtk_tree_view_get_selection (GTK_TREE_VIEW(route_tree_view)), GTK_SELECTION_SINGLE);
-gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(route_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(route_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(route_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(route_tree_view), column);
-
+route_tree_view=mapper_tree_view_new(vbox);
#if 0
-g_signal_connect(G_OBJECT(route_tree), "row-activated", G_CALLBACK(route_waypoint_activated_cb), NULL);
+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);
+/* 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);
+
+#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();
-_last_spoken_phrase = g_strdup("");
memset(&_autoroute_data, 0, sizeof(_autoroute_data));
+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);
gtk_widget_show_all(GTK_WIDGET(vbox_main));
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);
set_action_activate("view_track", _show_tracks & TRACKS_MASK);
set_action_activate("view_route", _show_tracks & ROUTES_MASK);
+route_menu_set_sensitive(FALSE);
+
+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);
-/* If we have a route, calculate the next point. */
-route_find_nearest_point();
+gtk_idle_add((GSourceFunc)window_present, NULL);
+}
-gps_show_info();
+/******* XXX: Move these !! *******/
-gtk_idle_add((GSourceFunc)window_present, NULL);
+gboolean
+gps_info_update(Gps *gps)
+{
+g_assert(gps);
+if (_gps_info)
+ gps_display_data(&gps->data);
+
+gps_display_data_speed(info_banner.speed, gps->data.speed);
+
+return FALSE;
}
-GtkWidget *
-progress_dialog(const gchar *title, GtkWidget *progress)
+gboolean
+gps_satellite_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);
-#ifndef WITH_HILDON
-gtk_window_set_deletable(GTK_WINDOW(dialog), FALSE);
-#endif
-/* gtk_window_set_decorated(GTK_WINDOW(dialog), FALSE); */
-gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(title), TRUE, TRUE, 0);
-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 (_satdetails_on)
+ gps_display_details(&gps->data);
+
+return FALSE;
}
-void
-progress_dialog_remove(GtkWidget *dialog)
+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;
}