2 * Copyright (C) 2006, 2007 John Costigan.
4 * POI and GPS-Info code originally written by Cezary Jackiewicz.
6 * Default map data provided by http://www.openstreetmap.org/
8 * This file is part of Maemo Mapper.
10 * Maemo Mapper is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
15 * Maemo Mapper is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with Maemo Mapper. If not, see <http://www.gnu.org/licenses/>.
33 #include <dbus/dbus-glib.h>
35 #include <gconf/gconf-client.h>
39 # include <hildon/hildon-help.h>
40 # include <hildon/hildon-note.h>
41 # include <hildon/hildon-color-button.h>
42 # include <hildon/hildon-file-chooser-dialog.h>
43 # include <hildon/hildon-number-editor.h>
44 # include <hildon/hildon-banner.h>
46 # include <osso-helplib.h>
47 # include <hildon-widgets/hildon-note.h>
48 # include <hildon-widgets/hildon-color-button.h>
49 # include <hildon-widgets/hildon-file-chooser-dialog.h>
50 # include <hildon-widgets/hildon-number-editor.h>
51 # include <hildon-widgets/hildon-banner.h>
52 # include <hildon-widgets/hildon-input-mode-hint.h>
61 #include "gdk-pixbuf-rotate.h"
68 #define GCONF_KEY_PREFIX "/apps/maemo/maemo-mapper"
69 #define GCONF_KEY_GPS_RCVR_TYPE GCONF_KEY_PREFIX"/gps_rcvr_type"
70 #define GCONF_KEY_GPS_BT_MAC GCONF_KEY_PREFIX"/receiver_mac"
71 #define GCONF_KEY_GPS_GPSD_HOST GCONF_KEY_PREFIX"/gps_gpsd_host"
72 #define GCONF_KEY_GPS_GPSD_PORT GCONF_KEY_PREFIX"/gps_gpsd_port"
73 #define GCONF_KEY_GPS_FILE_PATH GCONF_KEY_PREFIX"/gps_file_path"
74 #define GCONF_KEY_AUTO_DOWNLOAD GCONF_KEY_PREFIX"/auto_download"
75 #define GCONF_KEY_AUTO_DOWNLOAD_PRECACHE \
76 GCONF_KEY_PREFIX"/auto_download_precache"
77 #define GCONF_KEY_CENTER_SENSITIVITY GCONF_KEY_PREFIX"/center_sensitivity"
78 #define GCONF_KEY_ENABLE_ANNOUNCE GCONF_KEY_PREFIX"/enable_announce"
79 #define GCONF_KEY_ANNOUNCE_NOTICE GCONF_KEY_PREFIX"/announce_notice"
80 #define GCONF_KEY_ROTATE_SENSITIVITY GCONF_KEY_PREFIX"/rotate_sensitivity"
81 #define GCONF_KEY_AC_MIN_SPEED GCONF_KEY_PREFIX"/autocenter_min_speed"
82 #define GCONF_KEY_ROTATE_DIR GCONF_KEY_PREFIX"/rotate_direction"
83 #define GCONF_KEY_DRAW_WIDTH GCONF_KEY_PREFIX"/draw_width"
84 #define GCONF_KEY_ENABLE_VOICE GCONF_KEY_PREFIX"/enable_voice"
85 #define GCONF_KEY_VOICE_SPEED GCONF_KEY_PREFIX"/voice_speed"
86 #define GCONF_KEY_VOICE_PITCH GCONF_KEY_PREFIX"/voice_pitch"
87 #define GCONF_KEY_FULLSCREEN GCONF_KEY_PREFIX"/fullscreen"
88 #define GCONF_KEY_UNITS GCONF_KEY_PREFIX"/units"
89 #define GCONF_KEY_SPEED_LIMIT_ON GCONF_KEY_PREFIX"/speed_limit_on"
90 #define GCONF_KEY_SPEED_LIMIT GCONF_KEY_PREFIX"/speed_limit"
91 #define GCONF_KEY_SPEED_LOCATION GCONF_KEY_PREFIX"/speed_location"
92 #define GCONF_KEY_UNBLANK_SIZE GCONF_KEY_PREFIX"/unblank_option"
93 #define GCONF_KEY_INFO_FONT_SIZE GCONF_KEY_PREFIX"/info_font_size"
95 #define GCONF_KEY_POI_DB GCONF_KEY_PREFIX"/poi_db"
96 #define GCONF_KEY_POI_ZOOM GCONF_KEY_PREFIX"/poi_zoom"
98 #define GCONF_KEY_AUTOCENTER_MODE GCONF_KEY_PREFIX"/autocenter_mode"
99 #define GCONF_KEY_AUTOCENTER_ROTATE GCONF_KEY_PREFIX"/autocenter_rotate"
100 #define GCONF_KEY_LEAD_AMOUNT GCONF_KEY_PREFIX"/lead_amount"
101 #define GCONF_KEY_LEAD_IS_FIXED GCONF_KEY_PREFIX"/lead_is_fixed"
102 #define GCONF_KEY_LAST_LAT GCONF_KEY_PREFIX"/last_latitude"
103 #define GCONF_KEY_LAST_LON GCONF_KEY_PREFIX"/last_longitude"
104 #define GCONF_KEY_LAST_ALT GCONF_KEY_PREFIX"/last_altitude"
105 #define GCONF_KEY_LAST_SPEED GCONF_KEY_PREFIX"/last_speed"
106 #define GCONF_KEY_LAST_HEADING GCONF_KEY_PREFIX"/last_heading"
107 #define GCONF_KEY_LAST_TIME GCONF_KEY_PREFIX"/last_timestamp"
108 #define GCONF_KEY_CENTER_LAT GCONF_KEY_PREFIX"/center_latitude"
109 #define GCONF_KEY_CENTER_LON GCONF_KEY_PREFIX"/center_longitude"
110 #define GCONF_KEY_CENTER_ANGLE GCONF_KEY_PREFIX"/center_angle"
111 #define GCONF_KEY_MAP_CORRECTION_UNITX GCONF_KEY_PREFIX"/map_correction_unitx"
112 #define GCONF_KEY_MAP_CORRECTION_UNITY GCONF_KEY_PREFIX"/map_correction_unity"
113 #define GCONF_KEY_ZOOM GCONF_KEY_PREFIX"/zoom"
114 #define GCONF_KEY_ROUTEDIR GCONF_KEY_PREFIX"/route_directory"
115 #define GCONF_KEY_TRACKFILE GCONF_KEY_PREFIX"/track_file"
116 #define GCONF_KEY_SHOWZOOMLEVEL GCONF_KEY_PREFIX"/show_zoomlevel"
117 #define GCONF_KEY_SHOWSCALE GCONF_KEY_PREFIX"/show_scale"
118 #define GCONF_KEY_SHOWCOMPROSE GCONF_KEY_PREFIX"/show_comprose"
119 #define GCONF_KEY_SHOWTRACKS GCONF_KEY_PREFIX"/show_tracks"
120 #define GCONF_KEY_SHOWROUTES GCONF_KEY_PREFIX"/show_routes"
121 #define GCONF_KEY_SHOWVELVEC GCONF_KEY_PREFIX"/show_velocity_vector"
122 #define GCONF_KEY_SHOWPOIS GCONF_KEY_PREFIX"/show_poi"
123 #define GCONF_KEY_ENABLE_GPS GCONF_KEY_PREFIX"/enable_gps"
124 #define GCONF_KEY_ENABLE_TRACKING GCONF_KEY_PREFIX"/enable_tracking"
125 #define GCONF_KEY_ROUTE_LOCATIONS GCONF_KEY_PREFIX"/route_locations"
126 #define GCONF_KEY_REPOSITORIES GCONF_KEY_PREFIX"/repositories"
127 #define GCONF_KEY_CURRREPO GCONF_KEY_PREFIX"/curr_repo"
128 #define GCONF_KEY_GPS_INFO GCONF_KEY_PREFIX"/gps_info"
129 #define GCONF_KEY_ROUTE_DL_URL GCONF_KEY_PREFIX"/route_dl_url"
130 #define GCONF_KEY_ROUTE_DL_RADIUS GCONF_KEY_PREFIX"/route_dl_radius"
131 #define GCONF_KEY_POI_DL_URL GCONF_KEY_PREFIX"/poi_dl_url"
132 #define GCONF_KEY_DEG_FORMAT GCONF_KEY_PREFIX"/deg_format"
135 typedef struct _ScanInfo ScanInfo;
137 GtkWidget *settings_dialog;
138 GtkWidget *txt_gps_bt_mac;
139 GtkWidget *scan_dialog;
143 DBusGConnection *bus;
144 DBusGProxy *req_proxy;
145 DBusGProxy *sig_proxy;
148 typedef struct _KeysDialogInfo KeysDialogInfo;
149 struct _KeysDialogInfo {
150 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
153 typedef struct _ColorsDialogInfo ColorsDialogInfo;
154 struct _ColorsDialogInfo {
155 GtkWidget *col[COLORABLE_ENUM_COUNT];
160 * Save all configuration data to GCONF.
166 GConfClient *gconf_client;
168 printf("%s()\n", __PRETTY_FUNCTION__);
170 /* Initialize settings_dir. */
171 settings_dir = gnome_vfs_expand_initial_tilde(CONFIG_DIR_NAME);
172 g_mkdir_with_parents(settings_dir, 0700);
174 /* SAVE ALL GCONF SETTINGS. */
176 gconf_client = gconf_client_get_default();
180 _("Failed to initialize GConf. Settings were not saved."));
184 /* Save GPS Receiver Type. */
185 gconf_client_set_string(gconf_client,
186 GCONF_KEY_GPS_RCVR_TYPE,
187 GPS_RCVR_ENUM_TEXT[_gri.type], NULL);
189 /* Save Bluetooth Receiver MAC. */
191 gconf_client_set_string(gconf_client,
192 GCONF_KEY_GPS_BT_MAC, _gri.bt_mac, NULL);
194 gconf_client_unset(gconf_client,
195 GCONF_KEY_GPS_BT_MAC, NULL);
197 /* Save GPSD Host. */
199 gconf_client_set_string(gconf_client,
200 GCONF_KEY_GPS_GPSD_HOST, _gri.gpsd_host, NULL);
202 gconf_client_unset(gconf_client,
203 GCONF_KEY_GPS_GPSD_HOST, NULL);
205 /* Save GPSD Port. */
206 gconf_client_set_int(gconf_client,
207 GCONF_KEY_GPS_GPSD_PORT, _gri.gpsd_port, NULL);
209 /* Save File Path. */
211 gconf_client_set_string(gconf_client,
212 GCONF_KEY_GPS_FILE_PATH, _gri.file_path, NULL);
214 gconf_client_unset(gconf_client,
215 GCONF_KEY_GPS_FILE_PATH, NULL);
217 /* Save Auto-Download. */
218 gconf_client_set_bool(gconf_client,
219 GCONF_KEY_AUTO_DOWNLOAD, _auto_download, NULL);
221 /* Save Auto-Download Pre-cache. */
222 gconf_client_set_int(gconf_client,
223 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, _auto_download_precache, NULL);
225 /* Save Auto-Center Sensitivity. */
226 gconf_client_set_int(gconf_client,
227 GCONF_KEY_CENTER_SENSITIVITY, _center_ratio, NULL);
229 /* Save Auto-Center Lead Amount. */
230 gconf_client_set_int(gconf_client,
231 GCONF_KEY_LEAD_AMOUNT, _lead_ratio, NULL);
233 /* Save Auto-Center Lead Fixed flag. */
234 gconf_client_set_bool(gconf_client,
235 GCONF_KEY_LEAD_IS_FIXED, _lead_is_fixed, NULL);
237 /* Save Auto-Rotate Sensitivity. */
238 gconf_client_set_int(gconf_client,
239 GCONF_KEY_ROTATE_SENSITIVITY, _rotate_sens, NULL);
241 /* Save Auto-Center/Rotate Minimum Speed. */
242 gconf_client_set_int(gconf_client,
243 GCONF_KEY_AC_MIN_SPEED, _ac_min_speed, NULL);
245 /* Save Auto-Rotate Sensitivity. */
246 gconf_client_set_string(gconf_client,
247 GCONF_KEY_ROTATE_DIR, ROTATE_DIR_ENUM_TEXT[_rotate_dir], NULL);
249 /* Save Draw Line Width. */
250 gconf_client_set_int(gconf_client,
251 GCONF_KEY_DRAW_WIDTH, _draw_width, NULL);
253 /* Save Announce Flag. */
254 gconf_client_set_bool(gconf_client,
255 GCONF_KEY_ENABLE_ANNOUNCE, _enable_announce, NULL);
257 /* Save Announce Advance Notice Ratio. */
258 gconf_client_set_int(gconf_client,
259 GCONF_KEY_ANNOUNCE_NOTICE, _announce_notice_ratio, NULL);
261 /* Save Enable Voice flag. */
262 gconf_client_set_bool(gconf_client,
263 GCONF_KEY_ENABLE_VOICE, _enable_voice, NULL);
265 /* Save fullscreen flag. */
266 gconf_client_set_bool(gconf_client,
267 GCONF_KEY_FULLSCREEN, _fullscreen, NULL);
270 gconf_client_set_string(gconf_client,
271 GCONF_KEY_UNITS, UNITS_ENUM_TEXT[_units], NULL);
273 /* Save Custom Key Actions. */
276 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
277 gconf_client_set_string(gconf_client,
279 CUSTOM_ACTION_ENUM_TEXT[_action[i]], NULL);
282 /* Save Deg Format. */
283 gconf_client_set_string(gconf_client,
284 GCONF_KEY_DEG_FORMAT, DEG_FORMAT_ENUM_TEXT[_degformat], NULL);
286 /* Save Speed Limit On flag. */
287 gconf_client_set_bool(gconf_client,
288 GCONF_KEY_SPEED_LIMIT_ON, _speed_limit_on, NULL);
290 /* Save Speed Limit. */
291 gconf_client_set_int(gconf_client,
292 GCONF_KEY_SPEED_LIMIT, _speed_limit, NULL);
294 /* Save Speed Location. */
295 gconf_client_set_string(gconf_client,
296 GCONF_KEY_SPEED_LOCATION,
297 SPEED_LOCATION_ENUM_TEXT[_speed_location], NULL);
299 /* Save Info Font Size. */
300 gconf_client_set_string(gconf_client,
301 GCONF_KEY_INFO_FONT_SIZE,
302 INFO_FONT_ENUM_TEXT[_info_font_size], NULL);
304 /* Save Unblank Option. */
305 gconf_client_set_string(gconf_client,
306 GCONF_KEY_UNBLANK_SIZE,
307 UNBLANK_ENUM_TEXT[_unblank_option], NULL);
309 /* Save last saved latitude. */
310 gconf_client_set_float(gconf_client,
311 GCONF_KEY_LAST_LAT, _gps.lat, NULL);
313 /* Save last saved longitude. */
314 gconf_client_set_float(gconf_client,
315 GCONF_KEY_LAST_LON, _gps.lon, NULL);
317 /* Save last saved altitude. */
318 gconf_client_set_int(gconf_client,
319 GCONF_KEY_LAST_ALT, _pos.altitude, NULL);
321 /* Save last saved speed. */
322 gconf_client_set_float(gconf_client,
323 GCONF_KEY_LAST_SPEED, _gps.speed, NULL);
325 /* Save last saved heading. */
326 gconf_client_set_float(gconf_client,
327 GCONF_KEY_LAST_HEADING, _gps.heading, NULL);
329 /* Save last saved timestamp. */
330 gconf_client_set_float(gconf_client,
331 GCONF_KEY_LAST_TIME, _pos.time, NULL);
333 /* Save last center point. */
335 gdouble center_lat, center_lon;
336 unit2latlon(_center.unitx, _center.unity, center_lat, center_lon);
338 /* Save last center latitude. */
339 gconf_client_set_float(gconf_client,
340 GCONF_KEY_CENTER_LAT, center_lat, NULL);
342 /* Save last center longitude. */
343 gconf_client_set_float(gconf_client,
344 GCONF_KEY_CENTER_LON, center_lon, NULL);
346 /* Save last view angle. */
347 gconf_client_set_int(gconf_client,
348 GCONF_KEY_CENTER_ANGLE, _map_rotate_angle, NULL);
351 /* Save map correction. */
352 gconf_client_set_int(gconf_client,
353 GCONF_KEY_MAP_CORRECTION_UNITX, _map_correction_unitx, NULL);
354 gconf_client_set_int(gconf_client,
355 GCONF_KEY_MAP_CORRECTION_UNITY, _map_correction_unity, NULL);
357 /* Save last Zoom Level. */
358 gconf_client_set_int(gconf_client,
359 GCONF_KEY_ZOOM, _zoom, NULL);
361 /* Save Route Directory. */
363 gconf_client_set_string(gconf_client,
364 GCONF_KEY_ROUTEDIR, _route_dir_uri, NULL);
366 /* Save the repositories. */
368 GList *curr = _repo_list;
369 GSList *temp_list = NULL;
370 gint curr_repo_index = 0;
372 for(curr = _repo_list; curr != NULL; curr = curr->next)
374 /* Build from each part of a repo, delimited by newline characters:
382 * If layer_level > 0, have additional fields:
384 * 8. layer_refresh_interval
386 RepoData *rd = curr->data;
387 gchar buffer[BUFFER_SIZE];
390 if (!rd->layer_level)
391 snprintf(buffer, sizeof(buffer),
392 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
404 snprintf(buffer, sizeof(buffer),
405 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
417 rd->layer_refresh_interval
419 temp_list = g_slist_append(temp_list, g_strdup(buffer));
421 gconf_client_set_int(gconf_client,
422 GCONF_KEY_CURRREPO, curr_repo_index, NULL);
427 gconf_client_set_list(gconf_client,
428 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, temp_list, NULL);
431 /* Save Last Track File. */
433 gconf_client_set_string(gconf_client,
434 GCONF_KEY_TRACKFILE, _track_file_uri, NULL);
436 /* Save Auto-Center Mode. */
437 gconf_client_set_int(gconf_client,
438 GCONF_KEY_AUTOCENTER_MODE, _center_mode, NULL);
440 /* Save Auto-Center Rotate Flag. */
441 gconf_client_set_bool(gconf_client,
442 GCONF_KEY_AUTOCENTER_ROTATE, _center_rotate, NULL);
444 /* Save Show Zoom Level flag. */
445 gconf_client_set_bool(gconf_client,
446 GCONF_KEY_SHOWZOOMLEVEL, _show_zoomlevel, NULL);
448 /* Save Show Scale flag. */
449 gconf_client_set_bool(gconf_client,
450 GCONF_KEY_SHOWSCALE, _show_scale, NULL);
452 /* Save Show Compass Rose flag. */
453 gconf_client_set_bool(gconf_client,
454 GCONF_KEY_SHOWCOMPROSE, _show_comprose, NULL);
456 /* Save Show Tracks flag. */
457 gconf_client_set_bool(gconf_client,
458 GCONF_KEY_SHOWTRACKS, _show_paths & TRACKS_MASK, NULL);
460 /* Save Show Routes flag. */
461 gconf_client_set_bool(gconf_client,
462 GCONF_KEY_SHOWROUTES, _show_paths & ROUTES_MASK, NULL);
464 /* Save Show Velocity Vector flag. */
465 gconf_client_set_bool(gconf_client,
466 GCONF_KEY_SHOWVELVEC, _show_velvec, NULL);
468 /* Save Show POIs flag. */
469 gconf_client_set_bool(gconf_client,
470 GCONF_KEY_SHOWPOIS, _show_poi, NULL);
472 /* Save Enable GPS flag. */
473 gconf_client_set_bool(gconf_client,
474 GCONF_KEY_ENABLE_GPS, _enable_gps, NULL);
476 /* Save Enable Tracking flag. */
477 gconf_client_set_bool(gconf_client,
478 GCONF_KEY_ENABLE_TRACKING, _enable_tracking, NULL);
480 /* Save Route Locations. */
481 gconf_client_set_list(gconf_client,
482 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, _loc_list, NULL);
484 /* Save GPS Info flag. */
485 gconf_client_set_bool(gconf_client,
486 GCONF_KEY_GPS_INFO, _gps_info, NULL);
488 /* Save Route Download URL Format. */
489 gconf_client_set_string(gconf_client,
490 GCONF_KEY_ROUTE_DL_URL, _route_dl_url, NULL);
492 /* Save Route Download Radius. */
493 gconf_client_set_int(gconf_client,
494 GCONF_KEY_ROUTE_DL_RADIUS, _route_dl_radius, NULL);
496 /* Save POI Download URL Format. */
497 gconf_client_set_string(gconf_client,
498 GCONF_KEY_POI_DL_URL, _poi_dl_url, NULL);
503 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
505 snprintf(buffer, sizeof(buffer), "#%02x%02x%02x",
507 _color[i].green >> 8,
508 _color[i].blue >> 8);
509 gconf_client_set_string(gconf_client,
510 COLORABLE_GCONF[i], buffer, NULL);
514 /* Save POI database. */
516 gconf_client_set_string(gconf_client,
517 GCONF_KEY_POI_DB, _poi_db_filename, NULL);
519 gconf_client_unset(gconf_client, GCONF_KEY_POI_DB, NULL);
521 /* Save Show POI below zoom. */
522 gconf_client_set_int(gconf_client,
523 GCONF_KEY_POI_ZOOM, _poi_zoom, NULL);
525 gconf_client_clear_cache(gconf_client);
526 g_object_unref(gconf_client);
527 g_free(settings_dir);
529 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
533 scan_cb_dev_found(DBusGProxy *sig_proxy, const gchar *bda,
534 const gchar *name, gpointer *class, guchar rssi, gint coff,
538 printf("%s()\n", __PRETTY_FUNCTION__);
539 gtk_list_store_append(scan_info->store, &iter);
540 gtk_list_store_set(scan_info->store, &iter,
544 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
548 scan_cb_search_complete(DBusGProxy *sig_proxy, ScanInfo *scan_info)
550 printf("%s()\n", __PRETTY_FUNCTION__);
551 gtk_widget_destroy(scan_info->banner);
552 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_DEV_FOUND_SIG,
553 G_CALLBACK(scan_cb_dev_found), scan_info);
554 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_SEARCH_COMPLETE_SIG,
555 G_CALLBACK(scan_cb_search_complete), scan_info);
556 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
560 scan_start_search(ScanInfo *scan_info)
562 GError *error = NULL;
563 printf("%s()\n", __PRETTY_FUNCTION__);
565 /* Initialize D-Bus. */
566 if(NULL == (scan_info->bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error)))
568 g_printerr("Failed to open connection to D-Bus: %s.\n",
573 if(NULL == (scan_info->req_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
576 BTSEARCH_REQ_INTERFACE)))
578 g_printerr("Failed to create D-Bus request proxy for btsearch.");
582 if(NULL == (scan_info->sig_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
585 BTSEARCH_SIG_INTERFACE)))
587 g_printerr("Failed to create D-Bus signal proxy for btsearch.");
591 dbus_g_object_register_marshaller(
592 g_cclosure_user_marshal_VOID__STRING_STRING_POINTER_UCHAR_UINT,
596 DBUS_TYPE_G_UCHAR_ARRAY,
601 dbus_g_proxy_add_signal(scan_info->sig_proxy,
602 BTSEARCH_DEV_FOUND_SIG,
605 DBUS_TYPE_G_UCHAR_ARRAY,
609 dbus_g_proxy_connect_signal(scan_info->sig_proxy, BTSEARCH_DEV_FOUND_SIG,
610 G_CALLBACK(scan_cb_dev_found), scan_info, NULL);
612 dbus_g_proxy_add_signal(scan_info->sig_proxy,
613 BTSEARCH_SEARCH_COMPLETE_SIG,
615 dbus_g_proxy_connect_signal(scan_info->sig_proxy,
616 BTSEARCH_SEARCH_COMPLETE_SIG,
617 G_CALLBACK(scan_cb_search_complete), scan_info, NULL);
620 if(!dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_START_SEARCH_REQ,
621 &error, G_TYPE_INVALID, G_TYPE_INVALID))
623 if(error->domain == DBUS_GERROR
624 && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
626 g_printerr("Caught remote method exception %s: %s",
627 dbus_g_error_get_name(error),
631 g_printerr("Error: %s\n", error->message);
635 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
640 * Scan for all bluetooth devices. This method can take a few seconds,
641 * during which the UI will freeze.
644 scan_bluetooth(GtkWidget *widget, ScanInfo *scan_info)
646 GError *error = NULL;
647 GtkWidget *dialog = NULL;
648 GtkWidget *lst_devices = NULL;
649 GtkTreeViewColumn *column = NULL;
650 GtkCellRenderer *renderer = NULL;
651 printf("%s()\n", __PRETTY_FUNCTION__);
653 dialog = gtk_dialog_new_with_buttons(_("Select Bluetooth Device"),
654 GTK_WINDOW(scan_info->settings_dialog), GTK_DIALOG_MODAL,
655 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
656 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
659 scan_info->scan_dialog = dialog;
661 scan_info->store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
663 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
665 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
666 lst_devices = gtk_tree_view_new_with_model(
667 GTK_TREE_MODEL(scan_info->store)), TRUE, TRUE, 0);
669 g_object_unref(G_OBJECT(scan_info->store));
671 gtk_tree_selection_set_mode(
672 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
673 GTK_SELECTION_SINGLE);
674 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(lst_devices), TRUE);
676 renderer = gtk_cell_renderer_text_new();
677 column = gtk_tree_view_column_new_with_attributes(
678 _("MAC"), renderer, "text", 0, NULL);
679 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
681 renderer = gtk_cell_renderer_text_new();
682 column = gtk_tree_view_column_new_with_attributes(
683 _("Description"), renderer, "text", 1, NULL);
684 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
686 gtk_widget_show_all(dialog);
688 scan_info->banner = hildon_banner_show_animation(dialog, NULL,
689 _("Scanning for Bluetooth Devices"));
691 if(scan_start_search(scan_info))
693 gtk_widget_destroy(scan_info->banner);
694 popup_error(scan_info->settings_dialog,
695 _("An error occurred while attempting to scan for "
696 "bluetooth devices."));
698 else while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
701 if(gtk_tree_selection_get_selected(
702 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
706 gtk_tree_model_get(GTK_TREE_MODEL(scan_info->store),
708 gtk_entry_set_text(GTK_ENTRY(scan_info->txt_gps_bt_mac), mac);
713 _("Please select a bluetooth device from the list."));
716 gtk_widget_destroy(dialog);
718 /* Clean up D-Bus. */
719 if(scan_info->req_proxy)
721 dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_STOP_SEARCH_REQ,
722 &error, G_TYPE_INVALID, G_TYPE_INVALID);
723 g_object_unref(scan_info->req_proxy);
724 scan_info->req_proxy = NULL;
726 if(scan_info->sig_proxy)
728 g_object_unref(scan_info->sig_proxy);
729 scan_info->sig_proxy = NULL;
733 dbus_g_connection_unref(scan_info->bus);
734 scan_info->bus = NULL;
737 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
742 settings_dialog_browse_forfile(GtkWidget *widget, BrowseInfo *browse_info)
745 printf("%s()\n", __PRETTY_FUNCTION__);
748 hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),
749 GTK_FILE_CHOOSER_ACTION_OPEN));
751 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
752 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
753 gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
755 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(dialog)))
757 gchar *filename = gtk_file_chooser_get_filename(
758 GTK_FILE_CHOOSER(dialog));
759 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
763 gtk_widget_destroy(dialog);
765 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
770 settings_dialog_hardkeys_reset(GtkWidget *widget, KeysDialogInfo *cdi)
773 printf("%s()\n", __PRETTY_FUNCTION__);
775 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
776 _("Reset all hardware keys to their original defaults?"));
778 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
781 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
782 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
783 CUSTOM_KEY_DEFAULT[i]);
785 gtk_widget_destroy(confirm);
787 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
792 settings_dialog_hardkeys(GtkWidget *widget, GtkWidget *parent)
795 static GtkWidget *dialog = NULL;
796 static GtkWidget *table = NULL;
797 static GtkWidget *label = NULL;
798 static KeysDialogInfo bdi;
799 static GtkWidget *btn_defaults = NULL;
800 printf("%s()\n", __PRETTY_FUNCTION__);
804 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
805 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
806 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
809 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
810 btn_defaults = gtk_button_new_with_label(_("Reset...")));
811 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
812 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
814 gtk_dialog_add_button(GTK_DIALOG(dialog),
815 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
817 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
818 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
819 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
822 gtk_table_attach(GTK_TABLE(table),
823 label = gtk_label_new(""),
824 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
825 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
826 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
827 gtk_table_attach(GTK_TABLE(table),
828 bdi.cmb[i] = gtk_combo_box_new_text(),
829 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
830 for(j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
831 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
832 CUSTOM_ACTION_ENUM_TEXT[j]);
836 /* Initialize contents of the combo boxes. */
837 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
838 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
840 gtk_widget_show_all(dialog);
843 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
845 /* Check for duplicates. */
846 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
849 for(j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++)
851 if(gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))
852 == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j])))
855 gchar *buffer = g_strdup_printf("%s:\n %s\n%s",
856 _("The following action is mapped to multiple keys"),
857 CUSTOM_ACTION_ENUM_TEXT[gtk_combo_box_get_active(
858 GTK_COMBO_BOX(bdi.cmb[i]))],
860 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
863 if(GTK_RESPONSE_OK != gtk_dialog_run(GTK_DIALOG(confirm)))
865 gtk_widget_destroy(confirm);
868 gtk_widget_destroy(confirm);
872 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
873 _action[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
877 gtk_widget_hide(dialog);
879 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
884 settings_dialog_colors_reset(GtkWidget *widget, ColorsDialogInfo *cdi)
887 printf("%s()\n", __PRETTY_FUNCTION__);
889 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
890 _("Reset all colors to their original defaults?"));
892 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
895 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
897 hildon_color_button_set_color(
898 HILDON_COLOR_BUTTON(cdi->col[i]),
899 &COLORABLE_DEFAULT[i]);
902 gtk_widget_destroy(confirm);
904 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
909 settings_dialog_colors(GtkWidget *widget, GtkWidget *parent)
911 static GtkWidget *dialog = NULL;
912 static GtkWidget *table = NULL;
913 static GtkWidget *label = NULL;
914 static GtkWidget *btn_defaults = NULL;
915 static ColorsDialogInfo cdi;
916 printf("%s()\n", __PRETTY_FUNCTION__);
920 dialog = gtk_dialog_new_with_buttons(_("Colors"),
921 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
922 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
925 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
926 btn_defaults = gtk_button_new_with_label(_("Reset...")));
927 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
928 G_CALLBACK(settings_dialog_colors_reset), &cdi);
930 gtk_dialog_add_button(GTK_DIALOG(dialog),
931 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
933 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
934 table = gtk_table_new(4, 3, FALSE), TRUE, TRUE, 0);
937 gtk_table_attach(GTK_TABLE(table),
938 label = gtk_label_new(_("GPS")),
939 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
940 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
941 gtk_table_attach(GTK_TABLE(table),
942 cdi.col[COLORABLE_MARK] = hildon_color_button_new(),
943 1, 2, 0, 1, 0, 0, 2, 4);
944 gtk_table_attach(GTK_TABLE(table),
945 cdi.col[COLORABLE_MARK_VELOCITY] = hildon_color_button_new(),
946 2, 3, 0, 1, 0, 0, 2, 4);
947 gtk_table_attach(GTK_TABLE(table),
948 cdi.col[COLORABLE_MARK_OLD] = hildon_color_button_new(),
949 3, 4, 0, 1, 0, 0, 2, 4);
952 gtk_table_attach(GTK_TABLE(table),
953 label = gtk_label_new(_("Track")),
954 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
955 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
956 gtk_table_attach(GTK_TABLE(table),
957 cdi.col[COLORABLE_TRACK] = hildon_color_button_new(),
958 1, 2, 1, 2, 0, 0, 2, 4);
959 gtk_table_attach(GTK_TABLE(table),
960 cdi.col[COLORABLE_TRACK_MARK] = hildon_color_button_new(),
961 2, 3, 1, 2, 0, 0, 2, 4);
962 gtk_table_attach(GTK_TABLE(table),
963 cdi.col[COLORABLE_TRACK_BREAK] = hildon_color_button_new(),
964 3, 4, 1, 2, 0, 0, 2, 4);
967 gtk_table_attach(GTK_TABLE(table),
968 label = gtk_label_new(_("Route")),
969 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
970 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
971 gtk_table_attach(GTK_TABLE(table),
972 cdi.col[COLORABLE_ROUTE] = hildon_color_button_new(),
973 1, 2, 2, 3, 0, 0, 2, 4);
974 gtk_table_attach(GTK_TABLE(table),
975 cdi.col[COLORABLE_ROUTE_WAY] = hildon_color_button_new(),
976 2, 3, 2, 3, 0, 0, 2, 4);
977 gtk_table_attach(GTK_TABLE(table),
978 cdi.col[COLORABLE_ROUTE_BREAK] = hildon_color_button_new(),
979 3, 4, 2, 3, 0, 0, 2, 4);
982 gtk_table_attach(GTK_TABLE(table),
983 label = gtk_label_new(_("POI")),
984 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
985 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
986 gtk_table_attach(GTK_TABLE(table),
987 cdi.col[COLORABLE_POI] = hildon_color_button_new(),
988 1, 2, 3, 4, 0, 0, 2, 4);
991 /* Initialize GPS. */
992 hildon_color_button_set_color(
993 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
994 &_color[COLORABLE_MARK]);
995 hildon_color_button_set_color(
996 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
997 &_color[COLORABLE_MARK_VELOCITY]);
998 hildon_color_button_set_color(
999 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1000 &_color[COLORABLE_MARK_OLD]);
1002 /* Initialize Track. */
1003 hildon_color_button_set_color(
1004 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1005 &_color[COLORABLE_TRACK]);
1006 hildon_color_button_set_color(
1007 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1008 &_color[COLORABLE_TRACK_MARK]);
1009 hildon_color_button_set_color(
1010 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1011 &_color[COLORABLE_TRACK_BREAK]);
1013 /* Initialize Route. */
1014 hildon_color_button_set_color(
1015 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1016 &_color[COLORABLE_ROUTE]);
1017 hildon_color_button_set_color(
1018 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1019 &_color[COLORABLE_ROUTE_WAY]);
1020 hildon_color_button_set_color(
1021 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1022 &_color[COLORABLE_ROUTE_BREAK]);
1024 /* Initialize POI. */
1025 hildon_color_button_set_color(
1026 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1027 &_color[COLORABLE_POI]);
1029 gtk_widget_show_all(dialog);
1031 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1034 hildon_color_button_get_color(
1035 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
1036 &_color[COLORABLE_MARK]);
1038 hildon_color_button_get_color(
1039 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
1040 &_color[COLORABLE_MARK_VELOCITY]);
1042 hildon_color_button_get_color(
1043 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1044 &_color[COLORABLE_MARK_OLD]);
1046 hildon_color_button_get_color(
1047 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1048 &_color[COLORABLE_TRACK]);
1050 hildon_color_button_get_color(
1051 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1052 &_color[COLORABLE_TRACK_MARK]);
1054 hildon_color_button_get_color(
1055 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1056 &_color[COLORABLE_TRACK_BREAK]);
1058 hildon_color_button_get_color(
1059 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1060 &_color[COLORABLE_ROUTE]);
1062 hildon_color_button_get_color(
1063 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1064 &_color[COLORABLE_ROUTE_WAY]);
1066 hildon_color_button_get_color(
1067 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1068 &_color[COLORABLE_ROUTE_BREAK]);
1070 hildon_color_button_get_color(
1071 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1072 &_color[COLORABLE_POI]);
1076 color = hildon_color_button_get_color(
1077 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]));
1078 _color[COLORABLE_MARK] = *color;
1080 color = hildon_color_button_get_color(
1081 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]));
1082 _color[COLORABLE_MARK_VELOCITY] = *color;
1084 color = hildon_color_button_get_color(
1085 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]));
1086 _color[COLORABLE_MARK_OLD] = *color;
1088 color = hildon_color_button_get_color(
1089 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]));
1090 _color[COLORABLE_TRACK] = *color;
1092 color = hildon_color_button_get_color(
1093 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]));
1094 _color[COLORABLE_TRACK_MARK] = *color;
1096 color = hildon_color_button_get_color(
1097 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]));
1098 _color[COLORABLE_TRACK_BREAK] = *color;
1100 color = hildon_color_button_get_color(
1101 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]));
1102 _color[COLORABLE_ROUTE] = *color;
1104 color = hildon_color_button_get_color(
1105 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]));
1106 _color[COLORABLE_ROUTE_WAY] = *color;
1108 color = hildon_color_button_get_color(
1109 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]));
1110 _color[COLORABLE_ROUTE_BREAK] = *color;
1112 color = hildon_color_button_get_color(
1113 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]));
1114 _color[COLORABLE_POI] = *color;
1124 gtk_widget_hide(dialog);
1126 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1131 * Bring up the Settings dialog. Return TRUE if and only if the recever
1132 * information has changed (MAC or channel).
1137 static GtkWidget *dialog = NULL;
1138 static GtkWidget *notebook = NULL;
1139 static GtkWidget *table = NULL;
1140 static GtkWidget *hbox = NULL;
1141 static GtkWidget *label = NULL;
1142 static GtkWidget *rad_gps_bt = NULL;
1143 static GtkWidget *rad_gps_gpsd = NULL;
1144 static GtkWidget *rad_gps_file = NULL;
1145 static GtkWidget *txt_gps_bt_mac = NULL;
1146 static GtkWidget *txt_gps_gpsd_host = NULL;
1147 static GtkWidget *num_gps_gpsd_port = NULL;
1148 static GtkWidget *txt_gps_file_path = NULL;
1149 static GtkWidget *num_center_ratio = NULL;
1150 static GtkWidget *num_lead_ratio = NULL;
1151 static GtkWidget *chk_lead_is_fixed = NULL;
1152 static GtkWidget *num_rotate_sens = NULL;
1153 static GtkWidget *cmb_rotate_dir = NULL;
1154 static GtkWidget *num_ac_min_speed = NULL;
1155 static GtkWidget *num_announce_notice = NULL;
1156 static GtkWidget *chk_enable_voice = NULL;
1157 static GtkWidget *chk_enable_announce = NULL;
1158 static GtkWidget *num_draw_width = NULL;
1159 static GtkWidget *cmb_units = NULL;
1160 static GtkWidget *cmb_degformat = NULL;
1161 static GtkWidget *btn_scan = NULL;
1162 static GtkWidget *btn_browse_gps = NULL;
1163 static GtkWidget *btn_buttons = NULL;
1164 static GtkWidget *btn_colors = NULL;
1166 static GtkWidget *txt_poi_db = NULL;
1167 static GtkWidget *btn_browse_poi = NULL;
1168 static GtkWidget *num_poi_zoom = NULL;
1169 static GtkWidget *num_auto_download_precache = NULL;
1170 static GtkWidget *chk_speed_limit_on = NULL;
1171 static GtkWidget *num_speed = NULL;
1172 static GtkWidget *cmb_speed_location = NULL;
1173 static GtkWidget *cmb_unblank_option = NULL;
1174 static GtkWidget *cmb_info_font_size = NULL;
1176 static BrowseInfo poi_browse_info = {0, 0};
1177 static BrowseInfo gps_file_browse_info = {0, 0};
1178 static ScanInfo scan_info = {0};
1179 gboolean rcvr_changed = FALSE;
1181 printf("%s()\n", __PRETTY_FUNCTION__);
1185 dialog = gtk_dialog_new_with_buttons(_("Settings"),
1186 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
1187 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1190 /* Enable the help button. */
1192 hildon_help_dialog_help_enable(
1194 ossohelp_dialog_help_enable(
1196 GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
1198 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1199 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
1201 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1202 btn_colors = gtk_button_new_with_label(_("Colors...")));
1204 gtk_dialog_add_button(GTK_DIALOG(dialog),
1205 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1207 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1208 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
1210 /* Receiver page. */
1211 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1212 table = gtk_table_new(3, 4, FALSE),
1213 label = gtk_label_new(_("GPS")));
1215 /* Receiver MAC Address. */
1216 gtk_table_attach(GTK_TABLE(table),
1217 rad_gps_bt = gtk_radio_button_new_with_label(
1218 NULL, _("Bluetooth")),
1219 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1220 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1221 gtk_table_attach(GTK_TABLE(table),
1222 hbox = gtk_hbox_new(FALSE, 4),
1223 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1224 gtk_box_pack_start(GTK_BOX(hbox),
1225 txt_gps_bt_mac = gtk_entry_new(),
1227 #ifdef MAEMO_CHANGES
1229 g_object_set(G_OBJECT(txt_gps_bt_mac), "hildon-input-mode",
1230 HILDON_GTK_INPUT_MODE_FULL, NULL);
1232 g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
1235 gtk_box_pack_start(GTK_BOX(hbox),
1236 btn_scan = gtk_button_new_with_label(_("Scan...")),
1238 #ifndef HAVE_LIBGPSBT
1239 gtk_widget_set_sensitive(rad_gps_bt, FALSE);
1240 gtk_widget_set_sensitive(txt_gps_bt_mac, FALSE);
1241 gtk_widget_set_sensitive(btn_scan, FALSE);
1244 /* File Path (RFComm). */
1245 gtk_table_attach(GTK_TABLE(table),
1246 rad_gps_file = gtk_radio_button_new_with_label_from_widget(
1247 GTK_RADIO_BUTTON(rad_gps_bt), _("File Path")),
1248 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1249 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1250 gtk_table_attach(GTK_TABLE(table),
1251 hbox = gtk_hbox_new(FALSE, 4),
1252 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1253 gtk_box_pack_start(GTK_BOX(hbox),
1254 txt_gps_file_path = gtk_entry_new(),
1256 #ifdef MAEMO_CHANGES
1258 g_object_set(G_OBJECT(txt_gps_file_path), "hildon-input-mode",
1259 HILDON_GTK_INPUT_MODE_FULL, NULL);
1261 g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
1264 gtk_box_pack_start(GTK_BOX(hbox),
1265 btn_browse_gps = gtk_button_new_with_label(_("Browse...")),
1267 #ifndef HAVE_LIBGPSBT
1268 gtk_widget_set_sensitive(rad_gps_file, FALSE);
1269 gtk_widget_set_sensitive(txt_gps_file_path, FALSE);
1270 gtk_widget_set_sensitive(btn_browse_gps, FALSE);
1273 /* GPSD Hostname and Port. */
1274 gtk_table_attach(GTK_TABLE(table),
1275 rad_gps_gpsd = gtk_radio_button_new_with_label_from_widget(
1276 GTK_RADIO_BUTTON(rad_gps_bt), _("GPSD Host")),
1277 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1278 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1279 gtk_table_attach(GTK_TABLE(table),
1280 hbox = gtk_hbox_new(FALSE, 4),
1281 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1282 gtk_box_pack_start(GTK_BOX(hbox),
1283 txt_gps_gpsd_host = gtk_entry_new(),
1285 #ifdef MAEMO_CHANGES
1287 g_object_set(G_OBJECT(txt_gps_gpsd_host), "hildon-input-mode",
1288 HILDON_GTK_INPUT_MODE_FULL, NULL);
1290 g_object_set(G_OBJECT(txt_gps_gpsd_host), HILDON_AUTOCAP, FALSE, NULL);
1293 gtk_box_pack_start(GTK_BOX(hbox),
1294 label = gtk_label_new(_("Port")),
1296 gtk_box_pack_start(GTK_BOX(hbox),
1297 num_gps_gpsd_port = hildon_number_editor_new(1, 65535),
1301 /* Auto-Center page. */
1302 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1303 table = gtk_table_new(3, 3, FALSE),
1304 label = gtk_label_new(_("Auto-Center")));
1307 gtk_table_attach(GTK_TABLE(table),
1308 label = gtk_label_new(_("Lead Amount")),
1309 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1310 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1311 gtk_table_attach(GTK_TABLE(table),
1312 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1313 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1314 gtk_container_add(GTK_CONTAINER(label),
1315 num_lead_ratio = hildon_controlbar_new());
1316 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
1317 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
1319 gtk_table_attach(GTK_TABLE(table),
1320 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1321 2, 3, 0, 1, GTK_FILL, 0, 2, 4);
1322 gtk_container_add(GTK_CONTAINER(label),
1323 chk_lead_is_fixed = gtk_check_button_new_with_label(_("Fixed")));
1325 /* Auto-Center Pan Sensitivity. */
1326 gtk_table_attach(GTK_TABLE(table),
1327 label = gtk_label_new(_("Pan Sensitivity")),
1328 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1329 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1330 gtk_table_attach(GTK_TABLE(table),
1331 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1332 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1333 gtk_container_add(GTK_CONTAINER(label),
1334 num_center_ratio = hildon_controlbar_new());
1335 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1,10);
1336 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
1338 gtk_table_attach(GTK_TABLE(table),
1339 hbox = gtk_hbox_new(FALSE, 4),
1340 2, 3, 1, 2, GTK_FILL, 0, 2, 4);
1341 gtk_box_pack_start(GTK_BOX(hbox),
1342 label = gtk_label_new(_("Min. Speed")),
1344 gtk_box_pack_start(GTK_BOX(hbox),
1345 num_ac_min_speed = hildon_number_editor_new(0, 99),
1348 /* Auto-Center Rotate Sensitivity. */
1349 gtk_table_attach(GTK_TABLE(table),
1350 label = gtk_label_new(_("Rotate Sensit.")),
1351 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1352 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1353 gtk_table_attach(GTK_TABLE(table),
1354 num_rotate_sens = hildon_controlbar_new(),
1355 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1356 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_rotate_sens), 1,10);
1357 force_min_visible_bars(HILDON_CONTROLBAR(num_rotate_sens), 1);
1359 gtk_table_attach(GTK_TABLE(table),
1360 hbox = gtk_hbox_new(FALSE, 4),
1361 2, 3, 2, 3, GTK_FILL, 0, 2, 4);
1362 gtk_box_pack_start(GTK_BOX(hbox),
1363 label = gtk_label_new(_("Points")),
1365 gtk_box_pack_start(GTK_BOX(hbox),
1366 cmb_rotate_dir = gtk_combo_box_new_text(),
1368 for(i = 0; i < ROTATE_DIR_ENUM_COUNT; i++)
1369 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_rotate_dir),
1370 ROTATE_DIR_ENUM_TEXT[i]);
1373 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1374 table = gtk_table_new(2, 3, FALSE),
1375 label = gtk_label_new(_("Announce")));
1377 /* Enable Waypoint Announcements. */
1378 gtk_table_attach(GTK_TABLE(table),
1379 chk_enable_announce = gtk_check_button_new_with_label(
1380 _("Enable Waypoint Announcements")),
1381 0, 2, 0, 1, GTK_FILL, 0, 2, 4);
1382 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_announce),
1385 /* Announcement Advance Notice. */
1386 gtk_table_attach(GTK_TABLE(table),
1387 label = gtk_label_new(_("Advance Notice")),
1388 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1389 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1390 gtk_table_attach(GTK_TABLE(table),
1391 num_announce_notice = hildon_controlbar_new(),
1392 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1393 hildon_controlbar_set_range(
1394 HILDON_CONTROLBAR(num_announce_notice), 1, 20);
1395 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
1398 gtk_table_attach(GTK_TABLE(table),
1399 chk_enable_voice = gtk_check_button_new_with_label(
1400 _("Enable Voice Synthesis (requires flite)")),
1401 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
1402 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
1406 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1407 table = gtk_table_new(3, 5, FALSE),
1408 label = gtk_label_new(_("Misc.")));
1411 gtk_table_attach(GTK_TABLE(table),
1412 label = gtk_label_new(_("Line Width")),
1413 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1414 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1415 gtk_table_attach(GTK_TABLE(table),
1416 num_draw_width = hildon_controlbar_new(),
1417 1, 5, 0, 1, GTK_FILL, 0, 2, 4);
1418 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
1419 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
1421 /* Unblank Screen */
1422 gtk_table_attach(GTK_TABLE(table),
1423 label = gtk_label_new(_("Unblank Screen")),
1424 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1425 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1426 gtk_table_attach(GTK_TABLE(table),
1427 cmb_unblank_option = gtk_combo_box_new_text(),
1428 1, 5, 1, 2, GTK_FILL, 0, 2, 4);
1429 for(i = 0; i < UNBLANK_ENUM_COUNT; i++)
1430 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_unblank_option),
1431 UNBLANK_ENUM_TEXT[i]);
1433 /* Information Font Size. */
1434 gtk_table_attach(GTK_TABLE(table),
1435 label = gtk_label_new(_("Info Font Size")),
1436 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1437 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1438 gtk_table_attach(GTK_TABLE(table),
1439 cmb_info_font_size = gtk_combo_box_new_text(),
1440 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1441 for(i = 0; i < INFO_FONT_ENUM_COUNT; i++)
1442 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
1443 INFO_FONT_ENUM_TEXT[i]);
1445 gtk_table_attach(GTK_TABLE(table),
1446 gtk_vseparator_new(),
1447 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2,4);
1451 gtk_table_attach(GTK_TABLE(table),
1452 label = gtk_label_new(_("Units")),
1453 3, 4, 2, 3, GTK_FILL, 0, 2, 4);
1454 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1455 gtk_table_attach(GTK_TABLE(table),
1456 cmb_units = gtk_combo_box_new_text(),
1457 4, 5, 2, 3, GTK_FILL, 0, 2, 4);
1458 for(i = 0; i < UNITS_ENUM_COUNT; i++)
1459 gtk_combo_box_append_text(
1460 GTK_COMBO_BOX(cmb_units), UNITS_ENUM_TEXT[i]);
1463 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1464 table = gtk_table_new(3, 4, FALSE),
1465 label = gtk_label_new(_("Misc. 2")));
1467 /* Degrees format */
1468 gtk_table_attach(GTK_TABLE(table),
1469 label = gtk_label_new(_("Degrees Format")),
1470 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1471 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1472 gtk_table_attach(GTK_TABLE(table),
1473 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1474 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1475 gtk_container_add(GTK_CONTAINER(label),
1476 cmb_degformat = gtk_combo_box_new_text());
1477 for(i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
1478 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
1479 DEG_FORMAT_ENUM_TEXT[i]);
1481 gtk_table_attach(GTK_TABLE(table),
1482 label = gtk_label_new(_("Auto-Download Pre-cache")),
1483 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1484 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1485 gtk_table_attach(GTK_TABLE(table),
1486 num_auto_download_precache = hildon_controlbar_new(),
1487 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1488 hildon_controlbar_set_range(
1489 HILDON_CONTROLBAR(num_auto_download_precache), 1, 5);
1490 force_min_visible_bars(
1491 HILDON_CONTROLBAR(num_auto_download_precache), 1);
1494 gtk_table_attach(GTK_TABLE(table),
1495 hbox = gtk_hbox_new(FALSE, 4),
1496 0, 4, 2, 3, GTK_FILL, 0, 2, 4);
1498 gtk_box_pack_start(GTK_BOX(hbox),
1499 chk_speed_limit_on = gtk_check_button_new_with_label(
1503 gtk_box_pack_start(GTK_BOX(hbox),
1504 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1506 gtk_container_add(GTK_CONTAINER(label),
1507 num_speed = hildon_number_editor_new(0, 999));
1509 gtk_box_pack_start(GTK_BOX(hbox),
1510 label = gtk_label_new(_("Location")),
1512 gtk_box_pack_start(GTK_BOX(hbox),
1513 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1515 gtk_container_add(GTK_CONTAINER(label),
1516 cmb_speed_location = gtk_combo_box_new_text());
1517 for(i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
1518 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
1519 SPEED_LOCATION_ENUM_TEXT[i]);
1523 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1524 table = gtk_table_new(2, 3, FALSE),
1525 label = gtk_label_new(_("POI")));
1528 gtk_table_attach(GTK_TABLE(table),
1529 label = gtk_label_new(_("POI database")),
1530 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1531 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1532 gtk_table_attach(GTK_TABLE(table),
1533 hbox = gtk_hbox_new(FALSE, 4),
1534 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1535 gtk_box_pack_start(GTK_BOX(hbox),
1536 txt_poi_db = gtk_entry_new(),
1538 #ifdef MAEMO_CHANGES
1540 g_object_set(G_OBJECT(txt_poi_db), "hildon-input-mode",
1541 HILDON_GTK_INPUT_MODE_FULL, NULL);
1543 g_object_set(G_OBJECT(txt_poi_db), HILDON_AUTOCAP, FALSE, NULL);
1546 gtk_box_pack_start(GTK_BOX(hbox),
1547 btn_browse_poi = gtk_button_new_with_label(_("Browse...")),
1550 /* Show POI below zoom. */
1551 gtk_table_attach(GTK_TABLE(table),
1552 label = gtk_label_new(_("Show POI below zoom")),
1553 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1554 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1555 gtk_table_attach(GTK_TABLE(table),
1556 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1557 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1558 gtk_container_add(GTK_CONTAINER(label),
1559 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
1561 /* Connect signals. */
1562 memset(&scan_info, 0, sizeof(scan_info));
1563 scan_info.settings_dialog = dialog;
1564 scan_info.txt_gps_bt_mac = txt_gps_bt_mac;
1565 g_signal_connect(G_OBJECT(btn_scan), "clicked",
1566 G_CALLBACK(scan_bluetooth), &scan_info);
1567 g_signal_connect(G_OBJECT(btn_buttons), "clicked",
1568 G_CALLBACK(settings_dialog_hardkeys), dialog);
1569 g_signal_connect(G_OBJECT(btn_colors), "clicked",
1570 G_CALLBACK(settings_dialog_colors), dialog);
1572 poi_browse_info.dialog = dialog;
1573 poi_browse_info.txt = txt_poi_db;
1574 g_signal_connect(G_OBJECT(btn_browse_poi), "clicked",
1575 G_CALLBACK(settings_dialog_browse_forfile), &poi_browse_info);
1577 gps_file_browse_info.dialog = dialog;
1578 gps_file_browse_info.txt = txt_gps_file_path;
1579 g_signal_connect(G_OBJECT(btn_browse_gps), "clicked",
1580 G_CALLBACK(settings_dialog_browse_forfile),
1581 &gps_file_browse_info);
1585 /* Initialize fields. */
1587 gtk_entry_set_text(GTK_ENTRY(txt_gps_bt_mac), _gri.bt_mac);
1589 gtk_entry_set_text(GTK_ENTRY(txt_gps_gpsd_host), _gri.gpsd_host);
1590 hildon_number_editor_set_value(
1591 HILDON_NUMBER_EDITOR(num_gps_gpsd_port), _gri.gpsd_port);
1593 gtk_entry_set_text(GTK_ENTRY(txt_gps_file_path), _gri.file_path);
1597 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd),TRUE);
1600 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_file),TRUE);
1602 default: /* Including GPS_RCVR_BT */
1603 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_bt), TRUE);
1607 if(_poi_db_filename)
1608 gtk_entry_set_text(GTK_ENTRY(txt_poi_db), _poi_db_filename);
1609 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
1611 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
1613 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
1615 gtk_toggle_button_set_active(
1616 GTK_TOGGLE_BUTTON(chk_lead_is_fixed), _lead_is_fixed);
1617 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_rotate_sens),
1619 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_rotate_dir), _rotate_dir);
1620 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_ac_min_speed),
1622 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
1623 _announce_notice_ratio);
1624 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
1626 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
1627 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
1628 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
1630 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_auto_download_precache),
1631 _auto_download_precache);
1632 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed),
1634 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location),
1636 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_unblank_option),
1638 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size),
1641 gtk_widget_show_all(dialog);
1643 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1645 GpsRcvrType new_grtype;
1647 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd))
1648 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1650 popup_error(dialog, _("Please specify a GPSD hostname."));
1654 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file))
1655 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
1657 popup_error(dialog, _("Please specify a GPS file pathname."));
1661 /* Set _gri.bt_mac if necessary. */
1662 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac)))
1664 /* User specified no rcvr mac - set _gri.bt_mac to NULL. */
1667 g_free(_gri.bt_mac);
1669 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1672 else if(!_gri.bt_mac || strcmp(_gri.bt_mac,
1673 gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac))))
1675 /* User specified a new rcvr mac. */
1676 g_free(_gri.bt_mac);
1677 _gri.bt_mac = g_strdup(gtk_entry_get_text(
1678 GTK_ENTRY(txt_gps_bt_mac)));
1679 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1682 /* Set _gri.gpsd_host if necessary. */
1683 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1685 /* User specified no rcvr mac - set _gri.gpsd_host to NULL. */
1688 g_free(_gri.gpsd_host);
1689 _gri.gpsd_host = NULL;
1690 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1693 else if(!_gri.gpsd_host || strcmp(_gri.gpsd_host,
1694 gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host))))
1696 /* User specified a new rcvr mac. */
1697 g_free(_gri.gpsd_host);
1698 _gri.gpsd_host = g_strdup(gtk_entry_get_text(
1699 GTK_ENTRY(txt_gps_gpsd_host)));
1700 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1703 if(_gri.gpsd_port != hildon_number_editor_get_value(
1704 HILDON_NUMBER_EDITOR(num_gps_gpsd_port)))
1706 _gri.gpsd_port = hildon_number_editor_get_value(
1707 HILDON_NUMBER_EDITOR(num_gps_gpsd_port));
1708 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1711 /* Set _gri.file_path if necessary. */
1712 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
1714 /* User specified no rcvr mac - set _gri.file_path to NULL. */
1717 g_free(_gri.file_path);
1718 _gri.file_path = NULL;
1719 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
1722 else if(!_gri.file_path || strcmp(_gri.file_path,
1723 gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path))))
1725 /* User specified a new rcvr mac. */
1726 g_free(_gri.file_path);
1727 _gri.file_path = g_strdup(gtk_entry_get_text(
1728 GTK_ENTRY(txt_gps_file_path)));
1729 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
1732 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_bt)))
1733 new_grtype = GPS_RCVR_BT;
1734 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd)))
1735 new_grtype = GPS_RCVR_GPSD;
1736 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file)))
1737 new_grtype = GPS_RCVR_FILE;
1739 new_grtype = GPS_RCVR_BT;
1741 if(new_grtype != _gri.type)
1743 _gri.type = new_grtype;
1744 rcvr_changed = TRUE;
1747 _center_ratio = hildon_controlbar_get_value(
1748 HILDON_CONTROLBAR(num_center_ratio));
1750 _lead_ratio = hildon_controlbar_get_value(
1751 HILDON_CONTROLBAR(num_lead_ratio));
1753 _lead_is_fixed = gtk_toggle_button_get_active(
1754 GTK_TOGGLE_BUTTON(chk_lead_is_fixed));
1756 _rotate_sens = hildon_controlbar_get_value(
1757 HILDON_CONTROLBAR(num_rotate_sens));
1759 _ac_min_speed = hildon_number_editor_get_value(
1760 HILDON_NUMBER_EDITOR(num_ac_min_speed));
1762 _rotate_dir = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_rotate_dir));
1764 _auto_download_precache = hildon_controlbar_get_value(
1765 HILDON_CONTROLBAR(num_auto_download_precache));
1767 _draw_width = hildon_controlbar_get_value(
1768 HILDON_CONTROLBAR(num_draw_width));
1770 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
1771 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
1773 _speed_limit_on = gtk_toggle_button_get_active(
1774 GTK_TOGGLE_BUTTON(chk_speed_limit_on));
1775 _speed_limit = hildon_number_editor_get_value(
1776 HILDON_NUMBER_EDITOR(num_speed));
1777 _speed_location = gtk_combo_box_get_active(
1778 GTK_COMBO_BOX(cmb_speed_location));
1780 _unblank_option = gtk_combo_box_get_active(
1781 GTK_COMBO_BOX(cmb_unblank_option));
1783 _info_font_size = gtk_combo_box_get_active(
1784 GTK_COMBO_BOX(cmb_info_font_size));
1786 _announce_notice_ratio = hildon_controlbar_get_value(
1787 HILDON_CONTROLBAR(num_announce_notice));
1789 _enable_announce = gtk_toggle_button_get_active(
1790 GTK_TOGGLE_BUTTON(chk_enable_announce));
1792 _enable_voice = gtk_toggle_button_get_active(
1793 GTK_TOGGLE_BUTTON(chk_enable_voice));
1795 /* Check if user specified a different POI database from before. */
1796 if((!_poi_db_filename && *gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
1797 || strcmp(_poi_db_filename,
1798 gtk_entry_get_text(GTK_ENTRY(txt_poi_db))))
1800 /* Clear old filename/dirname, if necessary. */
1801 if(_poi_db_filename)
1803 g_free(_poi_db_filename);
1804 _poi_db_filename = NULL;
1805 g_free(_poi_db_dirname);
1806 _poi_db_dirname = NULL;
1809 if(*gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
1811 _poi_db_filename = g_strdup(gtk_entry_get_text(
1812 GTK_ENTRY(txt_poi_db)));
1813 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
1819 _poi_zoom = hildon_number_editor_get_value(
1820 HILDON_NUMBER_EDITOR(num_poi_zoom));
1827 map_refresh_mark(TRUE);
1832 gtk_widget_hide(dialog);
1834 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);
1835 return rcvr_changed;
1839 settings_parse_repo(gchar *str)
1841 /* Parse each part of a repo, delimited by newline characters:
1846 * 5. view_zoom_steps
1849 * If layer_level > 0, have additional fields:
1851 * 8. layer_refresh_interval
1853 gchar *token, *error_check;
1854 printf("%s(%s)\n", __PRETTY_FUNCTION__, str);
1856 RepoData *rd = g_new0(RepoData, 1);
1859 token = strsep(&str, "\n\t");
1861 rd->name = g_strdup(token);
1863 /* Parse URL format. */
1864 token = strsep(&str, "\n\t");
1866 rd->url = g_strdup(token);
1868 /* Parse cache dir. */
1869 token = strsep(&str, "\n\t");
1871 rd->db_filename = gnome_vfs_expand_initial_tilde(token);
1873 /* Parse download zoom steps. */
1874 token = strsep(&str, "\n\t");
1875 if(!token || !*token || !(rd->dl_zoom_steps = atoi(token)))
1876 rd->dl_zoom_steps = 2;
1878 /* Parse view zoom steps. */
1879 token = strsep(&str, "\n\t");
1880 if(!token || !*token || !(rd->view_zoom_steps = atoi(token)))
1881 rd->view_zoom_steps = 1;
1883 /* Parse double-size. */
1884 token = strsep(&str, "\n\t");
1886 rd->double_size = atoi(token); /* Default is zero (FALSE) */
1888 /* Parse next-able. */
1889 token = strsep(&str, "\n\t");
1890 if(!token || !*token
1891 || (rd->nextable = strtol(token, &error_check, 10), token == str))
1892 rd->nextable = TRUE;
1894 /* Parse min zoom. */
1895 token = strsep(&str, "\n\t");
1896 if(!token || !*token
1897 || (rd->min_zoom = strtol(token, &error_check, 10), token == str))
1900 /* Parse max zoom. */
1901 token = strsep(&str, "\n\t");
1902 if(!token || !*token
1903 || (rd->max_zoom = strtol(token, &error_check, 10), token == str))
1906 /* Parse layer_level */
1907 token = strsep(&str, "\n\t");
1908 if(!token || !*token
1909 || (rd->layer_level = strtol(token, &error_check, 10), token == str))
1910 rd->layer_level = 0;
1912 if (rd->layer_level) {
1913 /* Parse layer_enabled */
1914 token = strsep(&str, "\n\t");
1915 if(!token || !*token || (rd->layer_enabled = strtol(token, &error_check, 10), token == str))
1916 rd->layer_enabled = 0;
1918 /* Parse layer_refresh_interval */
1919 token = strsep(&str, "\n\t");
1920 if(!token || !*token || (rd->layer_refresh_interval = strtol(token, &error_check, 10), token == str))
1921 rd->layer_refresh_interval = 0;
1923 rd->layer_refresh_countdown = rd->layer_refresh_interval;
1928 vprintf("%s(): return %p\n", __PRETTY_FUNCTION__, rd);
1933 * Initialize all configuration from GCONF. This should not be called more
1934 * than once during execution.
1940 GConfClient *gconf_client = gconf_client_get_default();
1942 printf("%s()\n", __PRETTY_FUNCTION__);
1944 /* Initialize some constants. */
1945 CUSTOM_KEY_GCONF[CUSTOM_KEY_UP] = GCONF_KEY_PREFIX"/key_up";
1946 CUSTOM_KEY_GCONF[CUSTOM_KEY_DOWN] = GCONF_KEY_PREFIX"/key_down";
1947 CUSTOM_KEY_GCONF[CUSTOM_KEY_LEFT] = GCONF_KEY_PREFIX"/key_left";
1948 CUSTOM_KEY_GCONF[CUSTOM_KEY_RIGHT] = GCONF_KEY_PREFIX"/key_right";
1949 CUSTOM_KEY_GCONF[CUSTOM_KEY_SELECT] = GCONF_KEY_PREFIX"/key_select";
1950 CUSTOM_KEY_GCONF[CUSTOM_KEY_INCREASE] = GCONF_KEY_PREFIX"/key_increase";
1951 CUSTOM_KEY_GCONF[CUSTOM_KEY_DECREASE] = GCONF_KEY_PREFIX"/key_decrease";
1952 CUSTOM_KEY_GCONF[CUSTOM_KEY_FULLSCREEN]= GCONF_KEY_PREFIX"/key_fullscreen";
1953 CUSTOM_KEY_GCONF[CUSTOM_KEY_ESC] = GCONF_KEY_PREFIX"/key_esc";
1955 COLORABLE_GCONF[COLORABLE_MARK] = GCONF_KEY_PREFIX"/color_mark";
1956 COLORABLE_GCONF[COLORABLE_MARK_VELOCITY]
1957 = GCONF_KEY_PREFIX"/color_mark_velocity";
1958 COLORABLE_GCONF[COLORABLE_MARK_OLD] = GCONF_KEY_PREFIX"/color_mark_old";
1959 COLORABLE_GCONF[COLORABLE_TRACK] = GCONF_KEY_PREFIX"/color_track";
1960 COLORABLE_GCONF[COLORABLE_TRACK_MARK] =GCONF_KEY_PREFIX"/color_track_mark";
1961 COLORABLE_GCONF[COLORABLE_TRACK_BREAK]
1962 = GCONF_KEY_PREFIX"/color_track_break";
1963 COLORABLE_GCONF[COLORABLE_ROUTE] = GCONF_KEY_PREFIX"/color_route";
1964 COLORABLE_GCONF[COLORABLE_ROUTE_WAY] = GCONF_KEY_PREFIX"/color_route_way";
1965 COLORABLE_GCONF[COLORABLE_ROUTE_BREAK]
1966 = GCONF_KEY_PREFIX"/color_route_break";
1967 COLORABLE_GCONF[COLORABLE_POI] = GCONF_KEY_PREFIX"/color_poi";
1971 popup_error(_window, _("Failed to initialize GConf. Quitting."));
1975 /* Get GPS Receiver Type. Default is Bluetooth Receiver. */
1977 gchar *gri_type_str = gconf_client_get_string(gconf_client,
1978 GCONF_KEY_GPS_RCVR_TYPE, NULL);
1982 for(i = GPS_RCVR_ENUM_COUNT - 1; i > 0; i--)
1983 if(!strcmp(gri_type_str, GPS_RCVR_ENUM_TEXT[i]))
1985 g_free(gri_type_str);
1990 /* Get Bluetooth Receiver MAC. Default is NULL. */
1991 _gri.bt_mac = gconf_client_get_string(
1992 gconf_client, GCONF_KEY_GPS_BT_MAC, NULL);
1994 /* Get GPSD Host. Default is localhost. */
1995 _gri.gpsd_host = gconf_client_get_string(
1996 gconf_client, GCONF_KEY_GPS_GPSD_HOST, NULL);
1998 _gri.gpsd_host = g_strdup("127.0.0.1");
2000 /* Get GPSD Port. Default is GPSD_PORT_DEFAULT (2947). */
2001 if(!(_gri.gpsd_port = gconf_client_get_int(
2002 gconf_client, GCONF_KEY_GPS_GPSD_PORT, NULL)))
2003 _gri.gpsd_port = GPSD_PORT_DEFAULT;
2005 /* Get File Path. Default is /dev/pgps. */
2006 _gri.file_path = gconf_client_get_string(
2007 gconf_client, GCONF_KEY_GPS_FILE_PATH, NULL);
2009 _gri.file_path = g_strdup("/dev/pgps");
2011 /* Get Auto-Download. Default is FALSE. */
2012 _auto_download = gconf_client_get_bool(gconf_client,
2013 GCONF_KEY_AUTO_DOWNLOAD, NULL);
2015 /* Get Auto-Download Pre-cache - Default is 2. */
2016 _auto_download_precache = gconf_client_get_int(gconf_client,
2017 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, NULL);
2018 if(!_auto_download_precache)
2019 _auto_download_precache = 2;
2021 /* Get Center Ratio - Default is 5. */
2022 _center_ratio = gconf_client_get_int(gconf_client,
2023 GCONF_KEY_CENTER_SENSITIVITY, NULL);
2027 /* Get Lead Ratio - Default is 5. */
2028 _lead_ratio = gconf_client_get_int(gconf_client,
2029 GCONF_KEY_LEAD_AMOUNT, NULL);
2033 /* Get Lead Is Fixed flag - Default is FALSE. */
2034 _lead_is_fixed = gconf_client_get_bool(gconf_client,
2035 GCONF_KEY_LEAD_IS_FIXED, NULL);
2037 /* Get Rotate Sensitivity - Default is 5. */
2038 _rotate_sens = gconf_client_get_int(gconf_client,
2039 GCONF_KEY_ROTATE_SENSITIVITY, NULL);
2043 /* Get Auto-Center/Rotate Minimum Speed - Default is 2. */
2044 value = gconf_client_get(gconf_client, GCONF_KEY_AC_MIN_SPEED, NULL);
2047 _ac_min_speed = gconf_value_get_int(value);
2048 gconf_value_free(value);
2053 /* Get Rotate Dir - Default is ROTATE_DIR_UP. */
2055 gchar *rotate_dir_str = gconf_client_get_string(gconf_client,
2056 GCONF_KEY_ROTATE_DIR, NULL);
2059 for(i = ROTATE_DIR_ENUM_COUNT - 1; i >= 0; i--)
2060 if(!strcmp(rotate_dir_str, ROTATE_DIR_ENUM_TEXT[i]))
2067 /* Get Draw Line Width- Default is 5. */
2068 _draw_width = gconf_client_get_int(gconf_client,
2069 GCONF_KEY_DRAW_WIDTH, NULL);
2073 /* Get Enable Announcements flag. Default is TRUE. */
2074 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_ANNOUNCE, NULL);
2077 _enable_announce = gconf_value_get_bool(value);
2078 gconf_value_free(value);
2081 _enable_announce = TRUE;
2083 /* Get Announce Advance Notice - Default is 30. */
2084 value = gconf_client_get(gconf_client, GCONF_KEY_ANNOUNCE_NOTICE, NULL);
2087 _announce_notice_ratio = gconf_value_get_int(value);
2088 gconf_value_free(value);
2091 _announce_notice_ratio = 8;
2093 /* Get Enable Voice flag. Default is TRUE. */
2094 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_VOICE, NULL);
2097 _enable_voice = gconf_value_get_bool(value);
2098 gconf_value_free(value);
2101 _enable_voice = TRUE;
2105 /* Make sure we actually have voice capabilities. */
2106 GnomeVFSFileInfo file_info;
2107 _enable_voice = ((GNOME_VFS_OK == gnome_vfs_get_file_info(
2108 _voice_synth_path, &file_info,
2109 GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS))
2110 && (file_info.permissions & GNOME_VFS_PERM_ACCESS_EXECUTABLE));
2113 /* Get Fullscreen flag. Default is FALSE. */
2114 _fullscreen = gconf_client_get_bool(gconf_client,
2115 GCONF_KEY_FULLSCREEN, NULL);
2117 /* Get Units. Default is UNITS_KM. */
2119 gchar *units_str = gconf_client_get_string(gconf_client,
2120 GCONF_KEY_UNITS, NULL);
2123 for(i = UNITS_ENUM_COUNT - 1; i > 0; i--)
2124 if(!strcmp(units_str, UNITS_ENUM_TEXT[i]))
2129 /* Get Custom Key Actions. */
2132 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
2134 gint j = CUSTOM_KEY_DEFAULT[i];
2135 gchar *str = gconf_client_get_string(gconf_client,
2136 CUSTOM_KEY_GCONF[i], NULL);
2138 for(j = CUSTOM_ACTION_ENUM_COUNT - 1; j > 0; j--)
2139 if(!strcmp(str, CUSTOM_ACTION_ENUM_TEXT[j]))
2145 /* Get Deg format. Default is DDPDDDDD. */
2147 gchar *degformat_key_str = gconf_client_get_string(gconf_client,
2148 GCONF_KEY_DEG_FORMAT, NULL);
2150 if(degformat_key_str)
2151 for(i = DEG_FORMAT_ENUM_COUNT - 1; i > 0; i--)
2152 if(!strcmp(degformat_key_str, DEG_FORMAT_ENUM_TEXT[i]))
2157 /* Get Speed Limit On flag. Default is FALSE. */
2158 _speed_limit_on = gconf_client_get_bool(gconf_client,
2159 GCONF_KEY_SPEED_LIMIT_ON, NULL);
2161 /* Get Speed Limit */
2162 _speed_limit = gconf_client_get_int(gconf_client,
2163 GCONF_KEY_SPEED_LIMIT, NULL);
2164 if(_speed_limit <= 0)
2167 /* Get Speed Location. Default is SPEED_LOCATION_TOP_LEFT. */
2169 gchar *speed_location_str = gconf_client_get_string(gconf_client,
2170 GCONF_KEY_SPEED_LOCATION, NULL);
2172 if(speed_location_str)
2173 for(i = SPEED_LOCATION_ENUM_COUNT - 1; i > 0; i--)
2174 if(!strcmp(speed_location_str, SPEED_LOCATION_ENUM_TEXT[i]))
2176 _speed_location = i;
2179 /* Get Unblank Option. Default is UNBLANK_FULLSCREEN. */
2181 gchar *unblank_option_str = gconf_client_get_string(gconf_client,
2182 GCONF_KEY_UNBLANK_SIZE, NULL);
2184 if(unblank_option_str)
2185 for(i = UNBLANK_ENUM_COUNT - 1; i >= 0; i--)
2186 if(!strcmp(unblank_option_str, UNBLANK_ENUM_TEXT[i]))
2189 i = UNBLANK_FULLSCREEN;
2190 _unblank_option = i;
2193 /* Get Info Font Size. Default is INFO_FONT_MEDIUM. */
2195 gchar *info_font_size_str = gconf_client_get_string(gconf_client,
2196 GCONF_KEY_INFO_FONT_SIZE, NULL);
2198 if(info_font_size_str)
2199 for(i = INFO_FONT_ENUM_COUNT - 1; i >= 0; i--)
2200 if(!strcmp(info_font_size_str, INFO_FONT_ENUM_TEXT[i]))
2203 i = INFO_FONT_MEDIUM;
2204 _info_font_size = i;
2207 /* Get last saved latitude. Default is 50.f. */
2208 value = gconf_client_get(gconf_client, GCONF_KEY_LAST_LAT, NULL);
2211 _gps.lat = gconf_value_get_float(value);
2212 gconf_value_free(value);
2217 /* Get last saved longitude. Default is 0. */
2218 _gps.lon = gconf_client_get_float(gconf_client, GCONF_KEY_LAST_LON, NULL);
2220 /* Get last saved altitude. Default is 0. */
2221 _pos.altitude = gconf_client_get_int(
2222 gconf_client, GCONF_KEY_LAST_ALT, NULL);
2224 /* Get last saved speed. Default is 0. */
2225 _gps.speed = gconf_client_get_float(
2226 gconf_client, GCONF_KEY_LAST_SPEED, NULL);
2228 /* Get last saved speed. Default is 0. */
2229 _gps.heading = gconf_client_get_float(
2230 gconf_client, GCONF_KEY_LAST_HEADING, NULL);
2232 /* Get last saved timestamp. Default is 0. */
2233 _pos.time= gconf_client_get_float(gconf_client, GCONF_KEY_LAST_TIME, NULL);
2235 /* Get last center point. */
2237 gdouble center_lat, center_lon;
2239 /* Get last saved latitude. Default is last saved latitude. */
2240 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LAT, NULL);
2243 center_lat = gconf_value_get_float(value);
2244 gconf_value_free(value);
2248 _is_first_time = TRUE;
2249 center_lat = _gps.lat;
2252 /* Get last saved longitude. Default is last saved longitude. */
2253 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LON, NULL);
2256 center_lon = gconf_value_get_float(value);
2257 gconf_value_free(value);
2260 center_lon = _gps.lon;
2262 latlon2unit(center_lat, center_lon, _center.unitx, _center.unity);
2263 _next_center = _center;
2266 /* Get map correction. Default is 0. */
2267 _map_correction_unitx = gconf_client_get_int(gconf_client,
2268 GCONF_KEY_MAP_CORRECTION_UNITX, NULL);
2269 _map_correction_unity = gconf_client_get_int(gconf_client,
2270 GCONF_KEY_MAP_CORRECTION_UNITY, NULL);
2272 /* Get last viewing angle. Default is 0. */
2273 _map_rotate_angle = _next_map_rotate_angle = gconf_client_get_int(
2274 gconf_client, GCONF_KEY_CENTER_ANGLE, NULL);
2275 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2277 deg2rad(ROTATE_DIR_ENUM_DEGREES[_rotate_dir] - _map_rotate_angle));
2278 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2279 _map_reverse_matrix,
2280 deg2rad(_map_rotate_angle - ROTATE_DIR_ENUM_DEGREES[_rotate_dir]));
2283 /* Load the repositories. */
2285 GSList *list, *curr;
2286 RepoData *prev_repo = NULL, *curr_repo = NULL;
2287 gint curr_repo_index = gconf_client_get_int(gconf_client,
2288 GCONF_KEY_CURRREPO, NULL);
2289 list = gconf_client_get_list(gconf_client,
2290 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, NULL);
2292 for(curr = list; curr != NULL; curr = curr->next)
2294 RepoData *rd = settings_parse_repo(curr->data);
2296 if (rd->layer_level == 0) {
2297 _repo_list = g_list_append(_repo_list, rd);
2298 if(!curr_repo_index--)
2302 prev_repo->layers = rd;
2309 repo_set_curr(curr_repo);
2311 /* this timer decrements layers' counters and frefresh map if needed */
2312 g_timeout_add (60 * 1000, map_layer_refresh_cb, NULL);
2316 if(_repo_list == NULL)
2318 /* We have no repositories - create a default one. */
2319 RepoData *repo = g_new0(RepoData, 1);
2321 repo->db_filename = gnome_vfs_expand_initial_tilde(
2322 REPO_DEFAULT_CACHE_DIR);
2323 repo->url=g_strdup(REPO_DEFAULT_MAP_URI);
2324 repo->dl_zoom_steps = REPO_DEFAULT_DL_ZOOM_STEPS;
2325 repo->name = g_strdup(REPO_DEFAULT_NAME);
2326 repo->view_zoom_steps = REPO_DEFAULT_VIEW_ZOOM_STEPS;
2327 repo->double_size = FALSE;
2328 repo->nextable = TRUE;
2329 repo->min_zoom = REPO_DEFAULT_MIN_ZOOM;
2330 repo->max_zoom = REPO_DEFAULT_MAX_ZOOM;
2331 repo->layers = NULL;
2332 repo->layer_level = 0;
2333 set_repo_type(repo);
2335 _repo_list = g_list_append(_repo_list, repo);
2336 repo_set_curr(repo);
2339 /* Get last Zoom Level. Default is 16. */
2340 value = gconf_client_get(gconf_client, GCONF_KEY_ZOOM, NULL);
2343 _zoom = gconf_value_get_int(value) / _curr_repo->view_zoom_steps
2344 * _curr_repo->view_zoom_steps;
2345 gconf_value_free(value);
2348 _zoom = 16 / _curr_repo->view_zoom_steps
2349 * _curr_repo->view_zoom_steps;
2350 BOUND(_zoom, 0, MAX_ZOOM);
2353 /* Get Route Directory. Default is NULL. */
2354 _route_dir_uri = gconf_client_get_string(gconf_client,
2355 GCONF_KEY_ROUTEDIR, NULL);
2357 /* Get Last Track File. Default is NULL. */
2358 _track_file_uri = gconf_client_get_string(gconf_client,
2359 GCONF_KEY_TRACKFILE, NULL);
2361 /* Get Auto-Center Mode. Default is CENTER_LEAD. */
2362 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_MODE, NULL);
2365 _center_mode = gconf_value_get_int(value);
2366 gconf_value_free(value);
2369 _center_mode = CENTER_LEAD;
2371 /* Get Auto-Center Rotate Flag. Default is TRUE. */
2372 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_ROTATE, NULL);
2375 _center_rotate = gconf_value_get_bool(value);
2376 gconf_value_free(value);
2379 _center_rotate = TRUE;
2381 /* Get Show Zoom Level flag. Default is FALSE. */
2382 _show_zoomlevel = gconf_client_get_bool(gconf_client,
2383 GCONF_KEY_SHOWZOOMLEVEL, NULL);
2385 /* Get Show Scale flag. Default is TRUE. */
2386 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWSCALE, NULL);
2389 _show_scale = gconf_value_get_bool(value);
2390 gconf_value_free(value);
2395 /* Get Show Compass Rose flag. Default is TRUE. */
2396 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWCOMPROSE, NULL);
2399 _show_comprose = gconf_value_get_bool(value);
2400 gconf_value_free(value);
2403 _show_comprose = TRUE;
2405 /* Get Show Tracks flag. Default is TRUE. */
2406 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWTRACKS, NULL);
2409 _show_paths |= (gconf_value_get_bool(value) ? TRACKS_MASK : 0);
2410 gconf_value_free(value);
2413 _show_paths |= TRACKS_MASK;
2415 /* Get Show Routes flag. Default is TRUE. */
2416 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWROUTES, NULL);
2419 _show_paths |= (gconf_value_get_bool(value) ? ROUTES_MASK : 0);
2420 gconf_value_free(value);
2423 _show_paths |= ROUTES_MASK;
2425 /* Get Show Velocity Vector flag. Default is TRUE. */
2426 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWVELVEC, NULL);
2429 _show_velvec = gconf_value_get_bool(value);
2430 gconf_value_free(value);
2433 _show_velvec = TRUE;
2435 /* Get Show Velocity Vector flag. Default is TRUE. */
2436 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWPOIS, NULL);
2439 _show_poi = gconf_value_get_bool(value);
2440 gconf_value_free(value);
2445 /* Get Enable GPS flag. Default is TRUE. */
2446 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_GPS, NULL);
2449 _enable_gps = gconf_value_get_bool(value);
2450 gconf_value_free(value);
2455 /* Get Enable Tracking flag. Default is TRUE. */
2456 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_TRACKING, NULL);
2459 _enable_tracking = gconf_value_get_bool(value);
2460 gconf_value_free(value);
2463 _enable_tracking = TRUE;
2465 /* Initialize _gps_state based on _enable_gps. */
2466 _gps_state = RCVR_OFF;
2468 /* Load the route locations. */
2471 _loc_list = gconf_client_get_list(gconf_client,
2472 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, NULL);
2473 _loc_model = gtk_list_store_new(1, G_TYPE_STRING);
2474 for(curr = _loc_list; curr != NULL; curr = curr->next)
2477 gtk_list_store_insert_with_values(_loc_model, &iter, INT_MAX,
2482 /* Get POI Database. Default is in REPO_DEFAULT_CACHE_BASE */
2483 _poi_db_filename = gconf_client_get_string(gconf_client,
2484 GCONF_KEY_POI_DB, NULL);
2485 if(_poi_db_filename == NULL)
2487 gchar *poi_base = gnome_vfs_expand_initial_tilde(
2488 REPO_DEFAULT_CACHE_BASE);
2489 _poi_db_filename = gnome_vfs_uri_make_full_from_relative(
2490 poi_base, "poi.db");
2494 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
2496 _poi_zoom = gconf_client_get_int(gconf_client,
2497 GCONF_KEY_POI_ZOOM, NULL);
2499 _poi_zoom = MAX_ZOOM - 10;
2502 /* Get GPS Info flag. Default is FALSE. */
2503 _gps_info = gconf_client_get_bool(gconf_client, GCONF_KEY_GPS_INFO, NULL);
2505 /* Get Route Download URL. Default is:
2506 * "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s" */
2507 _route_dl_url = gconf_client_get_string(gconf_client,
2508 GCONF_KEY_ROUTE_DL_URL, NULL);
2509 if(_route_dl_url == NULL)
2510 _route_dl_url = g_strdup(
2511 "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s");
2513 /* Get Route Download Radius. Default is 4. */
2514 value = gconf_client_get(gconf_client, GCONF_KEY_ROUTE_DL_RADIUS, NULL);
2517 _route_dl_radius = gconf_value_get_int(value);
2518 gconf_value_free(value);
2521 _route_dl_radius = 8;
2523 /* Get POI Download URL. Default is:
2524 * "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d" */
2525 _poi_dl_url = gconf_client_get_string(gconf_client,
2526 GCONF_KEY_POI_DL_URL, NULL);
2527 if(_poi_dl_url == NULL)
2528 _poi_dl_url = g_strdup(
2529 "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d");
2534 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
2536 str = gconf_client_get_string(gconf_client,
2537 COLORABLE_GCONF[i], NULL);
2538 if(!str || !gdk_color_parse(str, &_color[i]))
2539 _color[i] = COLORABLE_DEFAULT[i];
2543 gconf_client_clear_cache(gconf_client);
2544 g_object_unref(gconf_client);
2551 vprintf("%s(): return\n", __PRETTY_FUNCTION__);