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"
136 #define GCONF_KEY_APRS_SERVER GCONF_KEY_PREFIX"/aprs_server"
137 #define GCONF_KEY_APRS_SERVER_PORT GCONF_KEY_PREFIX"/aprs_server_port"
138 #define GCONF_KEY_APRS_SERVER_VAL GCONF_KEY_PREFIX"/aprs_mycall_val"
139 #define GCONF_KEY_APRS_MYCALL GCONF_KEY_PREFIX"/aprs_mycall"
140 #define GCONF_KEY_APRS_INET_BEACON GCONF_KEY_PREFIX"/aprs_inet_beacon"
141 #define GCONF_KEY_APRS_INET_BEACON_INTERVAL GCONF_KEY_PREFIX"/aprs_inet_beacon_interval"
142 #define GCONF_KEY_APRS_ENABLE GCONF_KEY_PREFIX"/aprs_enable"
143 #define GCONF_KEY_APRS_ENABLE_INET_TX GCONF_KEY_PREFIX"/aprs_enable_inet_tx"
144 #define GCONF_KEY_APRS_ENABLE_TTY_TX GCONF_KEY_PREFIX"/aprs_enable_tty_tx"
146 #define GCONF_KEY_APRS_MAX_TRACK_PTS GCONF_KEY_PREFIX"/aprs_max_track_points"
147 #define GCONF_KEY_APRS_MAX_STATIONS GCONF_KEY_PREFIX"/aprs_max_stations"
148 #define GCONF_KEY_APRS_TTY_PORT GCONF_KEY_PREFIX"/aprs_tty_port"
149 #define GCONF_KEY_APRS_TNC_CONN_METHOD GCONF_KEY_PREFIX"/aprs_tnc_conn_method"
150 #define GCONF_KEY_APRS_TNC_BT_MAC GCONF_KEY_PREFIX"/aprs_tnc_bt_mac"
151 #define GCONF_KEY_APRS_INET_AUTO_FILTER GCONF_KEY_PREFIX"/aprs_inet_auto_filter"
152 #define GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE GCONF_KEY_PREFIX"/aprs_inet_auto_filter_range"
153 #define GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT GCONF_KEY_PREFIX"/aprs_show_new_station_alert"
154 #define GCONF_KEY_APRS_BEACON_COMMENT GCONF_KEY_PREFIX"/aprs_beacon_comment"
155 #define GCONF_KEY_APRS_TTY_BEACON_INTERVAL GCONF_KEY_PREFIX"/aprs_tty_beacon_interval"
157 #define GCONF_KEY_APRS_BEACON_PATH GCONF_KEY_PREFIX"/aprs_beacon_path"
158 #define GCONF_KEY_APRS_BEACON_SYM_GROUP GCONF_KEY_PREFIX"/aprs_beacon_symbol_group"
159 #define GCONF_KEY_APRS_BEACON_SYMBOL GCONF_KEY_PREFIX"/aprs_beacon_symbol"
160 #define GCONF_KEY_APRS_BEACON_COMPRESSED GCONF_KEY_PREFIX"/aprs_beacon_compressed"
163 #endif // INCLUDE_APRS
166 typedef struct _ScanInfo ScanInfo;
168 GtkWidget *settings_dialog;
169 GtkWidget *txt_gps_bt_mac;
170 GtkWidget *scan_dialog;
174 DBusGConnection *bus;
175 DBusGProxy *req_proxy;
176 DBusGProxy *sig_proxy;
183 GtkWidget *txt_aprs_mycall;
184 GtkWidget *txt_aprs_inet_server_validation;
185 GtkWidget *txt_aprs_server;
186 GtkWidget *txt_aprs_inet_beacon_interval;
187 GtkWidget *txt_aprs_inet_beacon_comment;
188 GtkWidget *txt_aprs_max_stations;
189 GtkWidget *txt_aprs_tty_port;
190 GtkWidget *txt_tnc_bt_mac;
191 GtkWidget *txt_auto_filter_range;
192 GtkWidget *txt_beacon_comment;
193 GtkWidget *num_aprs_server_port;
194 GtkWidget *txt_tty_beacon_interval;
196 GtkWidget *rad_aprs_file;
197 GtkWidget *rad_tnc_bt;
198 GtkWidget *rad_tnc_file;
200 GtkWidget *chk_enable_inet_auto_filter;
201 GtkWidget *chk_enable_inet_tx;
202 GtkWidget *chk_enable_tty_tx;
203 GtkWidget *chk_aprs_show_new_station_alert;
204 GtkWidget *chk_aprs_enabled;
206 GtkWidget *btn_scan_bt_tnc;
208 GtkWidget *txt_unproto_path;
209 GtkWidget *chk_compressed_beacon;
210 GtkWidget *txt_beacon_group;
211 GtkWidget *txt_beacon_symbol;
214 #endif // INCLUDE_APRS
217 typedef struct _KeysDialogInfo KeysDialogInfo;
218 struct _KeysDialogInfo {
219 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
222 typedef struct _ColorsDialogInfo ColorsDialogInfo;
223 struct _ColorsDialogInfo {
224 GtkWidget *col[COLORABLE_ENUM_COUNT];
241 void set_ctrl_alignment(GtkWidget *ctrl, TCellAlignment alignment)
243 gfloat align_hor = 0.0f, align_vert = 0.0f;
247 case ALIGN_CENTER_LEFT:
248 case ALIGN_CENTER_CENTER:
249 case ALIGN_CENTER_RIGHT:
252 case ALIGN_BOTTOM_LEFT:
253 case ALIGN_BOTTOM_CENTER:
254 case ALIGN_BOTTOM_RIGHT:
258 case ALIGN_TOP_CENTER:
259 case ALIGN_TOP_RIGHT:
268 case ALIGN_CENTER_CENTER:
269 case ALIGN_BOTTOM_CENTER:
270 case ALIGN_TOP_CENTER:
273 case ALIGN_CENTER_RIGHT:
274 case ALIGN_BOTTOM_RIGHT:
275 case ALIGN_TOP_RIGHT:
278 case ALIGN_CENTER_LEFT:
279 case ALIGN_BOTTOM_LEFT:
286 gtk_misc_set_alignment(GTK_MISC(ctrl), align_hor, align_vert);
289 void set_ctrl_width(GtkWidget *ctrl, gint width)
291 gtk_widget_set_size_request(ctrl, width, -1);
295 void add_edit_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,
296 GtkWidget **ctrl, TCellAlignment alignment, gchar * initial_value)
300 gtk_table_attach(GTK_TABLE(table),
301 hbox = gtk_hbox_new(FALSE, 4),
302 xmin, xmax, ymin, ymax, GTK_EXPAND | GTK_FILL, 0, 2, 4);
303 gtk_box_pack_start(GTK_BOX(hbox),
304 *ctrl = gtk_entry_new(),
308 g_object_set(G_OBJECT(*ctrl), "hildon-input-mode",
309 HILDON_GTK_INPUT_MODE_FULL, NULL);
311 g_object_set(G_OBJECT(*ctrl), HILDON_AUTOCAP, FALSE, NULL);
314 //set_ctrl_alignment(*ctrl, alignment);
315 //set_ctrl_width(*ctrl, width);
317 // Set the initial value
320 gtk_entry_set_text(GTK_ENTRY(*ctrl), initial_value);
324 void add_check_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,
325 GtkWidget **ctrl, TCellAlignment alignment, gchar * caption, gboolean initial_value)
327 gtk_table_attach(GTK_TABLE(table),
328 *ctrl = gtk_check_button_new_with_label(caption),
329 xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
331 //set_ctrl_alignment(*ctrl, alignment);
332 //set_ctrl_width(*ctrl, width);
334 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(*ctrl), initial_value);
337 void add_label_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,
338 GtkWidget **ctrl, TCellAlignment alignment, gchar * initial_value)
341 gtk_table_attach(GTK_TABLE(table),
342 *ctrl = gtk_label_new(initial_value),
343 xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
345 gtk_misc_set_alignment(GTK_MISC(*ctrl), 1.f, 0.5f);
348 set_ctrl_alignment(*ctrl, alignment);
349 set_ctrl_width(*ctrl, width);
352 #endif // INCLUDE_APRS
356 * Save all configuration data to GCONF.
362 GConfClient *gconf_client;
364 printf("%s()\n", __PRETTY_FUNCTION__);
366 /* Initialize settings_dir. */
367 settings_dir = gnome_vfs_expand_initial_tilde(CONFIG_DIR_NAME);
368 g_mkdir_with_parents(settings_dir, 0700);
370 /* SAVE ALL GCONF SETTINGS. */
372 gconf_client = gconf_client_get_default();
376 _("Failed to initialize GConf. Settings were not saved."));
380 /* Save GPS Receiver Type. */
381 gconf_client_set_string(gconf_client,
382 GCONF_KEY_GPS_RCVR_TYPE,
383 GPS_RCVR_ENUM_TEXT[_gri.type], NULL);
385 /* Save Bluetooth Receiver MAC. */
387 gconf_client_set_string(gconf_client,
388 GCONF_KEY_GPS_BT_MAC, _gri.bt_mac, NULL);
390 gconf_client_unset(gconf_client,
391 GCONF_KEY_GPS_BT_MAC, NULL);
393 /* Save GPSD Host. */
395 gconf_client_set_string(gconf_client,
396 GCONF_KEY_GPS_GPSD_HOST, _gri.gpsd_host, NULL);
398 gconf_client_unset(gconf_client,
399 GCONF_KEY_GPS_GPSD_HOST, NULL);
401 /* Save GPSD Port. */
402 gconf_client_set_int(gconf_client,
403 GCONF_KEY_GPS_GPSD_PORT, _gri.gpsd_port, NULL);
405 /* Save File Path. */
407 gconf_client_set_string(gconf_client,
408 GCONF_KEY_GPS_FILE_PATH, _gri.file_path, NULL);
410 gconf_client_unset(gconf_client,
411 GCONF_KEY_GPS_FILE_PATH, NULL);
413 /* Save Auto-Download. */
414 gconf_client_set_bool(gconf_client,
415 GCONF_KEY_AUTO_DOWNLOAD, _auto_download, NULL);
417 /* Save Auto-Download Pre-cache. */
418 gconf_client_set_int(gconf_client,
419 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, _auto_download_precache, NULL);
421 /* Save Auto-Center Sensitivity. */
422 gconf_client_set_int(gconf_client,
423 GCONF_KEY_CENTER_SENSITIVITY, _center_ratio, NULL);
425 /* Save Auto-Center Lead Amount. */
426 gconf_client_set_int(gconf_client,
427 GCONF_KEY_LEAD_AMOUNT, _lead_ratio, NULL);
429 /* Save Auto-Center Lead Fixed flag. */
430 gconf_client_set_bool(gconf_client,
431 GCONF_KEY_LEAD_IS_FIXED, _lead_is_fixed, NULL);
433 /* Save Auto-Rotate Sensitivity. */
434 gconf_client_set_int(gconf_client,
435 GCONF_KEY_ROTATE_SENSITIVITY, _rotate_sens, NULL);
437 /* Save Auto-Center/Rotate Minimum Speed. */
438 gconf_client_set_int(gconf_client,
439 GCONF_KEY_AC_MIN_SPEED, _ac_min_speed, NULL);
441 /* Save Auto-Rotate Sensitivity. */
442 gconf_client_set_string(gconf_client,
443 GCONF_KEY_ROTATE_DIR, ROTATE_DIR_ENUM_TEXT[_rotate_dir], NULL);
445 /* Save Draw Line Width. */
446 gconf_client_set_int(gconf_client,
447 GCONF_KEY_DRAW_WIDTH, _draw_width, NULL);
449 /* Save Announce Flag. */
450 gconf_client_set_bool(gconf_client,
451 GCONF_KEY_ENABLE_ANNOUNCE, _enable_announce, NULL);
453 /* Save Announce Advance Notice Ratio. */
454 gconf_client_set_int(gconf_client,
455 GCONF_KEY_ANNOUNCE_NOTICE, _announce_notice_ratio, NULL);
457 /* Save Enable Voice flag. */
458 gconf_client_set_bool(gconf_client,
459 GCONF_KEY_ENABLE_VOICE, _enable_voice, NULL);
461 /* Save fullscreen flag. */
462 gconf_client_set_bool(gconf_client,
463 GCONF_KEY_FULLSCREEN, _fullscreen, NULL);
466 gconf_client_set_string(gconf_client,
467 GCONF_KEY_UNITS, UNITS_ENUM_TEXT[_units], NULL);
469 /* Save Custom Key Actions. */
472 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
473 gconf_client_set_string(gconf_client,
475 CUSTOM_ACTION_ENUM_TEXT[_action[i]], NULL);
478 /* Save Deg Format. */
479 gconf_client_set_string(gconf_client,
480 GCONF_KEY_DEG_FORMAT, DEG_FORMAT_ENUM_TEXT[_degformat].name , NULL);
482 /* Save Speed Limit On flag. */
483 gconf_client_set_bool(gconf_client,
484 GCONF_KEY_SPEED_LIMIT_ON, _speed_limit_on, NULL);
486 /* Save Speed Limit. */
487 gconf_client_set_int(gconf_client,
488 GCONF_KEY_SPEED_LIMIT, _speed_limit, NULL);
490 /* Save Speed Location. */
491 gconf_client_set_string(gconf_client,
492 GCONF_KEY_SPEED_LOCATION,
493 SPEED_LOCATION_ENUM_TEXT[_speed_location], NULL);
495 /* Save Info Font Size. */
496 gconf_client_set_string(gconf_client,
497 GCONF_KEY_INFO_FONT_SIZE,
498 INFO_FONT_ENUM_TEXT[_info_font_size], NULL);
500 /* Save Unblank Option. */
501 gconf_client_set_string(gconf_client,
502 GCONF_KEY_UNBLANK_SIZE,
503 UNBLANK_ENUM_TEXT[_unblank_option], NULL);
505 /* Save last saved latitude. */
506 gconf_client_set_float(gconf_client,
507 GCONF_KEY_LAST_LAT, _gps.lat, NULL);
509 /* Save last saved longitude. */
510 gconf_client_set_float(gconf_client,
511 GCONF_KEY_LAST_LON, _gps.lon, NULL);
513 /* Save last saved altitude. */
514 gconf_client_set_int(gconf_client,
515 GCONF_KEY_LAST_ALT, _pos.altitude, NULL);
517 /* Save last saved speed. */
518 gconf_client_set_float(gconf_client,
519 GCONF_KEY_LAST_SPEED, _gps.speed, NULL);
521 /* Save last saved heading. */
522 gconf_client_set_float(gconf_client,
523 GCONF_KEY_LAST_HEADING, _gps.heading, NULL);
525 /* Save last saved timestamp. */
526 gconf_client_set_float(gconf_client,
527 GCONF_KEY_LAST_TIME, _pos.time, NULL);
529 /* Save last center point. */
531 gdouble center_lat, center_lon;
532 unit2latlon(_center.unitx, _center.unity, center_lat, center_lon);
534 /* Save last center latitude. */
535 gconf_client_set_float(gconf_client,
536 GCONF_KEY_CENTER_LAT, center_lat, NULL);
538 /* Save last center longitude. */
539 gconf_client_set_float(gconf_client,
540 GCONF_KEY_CENTER_LON, center_lon, NULL);
542 /* Save last view angle. */
543 gconf_client_set_int(gconf_client,
544 GCONF_KEY_CENTER_ANGLE, _map_rotate_angle, NULL);
547 /* Save map correction. */
548 gconf_client_set_int(gconf_client,
549 GCONF_KEY_MAP_CORRECTION_UNITX, _map_correction_unitx, NULL);
550 gconf_client_set_int(gconf_client,
551 GCONF_KEY_MAP_CORRECTION_UNITY, _map_correction_unity, NULL);
553 /* Save last Zoom Level. */
554 gconf_client_set_int(gconf_client,
555 GCONF_KEY_ZOOM, _zoom, NULL);
557 /* Save Route Directory. */
559 gconf_client_set_string(gconf_client,
560 GCONF_KEY_ROUTEDIR, _route_dir_uri, NULL);
562 /* Save the repositories. */
564 GList *curr = _repo_list;
565 GSList *temp_list = NULL;
566 gint curr_repo_index = 0;
568 for(curr = _repo_list; curr != NULL; curr = curr->next)
570 /* Build from each part of a repo, delimited by newline characters:
578 * If layer_level > 0, have additional fields:
580 * 8. layer_refresh_interval
582 RepoData *rd = curr->data;
583 gchar buffer[BUFFER_SIZE];
586 if (!rd->layer_level)
587 snprintf(buffer, sizeof(buffer),
588 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
600 snprintf(buffer, sizeof(buffer),
601 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
613 rd->layer_refresh_interval
615 temp_list = g_slist_append(temp_list, g_strdup(buffer));
617 gconf_client_set_int(gconf_client,
618 GCONF_KEY_CURRREPO, curr_repo_index, NULL);
623 gconf_client_set_list(gconf_client,
624 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, temp_list, NULL);
627 /* Save Last Track File. */
629 gconf_client_set_string(gconf_client,
630 GCONF_KEY_TRACKFILE, _track_file_uri, NULL);
632 /* Save Auto-Center Mode. */
633 gconf_client_set_int(gconf_client,
634 GCONF_KEY_AUTOCENTER_MODE, _center_mode, NULL);
636 /* Save Auto-Center Rotate Flag. */
637 gconf_client_set_bool(gconf_client,
638 GCONF_KEY_AUTOCENTER_ROTATE, _center_rotate, NULL);
640 /* Save Show Zoom Level flag. */
641 gconf_client_set_bool(gconf_client,
642 GCONF_KEY_SHOWZOOMLEVEL, _show_zoomlevel, NULL);
644 /* Save Show Scale flag. */
645 gconf_client_set_bool(gconf_client,
646 GCONF_KEY_SHOWSCALE, _show_scale, NULL);
648 /* Save Show Compass Rose flag. */
649 gconf_client_set_bool(gconf_client,
650 GCONF_KEY_SHOWCOMPROSE, _show_comprose, NULL);
652 /* Save Show Tracks flag. */
653 gconf_client_set_bool(gconf_client,
654 GCONF_KEY_SHOWTRACKS, _show_paths & TRACKS_MASK, NULL);
656 /* Save Show Routes flag. */
657 gconf_client_set_bool(gconf_client,
658 GCONF_KEY_SHOWROUTES, _show_paths & ROUTES_MASK, NULL);
660 /* Save Show Velocity Vector flag. */
661 gconf_client_set_bool(gconf_client,
662 GCONF_KEY_SHOWVELVEC, _show_velvec, NULL);
664 /* Save Show POIs flag. */
665 gconf_client_set_bool(gconf_client,
666 GCONF_KEY_SHOWPOIS, _show_poi, NULL);
668 /* Save Enable GPS flag. */
669 gconf_client_set_bool(gconf_client,
670 GCONF_KEY_ENABLE_GPS, _enable_gps, NULL);
672 /* Save Enable Tracking flag. */
673 gconf_client_set_bool(gconf_client,
674 GCONF_KEY_ENABLE_TRACKING, _enable_tracking, NULL);
676 /* Save Route Locations. */
677 gconf_client_set_list(gconf_client,
678 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, _loc_list, NULL);
680 /* Save GPS Info flag. */
681 gconf_client_set_bool(gconf_client,
682 GCONF_KEY_GPS_INFO, _gps_info, NULL);
684 /* Save Route Download URL Format. */
685 gconf_client_set_string(gconf_client,
686 GCONF_KEY_ROUTE_DL_URL, _route_dl_url, NULL);
688 /* Save Route Download Radius. */
689 gconf_client_set_int(gconf_client,
690 GCONF_KEY_ROUTE_DL_RADIUS, _route_dl_radius, NULL);
692 /* Save POI Download URL Format. */
693 gconf_client_set_string(gconf_client,
694 GCONF_KEY_POI_DL_URL, _poi_dl_url, NULL);
699 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
701 snprintf(buffer, sizeof(buffer), "#%02x%02x%02x",
703 _color[i].green >> 8,
704 _color[i].blue >> 8);
705 gconf_client_set_string(gconf_client,
706 COLORABLE_GCONF[i], buffer, NULL);
710 /* Save POI database. */
712 gconf_client_set_string(gconf_client,
713 GCONF_KEY_POI_DB, _poi_db_filename, NULL);
715 gconf_client_unset(gconf_client, GCONF_KEY_POI_DB, NULL);
717 /* Save Show POI below zoom. */
718 gconf_client_set_int(gconf_client,
719 GCONF_KEY_POI_ZOOM, _poi_zoom, NULL);
721 gconf_client_clear_cache(gconf_client);
722 g_object_unref(gconf_client);
723 g_free(settings_dir);
725 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
729 scan_cb_dev_found(DBusGProxy *sig_proxy, const gchar *bda,
730 const gchar *name, gpointer *class, guchar rssi, gint coff,
734 printf("%s()\n", __PRETTY_FUNCTION__);
735 gtk_list_store_append(scan_info->store, &iter);
736 gtk_list_store_set(scan_info->store, &iter,
740 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
744 scan_cb_search_complete(DBusGProxy *sig_proxy, ScanInfo *scan_info)
746 printf("%s()\n", __PRETTY_FUNCTION__);
747 gtk_widget_destroy(scan_info->banner);
748 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_DEV_FOUND_SIG,
749 G_CALLBACK(scan_cb_dev_found), scan_info);
750 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_SEARCH_COMPLETE_SIG,
751 G_CALLBACK(scan_cb_search_complete), scan_info);
752 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
756 scan_start_search(ScanInfo *scan_info)
758 GError *error = NULL;
759 printf("%s()\n", __PRETTY_FUNCTION__);
761 /* Initialize D-Bus. */
762 if(NULL == (scan_info->bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error)))
764 g_printerr("Failed to open connection to D-Bus: %s.\n",
769 if(NULL == (scan_info->req_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
772 BTSEARCH_REQ_INTERFACE)))
774 g_printerr("Failed to create D-Bus request proxy for btsearch.");
778 if(NULL == (scan_info->sig_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
781 BTSEARCH_SIG_INTERFACE)))
783 g_printerr("Failed to create D-Bus signal proxy for btsearch.");
787 dbus_g_object_register_marshaller(
788 g_cclosure_user_marshal_VOID__STRING_STRING_POINTER_UCHAR_UINT,
792 DBUS_TYPE_G_UCHAR_ARRAY,
797 dbus_g_proxy_add_signal(scan_info->sig_proxy,
798 BTSEARCH_DEV_FOUND_SIG,
801 DBUS_TYPE_G_UCHAR_ARRAY,
805 dbus_g_proxy_connect_signal(scan_info->sig_proxy, BTSEARCH_DEV_FOUND_SIG,
806 G_CALLBACK(scan_cb_dev_found), scan_info, NULL);
808 dbus_g_proxy_add_signal(scan_info->sig_proxy,
809 BTSEARCH_SEARCH_COMPLETE_SIG,
811 dbus_g_proxy_connect_signal(scan_info->sig_proxy,
812 BTSEARCH_SEARCH_COMPLETE_SIG,
813 G_CALLBACK(scan_cb_search_complete), scan_info, NULL);
816 if(!dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_START_SEARCH_REQ,
817 &error, G_TYPE_INVALID, G_TYPE_INVALID))
819 if(error->domain == DBUS_GERROR
820 && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
822 g_printerr("Caught remote method exception %s: %s",
823 dbus_g_error_get_name(error),
827 g_printerr("Error: %s\n", error->message);
831 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
836 * Scan for all bluetooth devices. This method can take a few seconds,
837 * during which the UI will freeze.
840 scan_bluetooth(GtkWidget *widget, ScanInfo *scan_info)
842 GError *error = NULL;
843 GtkWidget *dialog = NULL;
844 GtkWidget *lst_devices = NULL;
845 GtkTreeViewColumn *column = NULL;
846 GtkCellRenderer *renderer = NULL;
847 printf("%s()\n", __PRETTY_FUNCTION__);
849 dialog = gtk_dialog_new_with_buttons(_("Select Bluetooth Device"),
850 GTK_WINDOW(scan_info->settings_dialog), GTK_DIALOG_MODAL,
851 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
852 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
855 scan_info->scan_dialog = dialog;
857 scan_info->store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
859 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
861 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
862 lst_devices = gtk_tree_view_new_with_model(
863 GTK_TREE_MODEL(scan_info->store)), TRUE, TRUE, 0);
865 g_object_unref(G_OBJECT(scan_info->store));
867 gtk_tree_selection_set_mode(
868 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
869 GTK_SELECTION_SINGLE);
870 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(lst_devices), TRUE);
872 renderer = gtk_cell_renderer_text_new();
873 column = gtk_tree_view_column_new_with_attributes(
874 _("MAC"), renderer, "text", 0, NULL);
875 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
877 renderer = gtk_cell_renderer_text_new();
878 column = gtk_tree_view_column_new_with_attributes(
879 _("Description"), renderer, "text", 1, NULL);
880 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
882 gtk_widget_show_all(dialog);
884 scan_info->banner = hildon_banner_show_animation(dialog, NULL,
885 _("Scanning for Bluetooth Devices"));
887 if(scan_start_search(scan_info))
889 gtk_widget_destroy(scan_info->banner);
890 popup_error(scan_info->settings_dialog,
891 _("An error occurred while attempting to scan for "
892 "bluetooth devices."));
894 else while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
897 if(gtk_tree_selection_get_selected(
898 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
902 gtk_tree_model_get(GTK_TREE_MODEL(scan_info->store),
904 gtk_entry_set_text(GTK_ENTRY(scan_info->txt_gps_bt_mac), mac);
909 _("Please select a bluetooth device from the list."));
912 gtk_widget_destroy(dialog);
914 /* Clean up D-Bus. */
915 if(scan_info->req_proxy)
917 dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_STOP_SEARCH_REQ,
918 &error, G_TYPE_INVALID, G_TYPE_INVALID);
919 g_object_unref(scan_info->req_proxy);
920 scan_info->req_proxy = NULL;
922 if(scan_info->sig_proxy)
924 g_object_unref(scan_info->sig_proxy);
925 scan_info->sig_proxy = NULL;
929 dbus_g_connection_unref(scan_info->bus);
930 scan_info->bus = NULL;
933 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
938 settings_dialog_browse_forfile(GtkWidget *widget, BrowseInfo *browse_info)
941 printf("%s()\n", __PRETTY_FUNCTION__);
944 hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),
945 GTK_FILE_CHOOSER_ACTION_OPEN));
947 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
948 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
949 gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
951 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(dialog)))
953 gchar *filename = gtk_file_chooser_get_filename(
954 GTK_FILE_CHOOSER(dialog));
955 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
959 gtk_widget_destroy(dialog);
961 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
966 settings_dialog_hardkeys_reset(GtkWidget *widget, KeysDialogInfo *cdi)
969 printf("%s()\n", __PRETTY_FUNCTION__);
971 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
972 _("Reset all hardware keys to their original defaults?"));
974 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
977 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
978 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
979 CUSTOM_KEY_DEFAULT[i]);
981 gtk_widget_destroy(confirm);
983 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
988 settings_dialog_hardkeys(GtkWidget *widget, GtkWidget *parent)
991 static GtkWidget *dialog = NULL;
992 static GtkWidget *table = NULL;
993 static GtkWidget *label = NULL;
994 static KeysDialogInfo bdi;
995 static GtkWidget *btn_defaults = NULL;
996 printf("%s()\n", __PRETTY_FUNCTION__);
1000 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
1001 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
1002 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1005 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1006 btn_defaults = gtk_button_new_with_label(_("Reset...")));
1007 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
1008 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
1010 gtk_dialog_add_button(GTK_DIALOG(dialog),
1011 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1013 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1014 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
1015 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1018 gtk_table_attach(GTK_TABLE(table),
1019 label = gtk_label_new(""),
1020 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
1021 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1022 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
1023 gtk_table_attach(GTK_TABLE(table),
1024 bdi.cmb[i] = gtk_combo_box_new_text(),
1025 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
1026 for(j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
1027 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
1028 CUSTOM_ACTION_ENUM_TEXT[j]);
1032 /* Initialize contents of the combo boxes. */
1033 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1034 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
1036 gtk_widget_show_all(dialog);
1039 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1041 /* Check for duplicates. */
1042 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1045 for(j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++)
1047 if(gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))
1048 == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j])))
1051 gchar *buffer = g_strdup_printf("%s:\n %s\n%s",
1052 _("The following action is mapped to multiple keys"),
1053 CUSTOM_ACTION_ENUM_TEXT[gtk_combo_box_get_active(
1054 GTK_COMBO_BOX(bdi.cmb[i]))],
1056 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
1059 if(GTK_RESPONSE_OK != gtk_dialog_run(GTK_DIALOG(confirm)))
1061 gtk_widget_destroy(confirm);
1064 gtk_widget_destroy(confirm);
1068 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1069 _action[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
1073 gtk_widget_hide(dialog);
1075 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1080 settings_dialog_colors_reset(GtkWidget *widget, ColorsDialogInfo *cdi)
1083 printf("%s()\n", __PRETTY_FUNCTION__);
1085 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
1086 _("Reset all colors to their original defaults?"));
1088 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
1091 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
1093 hildon_color_button_set_color(
1094 HILDON_COLOR_BUTTON(cdi->col[i]),
1095 &COLORABLE_DEFAULT[i]);
1098 gtk_widget_destroy(confirm);
1100 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1105 settings_dialog_colors(GtkWidget *widget, GtkWidget *parent)
1107 static GtkWidget *dialog = NULL;
1108 static GtkWidget *table = NULL;
1109 static GtkWidget *label = NULL;
1110 static GtkWidget *btn_defaults = NULL;
1111 static ColorsDialogInfo cdi;
1112 printf("%s()\n", __PRETTY_FUNCTION__);
1116 dialog = gtk_dialog_new_with_buttons(_("Colors"),
1117 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
1118 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1121 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1122 btn_defaults = gtk_button_new_with_label(_("Reset...")));
1123 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
1124 G_CALLBACK(settings_dialog_colors_reset), &cdi);
1126 gtk_dialog_add_button(GTK_DIALOG(dialog),
1127 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1129 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1130 table = gtk_table_new(4, 3, FALSE), TRUE, TRUE, 0);
1133 gtk_table_attach(GTK_TABLE(table),
1134 label = gtk_label_new(_("GPS")),
1135 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1136 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1137 gtk_table_attach(GTK_TABLE(table),
1138 cdi.col[COLORABLE_MARK] = hildon_color_button_new(),
1139 1, 2, 0, 1, 0, 0, 2, 4);
1140 gtk_table_attach(GTK_TABLE(table),
1141 cdi.col[COLORABLE_MARK_VELOCITY] = hildon_color_button_new(),
1142 2, 3, 0, 1, 0, 0, 2, 4);
1143 gtk_table_attach(GTK_TABLE(table),
1144 cdi.col[COLORABLE_MARK_OLD] = hildon_color_button_new(),
1145 3, 4, 0, 1, 0, 0, 2, 4);
1148 gtk_table_attach(GTK_TABLE(table),
1149 label = gtk_label_new(_("Track")),
1150 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1151 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1152 gtk_table_attach(GTK_TABLE(table),
1153 cdi.col[COLORABLE_TRACK] = hildon_color_button_new(),
1154 1, 2, 1, 2, 0, 0, 2, 4);
1155 gtk_table_attach(GTK_TABLE(table),
1156 cdi.col[COLORABLE_TRACK_MARK] = hildon_color_button_new(),
1157 2, 3, 1, 2, 0, 0, 2, 4);
1158 gtk_table_attach(GTK_TABLE(table),
1159 cdi.col[COLORABLE_TRACK_BREAK] = hildon_color_button_new(),
1160 3, 4, 1, 2, 0, 0, 2, 4);
1163 gtk_table_attach(GTK_TABLE(table),
1164 label = gtk_label_new(_("Route")),
1165 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1166 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1167 gtk_table_attach(GTK_TABLE(table),
1168 cdi.col[COLORABLE_ROUTE] = hildon_color_button_new(),
1169 1, 2, 2, 3, 0, 0, 2, 4);
1170 gtk_table_attach(GTK_TABLE(table),
1171 cdi.col[COLORABLE_ROUTE_WAY] = hildon_color_button_new(),
1172 2, 3, 2, 3, 0, 0, 2, 4);
1173 gtk_table_attach(GTK_TABLE(table),
1174 cdi.col[COLORABLE_ROUTE_BREAK] = hildon_color_button_new(),
1175 3, 4, 2, 3, 0, 0, 2, 4);
1178 gtk_table_attach(GTK_TABLE(table),
1179 label = gtk_label_new(_("POI")),
1180 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
1181 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1182 gtk_table_attach(GTK_TABLE(table),
1183 cdi.col[COLORABLE_POI] = hildon_color_button_new(),
1184 1, 2, 3, 4, 0, 0, 2, 4);
1187 /* Initialize GPS. */
1188 hildon_color_button_set_color(
1189 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
1190 &_color[COLORABLE_MARK]);
1191 hildon_color_button_set_color(
1192 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
1193 &_color[COLORABLE_MARK_VELOCITY]);
1194 hildon_color_button_set_color(
1195 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1196 &_color[COLORABLE_MARK_OLD]);
1198 /* Initialize Track. */
1199 hildon_color_button_set_color(
1200 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1201 &_color[COLORABLE_TRACK]);
1202 hildon_color_button_set_color(
1203 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1204 &_color[COLORABLE_TRACK_MARK]);
1205 hildon_color_button_set_color(
1206 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1207 &_color[COLORABLE_TRACK_BREAK]);
1209 /* Initialize Route. */
1210 hildon_color_button_set_color(
1211 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1212 &_color[COLORABLE_ROUTE]);
1213 hildon_color_button_set_color(
1214 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1215 &_color[COLORABLE_ROUTE_WAY]);
1216 hildon_color_button_set_color(
1217 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1218 &_color[COLORABLE_ROUTE_BREAK]);
1220 /* Initialize POI. */
1221 hildon_color_button_set_color(
1222 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1223 &_color[COLORABLE_POI]);
1225 gtk_widget_show_all(dialog);
1227 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1230 hildon_color_button_get_color(
1231 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
1232 &_color[COLORABLE_MARK]);
1234 hildon_color_button_get_color(
1235 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
1236 &_color[COLORABLE_MARK_VELOCITY]);
1238 hildon_color_button_get_color(
1239 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1240 &_color[COLORABLE_MARK_OLD]);
1242 hildon_color_button_get_color(
1243 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1244 &_color[COLORABLE_TRACK]);
1246 hildon_color_button_get_color(
1247 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1248 &_color[COLORABLE_TRACK_MARK]);
1250 hildon_color_button_get_color(
1251 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1252 &_color[COLORABLE_TRACK_BREAK]);
1254 hildon_color_button_get_color(
1255 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1256 &_color[COLORABLE_ROUTE]);
1258 hildon_color_button_get_color(
1259 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1260 &_color[COLORABLE_ROUTE_WAY]);
1262 hildon_color_button_get_color(
1263 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1264 &_color[COLORABLE_ROUTE_BREAK]);
1266 hildon_color_button_get_color(
1267 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1268 &_color[COLORABLE_POI]);
1272 color = hildon_color_button_get_color(
1273 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]));
1274 _color[COLORABLE_MARK] = *color;
1276 color = hildon_color_button_get_color(
1277 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]));
1278 _color[COLORABLE_MARK_VELOCITY] = *color;
1280 color = hildon_color_button_get_color(
1281 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]));
1282 _color[COLORABLE_MARK_OLD] = *color;
1284 color = hildon_color_button_get_color(
1285 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]));
1286 _color[COLORABLE_TRACK] = *color;
1288 color = hildon_color_button_get_color(
1289 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]));
1290 _color[COLORABLE_TRACK_MARK] = *color;
1292 color = hildon_color_button_get_color(
1293 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]));
1294 _color[COLORABLE_TRACK_BREAK] = *color;
1296 color = hildon_color_button_get_color(
1297 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]));
1298 _color[COLORABLE_ROUTE] = *color;
1300 color = hildon_color_button_get_color(
1301 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]));
1302 _color[COLORABLE_ROUTE_WAY] = *color;
1304 color = hildon_color_button_get_color(
1305 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]));
1306 _color[COLORABLE_ROUTE_BREAK] = *color;
1308 color = hildon_color_button_get_color(
1309 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]));
1310 _color[COLORABLE_POI] = *color;
1320 gtk_widget_hide(dialog);
1322 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1328 void load_aprs_options(GConfClient *gconf_client)
1330 _aprs_server = gconf_client_get_string(
1331 gconf_client, GCONF_KEY_APRS_SERVER, NULL);
1333 _aprs_server_port = gconf_client_get_int(
1334 gconf_client, GCONF_KEY_APRS_SERVER_PORT, NULL);
1336 _aprs_inet_server_validation = gconf_client_get_string(
1337 gconf_client, GCONF_KEY_APRS_SERVER_VAL, NULL);
1339 _aprs_mycall = gconf_client_get_string(gconf_client,
1340 GCONF_KEY_APRS_MYCALL, NULL);
1343 _aprs_tty_port = gconf_client_get_string(gconf_client,
1344 GCONF_KEY_APRS_TTY_PORT, NULL);
1348 _aprs_inet_beacon_comment = gconf_client_get_string(gconf_client,
1349 GCONF_KEY_APRS_INET_BEACON, NULL);
1351 _aprs_inet_beacon_interval = gconf_client_get_int(
1352 gconf_client, GCONF_KEY_APRS_INET_BEACON_INTERVAL, NULL);
1354 _aprs_std_pos_hist = gconf_client_get_int(
1355 gconf_client, GCONF_KEY_APRS_MAX_TRACK_PTS, NULL);
1357 _aprs_max_stations = gconf_client_get_int(
1358 gconf_client, GCONF_KEY_APRS_MAX_STATIONS, NULL);
1360 _aprs_enable = gconf_client_get_bool(gconf_client,
1361 GCONF_KEY_APRS_ENABLE, NULL);
1363 _aprs_show_new_station_alert = gconf_client_get_bool(gconf_client,
1364 GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, NULL);
1366 _aprs_tnc_method = gconf_client_get_int(
1367 gconf_client, GCONF_KEY_APRS_TNC_CONN_METHOD, NULL);
1369 _aprs_tnc_bt_mac = gconf_client_get_string(gconf_client,
1370 GCONF_KEY_APRS_TNC_BT_MAC, NULL);
1372 _aprs_server_auto_filter_km = gconf_client_get_int(
1373 gconf_client, GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, NULL);
1375 _aprs_server_auto_filter_on = gconf_client_get_bool(gconf_client,
1376 GCONF_KEY_APRS_INET_AUTO_FILTER, NULL);
1378 _aprs_beacon_comment = gconf_client_get_string(gconf_client,
1379 GCONF_KEY_APRS_BEACON_COMMENT, NULL);
1381 _aprs_enable_inet_tx = gconf_client_get_bool(gconf_client,
1382 GCONF_KEY_APRS_ENABLE_INET_TX, NULL);
1383 _aprs_enable_tty_tx = gconf_client_get_bool(gconf_client,
1384 GCONF_KEY_APRS_ENABLE_TTY_TX, NULL);
1386 _aprs_tty_beacon_interval = gconf_client_get_int(
1387 gconf_client, GCONF_KEY_APRS_TTY_BEACON_INTERVAL, NULL);
1390 //_aprs_unproto_path = g_strdup_printf("WIDE2-2");
1391 _aprs_unproto_path = gconf_client_get_string(gconf_client,
1392 GCONF_KEY_APRS_BEACON_PATH, NULL);
1394 _aprs_transmit_compressed_posit = gconf_client_get_bool(gconf_client,
1395 GCONF_KEY_APRS_BEACON_COMPRESSED, NULL);
1398 tmp = gconf_client_get_string(gconf_client,
1399 GCONF_KEY_APRS_BEACON_SYM_GROUP, NULL);
1400 if(tmp && strlen(tmp)>0) _aprs_beacon_group = tmp[0];
1401 else _aprs_beacon_group = '/';
1403 //_aprs_beacon_symbol = 'k';
1404 tmp = gconf_client_get_string(gconf_client,
1405 GCONF_KEY_APRS_BEACON_SYMBOL, NULL);
1406 if(tmp && strlen(tmp)>0) _aprs_beacon_symbol = tmp[0];
1407 else _aprs_beacon_symbol = 'l';
1413 #endif // INCLUDE_APRS
1416 * Bring up the Settings dialog. Return TRUE if and only if the recever
1417 * information has changed (MAC or channel).
1419 gboolean settings_dialog()
1421 static GtkWidget *dialog = NULL;
1422 static GtkWidget *notebook = NULL;
1423 static GtkWidget *table = NULL;
1424 static GtkWidget *hbox = NULL;
1425 static GtkWidget *label = NULL;
1426 static GtkWidget *rad_gps_bt = NULL;
1427 static GtkWidget *rad_gps_gpsd = NULL;
1428 static GtkWidget *rad_gps_file = NULL;
1429 static GtkWidget *txt_gps_bt_mac = NULL;
1430 static GtkWidget *txt_gps_gpsd_host = NULL;
1431 static GtkWidget *num_gps_gpsd_port = NULL;
1432 static GtkWidget *txt_gps_file_path = NULL;
1433 static GtkWidget *num_center_ratio = NULL;
1434 static GtkWidget *num_lead_ratio = NULL;
1435 static GtkWidget *chk_lead_is_fixed = NULL;
1436 static GtkWidget *num_rotate_sens = NULL;
1437 static GtkWidget *cmb_rotate_dir = NULL;
1438 static GtkWidget *num_ac_min_speed = NULL;
1439 static GtkWidget *num_announce_notice = NULL;
1440 static GtkWidget *chk_enable_voice = NULL;
1441 static GtkWidget *chk_enable_announce = NULL;
1442 static GtkWidget *num_draw_width = NULL;
1443 static GtkWidget *cmb_units = NULL;
1444 static GtkWidget *cmb_degformat = NULL;
1445 static GtkWidget *btn_scan = NULL;
1446 static GtkWidget *btn_browse_gps = NULL;
1447 static GtkWidget *btn_buttons = NULL;
1448 static GtkWidget *btn_colors = NULL;
1450 static GtkWidget *txt_poi_db = NULL;
1451 static GtkWidget *btn_browse_poi = NULL;
1452 static GtkWidget *num_poi_zoom = NULL;
1453 static GtkWidget *num_auto_download_precache = NULL;
1454 static GtkWidget *chk_speed_limit_on = NULL;
1455 static GtkWidget *num_speed = NULL;
1456 static GtkWidget *cmb_speed_location = NULL;
1457 static GtkWidget *cmb_unblank_option = NULL;
1458 static GtkWidget *cmb_info_font_size = NULL;
1460 static BrowseInfo poi_browse_info = {0, 0};
1461 static BrowseInfo gps_file_browse_info = {0, 0};
1462 static ScanInfo scan_info = {0};
1463 gboolean rcvr_changed = FALSE;
1465 printf("%s()\n", __PRETTY_FUNCTION__);
1469 dialog = gtk_dialog_new_with_buttons(_("Settings"),
1470 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
1471 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1474 /* Enable the help button. */
1476 hildon_help_dialog_help_enable(
1478 ossohelp_dialog_help_enable(
1480 GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
1482 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1483 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
1485 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1486 btn_colors = gtk_button_new_with_label(_("Colors...")));
1488 gtk_dialog_add_button(GTK_DIALOG(dialog),
1489 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1491 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1492 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
1494 /* Receiver page. */
1495 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1496 table = gtk_table_new(3, 4, FALSE),
1497 label = gtk_label_new(_("GPS")));
1499 /* Receiver MAC Address. */
1500 gtk_table_attach(GTK_TABLE(table),
1501 rad_gps_bt = gtk_radio_button_new_with_label(
1502 NULL, _("Bluetooth")),
1503 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1504 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1505 gtk_table_attach(GTK_TABLE(table),
1506 hbox = gtk_hbox_new(FALSE, 4),
1507 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1508 gtk_box_pack_start(GTK_BOX(hbox),
1509 txt_gps_bt_mac = gtk_entry_new(),
1511 #ifdef MAEMO_CHANGES
1513 g_object_set(G_OBJECT(txt_gps_bt_mac), "hildon-input-mode",
1514 HILDON_GTK_INPUT_MODE_FULL, NULL);
1516 g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
1519 gtk_box_pack_start(GTK_BOX(hbox),
1520 btn_scan = gtk_button_new_with_label(_("Scan...")),
1522 #ifndef HAVE_LIBGPSBT
1523 gtk_widget_set_sensitive(rad_gps_bt, FALSE);
1524 gtk_widget_set_sensitive(txt_gps_bt_mac, FALSE);
1525 gtk_widget_set_sensitive(btn_scan, FALSE);
1528 /* File Path (RFComm). */
1529 gtk_table_attach(GTK_TABLE(table),
1530 rad_gps_file = gtk_radio_button_new_with_label_from_widget(
1531 GTK_RADIO_BUTTON(rad_gps_bt), _("File Path")),
1532 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1533 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1534 gtk_table_attach(GTK_TABLE(table),
1535 hbox = gtk_hbox_new(FALSE, 4),
1536 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1537 gtk_box_pack_start(GTK_BOX(hbox),
1538 txt_gps_file_path = gtk_entry_new(),
1540 #ifdef MAEMO_CHANGES
1542 g_object_set(G_OBJECT(txt_gps_file_path), "hildon-input-mode",
1543 HILDON_GTK_INPUT_MODE_FULL, NULL);
1545 g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
1548 gtk_box_pack_start(GTK_BOX(hbox),
1549 btn_browse_gps = gtk_button_new_with_label(_("Browse...")),
1551 #ifndef HAVE_LIBGPSBT
1552 gtk_widget_set_sensitive(rad_gps_file, FALSE);
1553 gtk_widget_set_sensitive(txt_gps_file_path, FALSE);
1554 gtk_widget_set_sensitive(btn_browse_gps, FALSE);
1557 /* GPSD Hostname and Port. */
1558 gtk_table_attach(GTK_TABLE(table),
1559 rad_gps_gpsd = gtk_radio_button_new_with_label_from_widget(
1560 GTK_RADIO_BUTTON(rad_gps_bt), _("GPSD Host")),
1561 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1562 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1563 gtk_table_attach(GTK_TABLE(table),
1564 hbox = gtk_hbox_new(FALSE, 4),
1565 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1566 gtk_box_pack_start(GTK_BOX(hbox),
1567 txt_gps_gpsd_host = gtk_entry_new(),
1569 #ifdef MAEMO_CHANGES
1571 g_object_set(G_OBJECT(txt_gps_gpsd_host), "hildon-input-mode",
1572 HILDON_GTK_INPUT_MODE_FULL, NULL);
1574 g_object_set(G_OBJECT(txt_gps_gpsd_host), HILDON_AUTOCAP, FALSE, NULL);
1577 gtk_box_pack_start(GTK_BOX(hbox),
1578 label = gtk_label_new(_("Port")),
1580 gtk_box_pack_start(GTK_BOX(hbox),
1581 num_gps_gpsd_port = hildon_number_editor_new(1, 65535),
1585 /* Auto-Center page. */
1586 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1587 table = gtk_table_new(3, 3, FALSE),
1588 label = gtk_label_new(_("Auto-Center")));
1591 gtk_table_attach(GTK_TABLE(table),
1592 label = gtk_label_new(_("Lead Amount")),
1593 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1594 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1595 gtk_table_attach(GTK_TABLE(table),
1596 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1597 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1598 gtk_container_add(GTK_CONTAINER(label),
1599 num_lead_ratio = hildon_controlbar_new());
1600 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
1601 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
1603 gtk_table_attach(GTK_TABLE(table),
1604 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1605 2, 3, 0, 1, GTK_FILL, 0, 2, 4);
1606 gtk_container_add(GTK_CONTAINER(label),
1607 chk_lead_is_fixed = gtk_check_button_new_with_label(_("Fixed")));
1609 /* Auto-Center Pan Sensitivity. */
1610 gtk_table_attach(GTK_TABLE(table),
1611 label = gtk_label_new(_("Pan Sensitivity")),
1612 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1613 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1614 gtk_table_attach(GTK_TABLE(table),
1615 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1616 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1617 gtk_container_add(GTK_CONTAINER(label),
1618 num_center_ratio = hildon_controlbar_new());
1619 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1,10);
1620 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
1622 gtk_table_attach(GTK_TABLE(table),
1623 hbox = gtk_hbox_new(FALSE, 4),
1624 2, 3, 1, 2, GTK_FILL, 0, 2, 4);
1625 gtk_box_pack_start(GTK_BOX(hbox),
1626 label = gtk_label_new(_("Min. Speed")),
1628 gtk_box_pack_start(GTK_BOX(hbox),
1629 num_ac_min_speed = hildon_number_editor_new(0, 99),
1632 /* Auto-Center Rotate Sensitivity. */
1633 gtk_table_attach(GTK_TABLE(table),
1634 label = gtk_label_new(_("Rotate Sensit.")),
1635 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1636 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1637 gtk_table_attach(GTK_TABLE(table),
1638 num_rotate_sens = hildon_controlbar_new(),
1639 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1640 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_rotate_sens), 1,10);
1641 force_min_visible_bars(HILDON_CONTROLBAR(num_rotate_sens), 1);
1643 gtk_table_attach(GTK_TABLE(table),
1644 hbox = gtk_hbox_new(FALSE, 4),
1645 2, 3, 2, 3, GTK_FILL, 0, 2, 4);
1646 gtk_box_pack_start(GTK_BOX(hbox),
1647 label = gtk_label_new(_("Points")),
1649 gtk_box_pack_start(GTK_BOX(hbox),
1650 cmb_rotate_dir = gtk_combo_box_new_text(),
1652 for(i = 0; i < ROTATE_DIR_ENUM_COUNT; i++)
1653 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_rotate_dir),
1654 ROTATE_DIR_ENUM_TEXT[i]);
1657 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1658 table = gtk_table_new(2, 3, FALSE),
1659 label = gtk_label_new(_("Announce")));
1661 /* Enable Waypoint Announcements. */
1662 gtk_table_attach(GTK_TABLE(table),
1663 chk_enable_announce = gtk_check_button_new_with_label(
1664 _("Enable Waypoint Announcements")),
1665 0, 2, 0, 1, GTK_FILL, 0, 2, 4);
1666 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_announce),
1669 /* Announcement Advance Notice. */
1670 gtk_table_attach(GTK_TABLE(table),
1671 label = gtk_label_new(_("Advance Notice")),
1672 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1673 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1674 gtk_table_attach(GTK_TABLE(table),
1675 num_announce_notice = hildon_controlbar_new(),
1676 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1677 hildon_controlbar_set_range(
1678 HILDON_CONTROLBAR(num_announce_notice), 1, 20);
1679 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
1682 gtk_table_attach(GTK_TABLE(table),
1683 chk_enable_voice = gtk_check_button_new_with_label(
1684 _("Enable Voice Synthesis (requires flite)")),
1685 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
1686 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
1690 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1691 table = gtk_table_new(3, 5, FALSE),
1692 label = gtk_label_new(_("Misc.")));
1695 gtk_table_attach(GTK_TABLE(table),
1696 label = gtk_label_new(_("Line Width")),
1697 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1698 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1699 gtk_table_attach(GTK_TABLE(table),
1700 num_draw_width = hildon_controlbar_new(),
1701 1, 5, 0, 1, GTK_FILL, 0, 2, 4);
1702 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
1703 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
1705 /* Unblank Screen */
1706 gtk_table_attach(GTK_TABLE(table),
1707 label = gtk_label_new(_("Unblank Screen")),
1708 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1709 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1710 gtk_table_attach(GTK_TABLE(table),
1711 cmb_unblank_option = gtk_combo_box_new_text(),
1712 1, 5, 1, 2, GTK_FILL, 0, 2, 4);
1713 for(i = 0; i < UNBLANK_ENUM_COUNT; i++)
1714 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_unblank_option),
1715 UNBLANK_ENUM_TEXT[i]);
1717 /* Information Font Size. */
1718 gtk_table_attach(GTK_TABLE(table),
1719 label = gtk_label_new(_("Info Font Size")),
1720 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1721 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1722 gtk_table_attach(GTK_TABLE(table),
1723 cmb_info_font_size = gtk_combo_box_new_text(),
1724 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1725 for(i = 0; i < INFO_FONT_ENUM_COUNT; i++)
1726 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
1727 INFO_FONT_ENUM_TEXT[i]);
1729 gtk_table_attach(GTK_TABLE(table),
1730 gtk_vseparator_new(),
1731 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2,4);
1735 gtk_table_attach(GTK_TABLE(table),
1736 label = gtk_label_new(_("Units")),
1737 3, 4, 2, 3, GTK_FILL, 0, 2, 4);
1738 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1739 gtk_table_attach(GTK_TABLE(table),
1740 cmb_units = gtk_combo_box_new_text(),
1741 4, 5, 2, 3, GTK_FILL, 0, 2, 4);
1742 for(i = 0; i < UNITS_ENUM_COUNT; i++)
1743 gtk_combo_box_append_text(
1744 GTK_COMBO_BOX(cmb_units), UNITS_ENUM_TEXT[i]);
1747 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1748 table = gtk_table_new(3, 4, FALSE),
1749 label = gtk_label_new(_("Misc. 2")));
1751 /* Degrees format */
1752 gtk_table_attach(GTK_TABLE(table),
1753 label = gtk_label_new(_("Degrees Format")),
1754 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1755 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1756 gtk_table_attach(GTK_TABLE(table),
1757 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1758 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1759 gtk_container_add(GTK_CONTAINER(label),
1760 cmb_degformat = gtk_combo_box_new_text());
1761 for(i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
1762 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
1763 DEG_FORMAT_ENUM_TEXT[i].name);
1765 gtk_table_attach(GTK_TABLE(table),
1766 label = gtk_label_new(_("Auto-Download Pre-cache")),
1767 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1768 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1769 gtk_table_attach(GTK_TABLE(table),
1770 num_auto_download_precache = hildon_controlbar_new(),
1771 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1772 hildon_controlbar_set_range(
1773 HILDON_CONTROLBAR(num_auto_download_precache), 1, 5);
1774 force_min_visible_bars(
1775 HILDON_CONTROLBAR(num_auto_download_precache), 1);
1778 gtk_table_attach(GTK_TABLE(table),
1779 hbox = gtk_hbox_new(FALSE, 4),
1780 0, 4, 2, 3, GTK_FILL, 0, 2, 4);
1782 gtk_box_pack_start(GTK_BOX(hbox),
1783 chk_speed_limit_on = gtk_check_button_new_with_label(
1787 gtk_box_pack_start(GTK_BOX(hbox),
1788 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1790 gtk_container_add(GTK_CONTAINER(label),
1791 num_speed = hildon_number_editor_new(0, 999));
1793 gtk_box_pack_start(GTK_BOX(hbox),
1794 label = gtk_label_new(_("Location")),
1796 gtk_box_pack_start(GTK_BOX(hbox),
1797 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1799 gtk_container_add(GTK_CONTAINER(label),
1800 cmb_speed_location = gtk_combo_box_new_text());
1801 for(i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
1802 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
1803 SPEED_LOCATION_ENUM_TEXT[i]);
1807 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1808 table = gtk_table_new(2, 3, FALSE),
1809 label = gtk_label_new(_("POI")));
1812 gtk_table_attach(GTK_TABLE(table),
1813 label = gtk_label_new(_("POI database")),
1814 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1815 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1816 gtk_table_attach(GTK_TABLE(table),
1817 hbox = gtk_hbox_new(FALSE, 4),
1818 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1819 gtk_box_pack_start(GTK_BOX(hbox),
1820 txt_poi_db = gtk_entry_new(),
1822 #ifdef MAEMO_CHANGES
1824 g_object_set(G_OBJECT(txt_poi_db), "hildon-input-mode",
1825 HILDON_GTK_INPUT_MODE_FULL, NULL);
1827 g_object_set(G_OBJECT(txt_poi_db), HILDON_AUTOCAP, FALSE, NULL);
1830 gtk_box_pack_start(GTK_BOX(hbox),
1831 btn_browse_poi = gtk_button_new_with_label(_("Browse...")),
1834 /* Show POI below zoom. */
1835 gtk_table_attach(GTK_TABLE(table),
1836 label = gtk_label_new(_("Show POI below zoom")),
1837 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1838 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1839 gtk_table_attach(GTK_TABLE(table),
1840 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1841 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1842 gtk_container_add(GTK_CONTAINER(label),
1843 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
1845 /* Connect signals. */
1846 memset(&scan_info, 0, sizeof(scan_info));
1847 scan_info.settings_dialog = dialog;
1848 scan_info.txt_gps_bt_mac = txt_gps_bt_mac;
1849 g_signal_connect(G_OBJECT(btn_scan), "clicked",
1850 G_CALLBACK(scan_bluetooth), &scan_info);
1851 g_signal_connect(G_OBJECT(btn_buttons), "clicked",
1852 G_CALLBACK(settings_dialog_hardkeys), dialog);
1853 g_signal_connect(G_OBJECT(btn_colors), "clicked",
1854 G_CALLBACK(settings_dialog_colors), dialog);
1856 poi_browse_info.dialog = dialog;
1857 poi_browse_info.txt = txt_poi_db;
1858 g_signal_connect(G_OBJECT(btn_browse_poi), "clicked",
1859 G_CALLBACK(settings_dialog_browse_forfile), &poi_browse_info);
1861 gps_file_browse_info.dialog = dialog;
1862 gps_file_browse_info.txt = txt_gps_file_path;
1863 g_signal_connect(G_OBJECT(btn_browse_gps), "clicked",
1864 G_CALLBACK(settings_dialog_browse_forfile),
1865 &gps_file_browse_info);
1869 /* Initialize fields. */
1871 gtk_entry_set_text(GTK_ENTRY(txt_gps_bt_mac), _gri.bt_mac);
1873 gtk_entry_set_text(GTK_ENTRY(txt_gps_gpsd_host), _gri.gpsd_host);
1874 hildon_number_editor_set_value(
1875 HILDON_NUMBER_EDITOR(num_gps_gpsd_port), _gri.gpsd_port);
1877 gtk_entry_set_text(GTK_ENTRY(txt_gps_file_path), _gri.file_path);
1881 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd),TRUE);
1884 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_file),TRUE);
1886 default: /* Including GPS_RCVR_BT */
1887 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_bt), TRUE);
1891 if(_poi_db_filename)
1892 gtk_entry_set_text(GTK_ENTRY(txt_poi_db), _poi_db_filename);
1893 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
1895 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
1897 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
1899 gtk_toggle_button_set_active(
1900 GTK_TOGGLE_BUTTON(chk_lead_is_fixed), _lead_is_fixed);
1901 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_rotate_sens),
1903 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_rotate_dir), _rotate_dir);
1904 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_ac_min_speed),
1906 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
1907 _announce_notice_ratio);
1908 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
1910 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
1911 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
1912 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
1914 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_auto_download_precache),
1915 _auto_download_precache);
1916 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed),
1918 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location),
1920 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_unblank_option),
1922 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size),
1925 gtk_widget_show_all(dialog);
1927 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1929 GpsRcvrType new_grtype;
1931 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd))
1932 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1934 popup_error(dialog, _("Please specify a GPSD hostname."));
1938 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file))
1939 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
1941 popup_error(dialog, _("Please specify a GPS file pathname."));
1945 /* Set _gri.bt_mac if necessary. */
1946 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac)))
1948 /* User specified no rcvr mac - set _gri.bt_mac to NULL. */
1951 g_free(_gri.bt_mac);
1953 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1956 else if(!_gri.bt_mac || strcmp(_gri.bt_mac,
1957 gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac))))
1959 /* User specified a new rcvr mac. */
1960 g_free(_gri.bt_mac);
1961 _gri.bt_mac = g_strdup(gtk_entry_get_text(
1962 GTK_ENTRY(txt_gps_bt_mac)));
1963 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1966 /* Set _gri.gpsd_host if necessary. */
1967 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1969 /* User specified no rcvr mac - set _gri.gpsd_host to NULL. */
1972 g_free(_gri.gpsd_host);
1973 _gri.gpsd_host = NULL;
1974 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1977 else if(!_gri.gpsd_host || strcmp(_gri.gpsd_host,
1978 gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host))))
1980 /* User specified a new rcvr mac. */
1981 g_free(_gri.gpsd_host);
1982 _gri.gpsd_host = g_strdup(gtk_entry_get_text(
1983 GTK_ENTRY(txt_gps_gpsd_host)));
1984 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1987 if(_gri.gpsd_port != hildon_number_editor_get_value(
1988 HILDON_NUMBER_EDITOR(num_gps_gpsd_port)))
1990 _gri.gpsd_port = hildon_number_editor_get_value(
1991 HILDON_NUMBER_EDITOR(num_gps_gpsd_port));
1992 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1995 /* Set _gri.file_path if necessary. */
1996 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
1998 /* User specified no rcvr mac - set _gri.file_path to NULL. */
2001 g_free(_gri.file_path);
2002 _gri.file_path = NULL;
2003 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
2006 else if(!_gri.file_path || strcmp(_gri.file_path,
2007 gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path))))
2009 /* User specified a new rcvr mac. */
2010 g_free(_gri.file_path);
2011 _gri.file_path = g_strdup(gtk_entry_get_text(
2012 GTK_ENTRY(txt_gps_file_path)));
2013 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
2016 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_bt)))
2017 new_grtype = GPS_RCVR_BT;
2018 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd)))
2019 new_grtype = GPS_RCVR_GPSD;
2020 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file)))
2021 new_grtype = GPS_RCVR_FILE;
2023 new_grtype = GPS_RCVR_BT;
2025 if(new_grtype != _gri.type)
2027 _gri.type = new_grtype;
2028 rcvr_changed = TRUE;
2031 _center_ratio = hildon_controlbar_get_value(
2032 HILDON_CONTROLBAR(num_center_ratio));
2034 _lead_ratio = hildon_controlbar_get_value(
2035 HILDON_CONTROLBAR(num_lead_ratio));
2037 _lead_is_fixed = gtk_toggle_button_get_active(
2038 GTK_TOGGLE_BUTTON(chk_lead_is_fixed));
2040 _rotate_sens = hildon_controlbar_get_value(
2041 HILDON_CONTROLBAR(num_rotate_sens));
2043 _ac_min_speed = hildon_number_editor_get_value(
2044 HILDON_NUMBER_EDITOR(num_ac_min_speed));
2046 _rotate_dir = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_rotate_dir));
2048 _auto_download_precache = hildon_controlbar_get_value(
2049 HILDON_CONTROLBAR(num_auto_download_precache));
2051 _draw_width = hildon_controlbar_get_value(
2052 HILDON_CONTROLBAR(num_draw_width));
2054 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
2055 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
2057 _speed_limit_on = gtk_toggle_button_get_active(
2058 GTK_TOGGLE_BUTTON(chk_speed_limit_on));
2059 _speed_limit = hildon_number_editor_get_value(
2060 HILDON_NUMBER_EDITOR(num_speed));
2061 _speed_location = gtk_combo_box_get_active(
2062 GTK_COMBO_BOX(cmb_speed_location));
2064 _unblank_option = gtk_combo_box_get_active(
2065 GTK_COMBO_BOX(cmb_unblank_option));
2067 _info_font_size = gtk_combo_box_get_active(
2068 GTK_COMBO_BOX(cmb_info_font_size));
2070 _announce_notice_ratio = hildon_controlbar_get_value(
2071 HILDON_CONTROLBAR(num_announce_notice));
2073 _enable_announce = gtk_toggle_button_get_active(
2074 GTK_TOGGLE_BUTTON(chk_enable_announce));
2076 _enable_voice = gtk_toggle_button_get_active(
2077 GTK_TOGGLE_BUTTON(chk_enable_voice));
2079 /* Check if user specified a different POI database from before. */
2080 if((!_poi_db_filename && *gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
2081 || strcmp(_poi_db_filename,
2082 gtk_entry_get_text(GTK_ENTRY(txt_poi_db))))
2084 /* Clear old filename/dirname, if necessary. */
2085 if(_poi_db_filename)
2087 g_free(_poi_db_filename);
2088 _poi_db_filename = NULL;
2089 g_free(_poi_db_dirname);
2090 _poi_db_dirname = NULL;
2093 if(*gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
2095 _poi_db_filename = g_strdup(gtk_entry_get_text(
2096 GTK_ENTRY(txt_poi_db)));
2097 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
2103 _poi_zoom = hildon_number_editor_get_value(
2104 HILDON_NUMBER_EDITOR(num_poi_zoom));
2111 map_refresh_mark(TRUE);
2116 gtk_widget_hide(dialog);
2118 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);
2119 return rcvr_changed;
2123 settings_parse_repo(gchar *str)
2125 /* Parse each part of a repo, delimited by newline characters:
2130 * 5. view_zoom_steps
2133 * If layer_level > 0, have additional fields:
2135 * 8. layer_refresh_interval
2137 gchar *token, *error_check;
2138 printf("%s(%s)\n", __PRETTY_FUNCTION__, str);
2140 RepoData *rd = g_new0(RepoData, 1);
2143 token = strsep(&str, "\n\t");
2145 rd->name = g_strdup(token);
2147 /* Parse URL format. */
2148 token = strsep(&str, "\n\t");
2150 rd->url = g_strdup(token);
2152 /* Parse cache dir. */
2153 token = strsep(&str, "\n\t");
2155 rd->db_filename = gnome_vfs_expand_initial_tilde(token);
2157 /* Parse download zoom steps. */
2158 token = strsep(&str, "\n\t");
2159 if(!token || !*token || !(rd->dl_zoom_steps = atoi(token)))
2160 rd->dl_zoom_steps = 2;
2162 /* Parse view zoom steps. */
2163 token = strsep(&str, "\n\t");
2164 if(!token || !*token || !(rd->view_zoom_steps = atoi(token)))
2165 rd->view_zoom_steps = 1;
2167 /* Parse double-size. */
2168 token = strsep(&str, "\n\t");
2170 rd->double_size = atoi(token); /* Default is zero (FALSE) */
2172 /* Parse next-able. */
2173 token = strsep(&str, "\n\t");
2174 if(!token || !*token
2175 || (rd->nextable = strtol(token, &error_check, 10), token == str))
2176 rd->nextable = TRUE;
2178 /* Parse min zoom. */
2179 token = strsep(&str, "\n\t");
2180 if(!token || !*token
2181 || (rd->min_zoom = strtol(token, &error_check, 10), token == str))
2184 /* Parse max zoom. */
2185 token = strsep(&str, "\n\t");
2186 if(!token || !*token
2187 || (rd->max_zoom = strtol(token, &error_check, 10), token == str))
2190 /* Parse layer_level */
2191 token = strsep(&str, "\n\t");
2192 if(!token || !*token
2193 || (rd->layer_level = strtol(token, &error_check, 10), token == str))
2194 rd->layer_level = 0;
2196 if (rd->layer_level) {
2197 /* Parse layer_enabled */
2198 token = strsep(&str, "\n\t");
2199 if(!token || !*token || (rd->layer_enabled = strtol(token, &error_check, 10), token == str))
2200 rd->layer_enabled = 0;
2202 /* Parse layer_refresh_interval */
2203 token = strsep(&str, "\n\t");
2204 if(!token || !*token || (rd->layer_refresh_interval = strtol(token, &error_check, 10), token == str))
2205 rd->layer_refresh_interval = 0;
2207 rd->layer_refresh_countdown = rd->layer_refresh_interval;
2212 vprintf("%s(): return %p\n", __PRETTY_FUNCTION__, rd);
2217 * Initialize all configuration from GCONF. This should not be called more
2218 * than once during execution.
2224 GConfClient *gconf_client = gconf_client_get_default();
2226 printf("%s()\n", __PRETTY_FUNCTION__);
2228 /* Initialize some constants. */
2229 CUSTOM_KEY_GCONF[CUSTOM_KEY_UP] = GCONF_KEY_PREFIX"/key_up";
2230 CUSTOM_KEY_GCONF[CUSTOM_KEY_DOWN] = GCONF_KEY_PREFIX"/key_down";
2231 CUSTOM_KEY_GCONF[CUSTOM_KEY_LEFT] = GCONF_KEY_PREFIX"/key_left";
2232 CUSTOM_KEY_GCONF[CUSTOM_KEY_RIGHT] = GCONF_KEY_PREFIX"/key_right";
2233 CUSTOM_KEY_GCONF[CUSTOM_KEY_SELECT] = GCONF_KEY_PREFIX"/key_select";
2234 CUSTOM_KEY_GCONF[CUSTOM_KEY_INCREASE] = GCONF_KEY_PREFIX"/key_increase";
2235 CUSTOM_KEY_GCONF[CUSTOM_KEY_DECREASE] = GCONF_KEY_PREFIX"/key_decrease";
2236 CUSTOM_KEY_GCONF[CUSTOM_KEY_FULLSCREEN]= GCONF_KEY_PREFIX"/key_fullscreen";
2237 CUSTOM_KEY_GCONF[CUSTOM_KEY_ESC] = GCONF_KEY_PREFIX"/key_esc";
2239 COLORABLE_GCONF[COLORABLE_MARK] = GCONF_KEY_PREFIX"/color_mark";
2240 COLORABLE_GCONF[COLORABLE_MARK_VELOCITY]
2241 = GCONF_KEY_PREFIX"/color_mark_velocity";
2242 COLORABLE_GCONF[COLORABLE_MARK_OLD] = GCONF_KEY_PREFIX"/color_mark_old";
2243 COLORABLE_GCONF[COLORABLE_TRACK] = GCONF_KEY_PREFIX"/color_track";
2244 COLORABLE_GCONF[COLORABLE_TRACK_MARK] =GCONF_KEY_PREFIX"/color_track_mark";
2245 COLORABLE_GCONF[COLORABLE_TRACK_BREAK]
2246 = GCONF_KEY_PREFIX"/color_track_break";
2247 COLORABLE_GCONF[COLORABLE_ROUTE] = GCONF_KEY_PREFIX"/color_route";
2248 COLORABLE_GCONF[COLORABLE_ROUTE_WAY] = GCONF_KEY_PREFIX"/color_route_way";
2249 COLORABLE_GCONF[COLORABLE_ROUTE_BREAK]
2250 = GCONF_KEY_PREFIX"/color_route_break";
2251 COLORABLE_GCONF[COLORABLE_POI] = GCONF_KEY_PREFIX"/color_poi";
2254 COLORABLE_GCONF[COLORABLE_APRS_STATION] = GCONF_KEY_PREFIX"/color_aprs_station";
2255 #endif // INCLUDE_APRS
2259 popup_error(_window, _("Failed to initialize GConf. Quitting."));
2263 /* Get GPS Receiver Type. Default is Bluetooth Receiver. */
2265 gchar *gri_type_str = gconf_client_get_string(gconf_client,
2266 GCONF_KEY_GPS_RCVR_TYPE, NULL);
2270 for(i = GPS_RCVR_ENUM_COUNT - 1; i > 0; i--)
2271 if(!strcmp(gri_type_str, GPS_RCVR_ENUM_TEXT[i]))
2273 g_free(gri_type_str);
2278 /* Get Bluetooth Receiver MAC. Default is NULL. */
2279 _gri.bt_mac = gconf_client_get_string(
2280 gconf_client, GCONF_KEY_GPS_BT_MAC, NULL);
2282 /* Get GPSD Host. Default is localhost. */
2283 _gri.gpsd_host = gconf_client_get_string(
2284 gconf_client, GCONF_KEY_GPS_GPSD_HOST, NULL);
2286 _gri.gpsd_host = g_strdup("127.0.0.1");
2288 /* Get GPSD Port. Default is GPSD_PORT_DEFAULT (2947). */
2289 if(!(_gri.gpsd_port = gconf_client_get_int(
2290 gconf_client, GCONF_KEY_GPS_GPSD_PORT, NULL)))
2291 _gri.gpsd_port = GPSD_PORT_DEFAULT;
2293 /* Get File Path. Default is /dev/pgps. */
2294 _gri.file_path = gconf_client_get_string(
2295 gconf_client, GCONF_KEY_GPS_FILE_PATH, NULL);
2297 _gri.file_path = g_strdup("/dev/pgps");
2299 /* Get Auto-Download. Default is FALSE. */
2300 _auto_download = gconf_client_get_bool(gconf_client,
2301 GCONF_KEY_AUTO_DOWNLOAD, NULL);
2303 /* Get Auto-Download Pre-cache - Default is 2. */
2304 _auto_download_precache = gconf_client_get_int(gconf_client,
2305 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, NULL);
2306 if(!_auto_download_precache)
2307 _auto_download_precache = 2;
2309 /* Get Center Ratio - Default is 5. */
2310 _center_ratio = gconf_client_get_int(gconf_client,
2311 GCONF_KEY_CENTER_SENSITIVITY, NULL);
2315 /* Get Lead Ratio - Default is 5. */
2316 _lead_ratio = gconf_client_get_int(gconf_client,
2317 GCONF_KEY_LEAD_AMOUNT, NULL);
2321 /* Get Lead Is Fixed flag - Default is FALSE. */
2322 _lead_is_fixed = gconf_client_get_bool(gconf_client,
2323 GCONF_KEY_LEAD_IS_FIXED, NULL);
2325 /* Get Rotate Sensitivity - Default is 5. */
2326 _rotate_sens = gconf_client_get_int(gconf_client,
2327 GCONF_KEY_ROTATE_SENSITIVITY, NULL);
2331 /* Get Auto-Center/Rotate Minimum Speed - Default is 2. */
2332 value = gconf_client_get(gconf_client, GCONF_KEY_AC_MIN_SPEED, NULL);
2335 _ac_min_speed = gconf_value_get_int(value);
2336 gconf_value_free(value);
2341 /* Get Rotate Dir - Default is ROTATE_DIR_UP. */
2343 gchar *rotate_dir_str = gconf_client_get_string(gconf_client,
2344 GCONF_KEY_ROTATE_DIR, NULL);
2347 for(i = ROTATE_DIR_ENUM_COUNT - 1; i >= 0; i--)
2348 if(!strcmp(rotate_dir_str, ROTATE_DIR_ENUM_TEXT[i]))
2355 /* Get Draw Line Width- Default is 5. */
2356 _draw_width = gconf_client_get_int(gconf_client,
2357 GCONF_KEY_DRAW_WIDTH, NULL);
2361 /* Get Enable Announcements flag. Default is TRUE. */
2362 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_ANNOUNCE, NULL);
2365 _enable_announce = gconf_value_get_bool(value);
2366 gconf_value_free(value);
2369 _enable_announce = TRUE;
2371 /* Get Announce Advance Notice - Default is 30. */
2372 value = gconf_client_get(gconf_client, GCONF_KEY_ANNOUNCE_NOTICE, NULL);
2375 _announce_notice_ratio = gconf_value_get_int(value);
2376 gconf_value_free(value);
2379 _announce_notice_ratio = 8;
2381 /* Get Enable Voice flag. Default is TRUE. */
2382 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_VOICE, NULL);
2385 _enable_voice = gconf_value_get_bool(value);
2386 gconf_value_free(value);
2389 _enable_voice = TRUE;
2393 /* Make sure we actually have voice capabilities. */
2394 GnomeVFSFileInfo file_info;
2395 _enable_voice = ((GNOME_VFS_OK == gnome_vfs_get_file_info(
2396 _voice_synth_path, &file_info,
2397 GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS))
2398 && (file_info.permissions & GNOME_VFS_PERM_ACCESS_EXECUTABLE));
2401 /* Get Fullscreen flag. Default is FALSE. */
2402 _fullscreen = gconf_client_get_bool(gconf_client,
2403 GCONF_KEY_FULLSCREEN, NULL);
2405 /* Get Units. Default is UNITS_KM. */
2407 gchar *units_str = gconf_client_get_string(gconf_client,
2408 GCONF_KEY_UNITS, NULL);
2411 for(i = UNITS_ENUM_COUNT - 1; i > 0; i--)
2412 if(!strcmp(units_str, UNITS_ENUM_TEXT[i]))
2417 /* Get Custom Key Actions. */
2420 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
2422 gint j = CUSTOM_KEY_DEFAULT[i];
2423 gchar *str = gconf_client_get_string(gconf_client,
2424 CUSTOM_KEY_GCONF[i], NULL);
2426 for(j = CUSTOM_ACTION_ENUM_COUNT - 1; j > 0; j--)
2427 if(!strcmp(str, CUSTOM_ACTION_ENUM_TEXT[j]))
2433 /* Get Deg format. Default is DDPDDDDD. */
2435 gchar *degformat_key_str = gconf_client_get_string(gconf_client,
2436 GCONF_KEY_DEG_FORMAT, NULL);
2438 if(degformat_key_str)
2439 for(i = DEG_FORMAT_ENUM_COUNT - 1; i > 0; i--)
2440 if(!strcmp(degformat_key_str, DEG_FORMAT_ENUM_TEXT[i].name))
2445 /* Get Speed Limit On flag. Default is FALSE. */
2446 _speed_limit_on = gconf_client_get_bool(gconf_client,
2447 GCONF_KEY_SPEED_LIMIT_ON, NULL);
2449 /* Get Speed Limit */
2450 _speed_limit = gconf_client_get_int(gconf_client,
2451 GCONF_KEY_SPEED_LIMIT, NULL);
2452 if(_speed_limit <= 0)
2455 /* Get Speed Location. Default is SPEED_LOCATION_TOP_LEFT. */
2457 gchar *speed_location_str = gconf_client_get_string(gconf_client,
2458 GCONF_KEY_SPEED_LOCATION, NULL);
2460 if(speed_location_str)
2461 for(i = SPEED_LOCATION_ENUM_COUNT - 1; i > 0; i--)
2462 if(!strcmp(speed_location_str, SPEED_LOCATION_ENUM_TEXT[i]))
2464 _speed_location = i;
2467 /* Get Unblank Option. Default is UNBLANK_FULLSCREEN. */
2469 gchar *unblank_option_str = gconf_client_get_string(gconf_client,
2470 GCONF_KEY_UNBLANK_SIZE, NULL);
2472 if(unblank_option_str)
2473 for(i = UNBLANK_ENUM_COUNT - 1; i >= 0; i--)
2474 if(!strcmp(unblank_option_str, UNBLANK_ENUM_TEXT[i]))
2477 i = UNBLANK_FULLSCREEN;
2478 _unblank_option = i;
2482 load_aprs_options(gconf_client);
2483 #endif // INCLUDE_APRS
2485 /* Get Info Font Size. Default is INFO_FONT_MEDIUM. */
2487 gchar *info_font_size_str = gconf_client_get_string(gconf_client,
2488 GCONF_KEY_INFO_FONT_SIZE, NULL);
2490 if(info_font_size_str)
2491 for(i = INFO_FONT_ENUM_COUNT - 1; i >= 0; i--)
2492 if(!strcmp(info_font_size_str, INFO_FONT_ENUM_TEXT[i]))
2495 i = INFO_FONT_MEDIUM;
2496 _info_font_size = i;
2499 /* Get last saved latitude. Default is 50.f. */
2500 value = gconf_client_get(gconf_client, GCONF_KEY_LAST_LAT, NULL);
2503 _gps.lat = gconf_value_get_float(value);
2504 gconf_value_free(value);
2509 /* Get last saved longitude. Default is 0. */
2510 _gps.lon = gconf_client_get_float(gconf_client, GCONF_KEY_LAST_LON, NULL);
2512 /* Get last saved altitude. Default is 0. */
2513 _pos.altitude = gconf_client_get_int(
2514 gconf_client, GCONF_KEY_LAST_ALT, NULL);
2516 /* Get last saved speed. Default is 0. */
2517 _gps.speed = gconf_client_get_float(
2518 gconf_client, GCONF_KEY_LAST_SPEED, NULL);
2520 /* Get last saved speed. Default is 0. */
2521 _gps.heading = gconf_client_get_float(
2522 gconf_client, GCONF_KEY_LAST_HEADING, NULL);
2524 /* Get last saved timestamp. Default is 0. */
2525 _pos.time= gconf_client_get_float(gconf_client, GCONF_KEY_LAST_TIME, NULL);
2527 /* Get last center point. */
2529 gdouble center_lat, center_lon;
2531 /* Get last saved latitude. Default is last saved latitude. */
2532 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LAT, NULL);
2535 center_lat = gconf_value_get_float(value);
2536 gconf_value_free(value);
2540 _is_first_time = TRUE;
2541 center_lat = _gps.lat;
2544 /* Get last saved longitude. Default is last saved longitude. */
2545 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LON, NULL);
2548 center_lon = gconf_value_get_float(value);
2549 gconf_value_free(value);
2552 center_lon = _gps.lon;
2554 latlon2unit(center_lat, center_lon, _center.unitx, _center.unity);
2555 _next_center = _center;
2558 /* Get map correction. Default is 0. */
2559 _map_correction_unitx = gconf_client_get_int(gconf_client,
2560 GCONF_KEY_MAP_CORRECTION_UNITX, NULL);
2561 _map_correction_unity = gconf_client_get_int(gconf_client,
2562 GCONF_KEY_MAP_CORRECTION_UNITY, NULL);
2564 /* Get last viewing angle. Default is 0. */
2565 _map_rotate_angle = _next_map_rotate_angle = gconf_client_get_int(
2566 gconf_client, GCONF_KEY_CENTER_ANGLE, NULL);
2567 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2569 deg2rad(ROTATE_DIR_ENUM_DEGREES[_rotate_dir] - _map_rotate_angle));
2570 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2571 _map_reverse_matrix,
2572 deg2rad(_map_rotate_angle - ROTATE_DIR_ENUM_DEGREES[_rotate_dir]));
2575 /* Load the repositories. */
2577 GSList *list, *curr;
2578 RepoData *prev_repo = NULL, *curr_repo = NULL;
2579 gint curr_repo_index = gconf_client_get_int(gconf_client,
2580 GCONF_KEY_CURRREPO, NULL);
2581 list = gconf_client_get_list(gconf_client,
2582 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, NULL);
2584 for(curr = list; curr != NULL; curr = curr->next)
2586 RepoData *rd = settings_parse_repo(curr->data);
2588 if (rd->layer_level == 0) {
2589 _repo_list = g_list_append(_repo_list, rd);
2590 if(!curr_repo_index--)
2594 prev_repo->layers = rd;
2601 repo_set_curr(curr_repo);
2603 /* this timer decrements layers' counters and frefresh map if needed */
2604 g_timeout_add (60 * 1000, map_layer_refresh_cb, NULL);
2608 if(_repo_list == NULL)
2610 /* We have no repositories - create a default one. */
2611 RepoData *repo = g_new0(RepoData, 1);
2613 repo->db_filename = gnome_vfs_expand_initial_tilde(
2614 REPO_DEFAULT_CACHE_DIR);
2615 repo->url=g_strdup(REPO_DEFAULT_MAP_URI);
2616 repo->dl_zoom_steps = REPO_DEFAULT_DL_ZOOM_STEPS;
2617 repo->name = g_strdup(REPO_DEFAULT_NAME);
2618 repo->view_zoom_steps = REPO_DEFAULT_VIEW_ZOOM_STEPS;
2619 repo->double_size = FALSE;
2620 repo->nextable = TRUE;
2621 repo->min_zoom = REPO_DEFAULT_MIN_ZOOM;
2622 repo->max_zoom = REPO_DEFAULT_MAX_ZOOM;
2623 repo->layers = NULL;
2624 repo->layer_level = 0;
2625 set_repo_type(repo);
2627 _repo_list = g_list_append(_repo_list, repo);
2628 repo_set_curr(repo);
2631 /* Get last Zoom Level. Default is 16. */
2632 value = gconf_client_get(gconf_client, GCONF_KEY_ZOOM, NULL);
2635 _zoom = gconf_value_get_int(value) / _curr_repo->view_zoom_steps
2636 * _curr_repo->view_zoom_steps;
2637 gconf_value_free(value);
2640 _zoom = 16 / _curr_repo->view_zoom_steps
2641 * _curr_repo->view_zoom_steps;
2642 BOUND(_zoom, 0, MAX_ZOOM);
2645 /* Get Route Directory. Default is NULL. */
2646 _route_dir_uri = gconf_client_get_string(gconf_client,
2647 GCONF_KEY_ROUTEDIR, NULL);
2649 /* Get Last Track File. Default is NULL. */
2650 _track_file_uri = gconf_client_get_string(gconf_client,
2651 GCONF_KEY_TRACKFILE, NULL);
2653 /* Get Auto-Center Mode. Default is CENTER_LEAD. */
2654 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_MODE, NULL);
2657 _center_mode = gconf_value_get_int(value);
2658 gconf_value_free(value);
2661 _center_mode = CENTER_LEAD;
2663 /* Get Auto-Center Rotate Flag. Default is TRUE. */
2664 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_ROTATE, NULL);
2667 _center_rotate = gconf_value_get_bool(value);
2668 gconf_value_free(value);
2671 _center_rotate = TRUE;
2673 /* Get Show Zoom Level flag. Default is FALSE. */
2674 _show_zoomlevel = gconf_client_get_bool(gconf_client,
2675 GCONF_KEY_SHOWZOOMLEVEL, NULL);
2677 /* Get Show Scale flag. Default is TRUE. */
2678 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWSCALE, NULL);
2681 _show_scale = gconf_value_get_bool(value);
2682 gconf_value_free(value);
2687 /* Get Show Compass Rose flag. Default is TRUE. */
2688 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWCOMPROSE, NULL);
2691 _show_comprose = gconf_value_get_bool(value);
2692 gconf_value_free(value);
2695 _show_comprose = TRUE;
2697 /* Get Show Tracks flag. Default is TRUE. */
2698 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWTRACKS, NULL);
2701 _show_paths |= (gconf_value_get_bool(value) ? TRACKS_MASK : 0);
2702 gconf_value_free(value);
2705 _show_paths |= TRACKS_MASK;
2707 /* Get Show Routes flag. Default is TRUE. */
2708 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWROUTES, NULL);
2711 _show_paths |= (gconf_value_get_bool(value) ? ROUTES_MASK : 0);
2712 gconf_value_free(value);
2715 _show_paths |= ROUTES_MASK;
2717 /* Get Show Velocity Vector flag. Default is TRUE. */
2718 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWVELVEC, NULL);
2721 _show_velvec = gconf_value_get_bool(value);
2722 gconf_value_free(value);
2725 _show_velvec = TRUE;
2727 /* Get Show Velocity Vector flag. Default is TRUE. */
2728 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWPOIS, NULL);
2731 _show_poi = gconf_value_get_bool(value);
2732 gconf_value_free(value);
2737 /* Get Enable GPS flag. Default is TRUE. */
2738 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_GPS, NULL);
2741 _enable_gps = gconf_value_get_bool(value);
2742 gconf_value_free(value);
2747 /* Get Enable Tracking flag. Default is TRUE. */
2748 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_TRACKING, NULL);
2751 _enable_tracking = gconf_value_get_bool(value);
2752 gconf_value_free(value);
2755 _enable_tracking = TRUE;
2757 /* Initialize _gps_state based on _enable_gps. */
2758 _gps_state = RCVR_OFF;
2760 /* Load the route locations. */
2763 _loc_list = gconf_client_get_list(gconf_client,
2764 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, NULL);
2765 _loc_model = gtk_list_store_new(1, G_TYPE_STRING);
2766 for(curr = _loc_list; curr != NULL; curr = curr->next)
2769 gtk_list_store_insert_with_values(_loc_model, &iter, INT_MAX,
2774 /* Get POI Database. Default is in REPO_DEFAULT_CACHE_BASE */
2775 _poi_db_filename = gconf_client_get_string(gconf_client,
2776 GCONF_KEY_POI_DB, NULL);
2777 if(_poi_db_filename == NULL)
2779 gchar *poi_base = gnome_vfs_expand_initial_tilde(
2780 REPO_DEFAULT_CACHE_BASE);
2781 _poi_db_filename = gnome_vfs_uri_make_full_from_relative(
2782 poi_base, "poi.db");
2786 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
2788 _poi_zoom = gconf_client_get_int(gconf_client,
2789 GCONF_KEY_POI_ZOOM, NULL);
2791 _poi_zoom = MAX_ZOOM - 10;
2794 /* Get GPS Info flag. Default is FALSE. */
2795 _gps_info = gconf_client_get_bool(gconf_client, GCONF_KEY_GPS_INFO, NULL);
2797 /* Get Route Download URL. Default is:
2798 * "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s" */
2799 _route_dl_url = gconf_client_get_string(gconf_client,
2800 GCONF_KEY_ROUTE_DL_URL, NULL);
2801 if(_route_dl_url == NULL)
2802 _route_dl_url = g_strdup(
2803 "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s");
2805 /* Get Route Download Radius. Default is 4. */
2806 value = gconf_client_get(gconf_client, GCONF_KEY_ROUTE_DL_RADIUS, NULL);
2809 _route_dl_radius = gconf_value_get_int(value);
2810 gconf_value_free(value);
2813 _route_dl_radius = 8;
2815 /* Get POI Download URL. Default is:
2816 * "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d" */
2817 _poi_dl_url = gconf_client_get_string(gconf_client,
2818 GCONF_KEY_POI_DL_URL, NULL);
2819 if(_poi_dl_url == NULL)
2820 _poi_dl_url = g_strdup(
2821 "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d");
2826 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
2828 str = gconf_client_get_string(gconf_client,
2829 COLORABLE_GCONF[i], NULL);
2830 if(!str || !gdk_color_parse(str, &_color[i]))
2831 _color[i] = COLORABLE_DEFAULT[i];
2835 gconf_client_clear_cache(gconf_client);
2836 g_object_unref(gconf_client);
2843 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
2848 ////// APRS Settings start
2850 void read_aprs_options(TAprsSettings *aprsSettings )
2853 _aprs_mycall = g_strdup(gtk_entry_get_text(
2854 GTK_ENTRY(aprsSettings->txt_aprs_mycall)));
2857 _aprs_enable = gtk_toggle_button_get_active(
2858 GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_enabled ));
2860 _aprs_show_new_station_alert = gtk_toggle_button_get_active(
2861 GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_show_new_station_alert ));
2864 gchar * s_max_stations = g_strdup(gtk_entry_get_text(
2865 GTK_ENTRY(aprsSettings->txt_aprs_max_stations)));
2866 gint64 i64_max_stations = g_ascii_strtoll (s_max_stations, NULL, 10);
2867 _aprs_max_stations = (gint)i64_max_stations;
2871 _aprs_server = g_strdup(gtk_entry_get_text(
2872 GTK_ENTRY(aprsSettings->txt_aprs_server)));
2875 _aprs_tty_port = g_strdup(gtk_entry_get_text(
2876 GTK_ENTRY(aprsSettings->txt_aprs_tty_port)));
2878 _aprs_inet_server_validation = g_strdup(gtk_entry_get_text(
2879 GTK_ENTRY(aprsSettings->txt_aprs_inet_server_validation)));
2881 gchar * s_port = g_strdup(gtk_entry_get_text(
2882 GTK_ENTRY(aprsSettings->num_aprs_server_port)));
2883 gint64 i64_port = g_ascii_strtoll (s_port, NULL, 10);
2884 _aprs_server_port = (gint)i64_port;
2887 gchar * s_beacon_interval = g_strdup(gtk_entry_get_text(
2888 GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval )));
2889 gint64 i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
2890 g_free(s_beacon_interval);
2891 _aprs_inet_beacon_interval = (gint)i64_beacon_interval;
2893 s_beacon_interval = g_strdup(gtk_entry_get_text(
2894 GTK_ENTRY(aprsSettings->txt_tty_beacon_interval )));
2895 i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
2896 g_free(s_beacon_interval);
2897 _aprs_tty_beacon_interval = (gint)i64_beacon_interval;
2900 _aprs_inet_beacon_comment = g_strdup(gtk_entry_get_text(
2901 GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment )));
2903 _aprs_tnc_bt_mac = g_strdup(gtk_entry_get_text(
2904 GTK_ENTRY(aprsSettings->txt_tnc_bt_mac )));
2906 _aprs_tnc_method = TNC_CONNECTION_BT;
2907 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file) ))
2909 _aprs_tnc_method = TNC_CONNECTION_FILE;
2913 _aprs_server_auto_filter_on = gtk_toggle_button_get_active(
2914 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_auto_filter ));
2916 gchar * s_server_auto_filter_km = g_strdup(gtk_entry_get_text(
2917 GTK_ENTRY(aprsSettings->txt_auto_filter_range )));
2918 gint64 i64_server_auto_filter_km = g_ascii_strtoll (s_server_auto_filter_km, NULL, 10);
2919 _aprs_server_auto_filter_km = (gint)i64_server_auto_filter_km;
2922 _aprs_enable_inet_tx = gtk_toggle_button_get_active(
2923 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_tx ));
2925 _aprs_enable_tty_tx = gtk_toggle_button_get_active(
2926 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_tty_tx ));
2928 _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
2929 GTK_ENTRY(aprsSettings->txt_beacon_comment )));
2931 _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
2932 GTK_ENTRY(aprsSettings->txt_beacon_comment )));
2935 _aprs_unproto_path = g_strdup(gtk_entry_get_text(
2936 GTK_ENTRY(aprsSettings->txt_unproto_path )));
2939 tmp = g_strdup(gtk_entry_get_text(
2940 GTK_ENTRY(aprsSettings->txt_beacon_group )));
2941 if(strlen(tmp)>0) _aprs_beacon_group = tmp[0];
2943 tmp = g_strdup(gtk_entry_get_text(
2944 GTK_ENTRY(aprsSettings->txt_beacon_symbol )));
2945 if(strlen(tmp)>0) _aprs_beacon_symbol = tmp[0];
2947 _aprs_transmit_compressed_posit = FALSE; // Not currently supported
2951 void save_aprs_options()
2953 GConfClient *gconf_client = gconf_client_get_default();
2956 popup_error(_window,
2957 _("Failed to initialize GConf. Settings were not saved."));
2964 gconf_client_set_string(gconf_client,
2965 GCONF_KEY_APRS_SERVER, _aprs_server, NULL);
2967 if(_aprs_server_port)
2968 gconf_client_set_int(gconf_client,
2969 GCONF_KEY_APRS_SERVER_PORT, _aprs_server_port, NULL);
2971 if(_aprs_inet_server_validation)
2972 gconf_client_set_string(gconf_client,
2973 GCONF_KEY_APRS_SERVER_VAL, _aprs_inet_server_validation, NULL);
2976 gconf_client_set_string(gconf_client,
2977 GCONF_KEY_APRS_MYCALL, _aprs_mycall, NULL);
2980 gconf_client_set_string(gconf_client,
2981 GCONF_KEY_APRS_TTY_PORT, _aprs_tty_port, NULL);
2986 if(_aprs_inet_beacon_comment)
2987 gconf_client_set_string(gconf_client,
2988 GCONF_KEY_APRS_INET_BEACON, _aprs_inet_beacon_comment, NULL);
2990 gconf_client_set_int(gconf_client,
2991 GCONF_KEY_APRS_INET_BEACON_INTERVAL, _aprs_inet_beacon_interval, NULL);
2993 gconf_client_set_int(gconf_client,
2994 GCONF_KEY_APRS_MAX_TRACK_PTS, _aprs_std_pos_hist, NULL);
2996 gconf_client_set_int(gconf_client,
2997 GCONF_KEY_APRS_MAX_STATIONS, _aprs_max_stations, NULL);
2999 gconf_client_set_bool(gconf_client,
3000 GCONF_KEY_APRS_ENABLE, _aprs_enable, NULL);
3003 gconf_client_set_bool(gconf_client,
3004 GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, _aprs_show_new_station_alert, NULL);
3006 if(_aprs_tnc_bt_mac)
3007 gconf_client_set_string(gconf_client,
3008 GCONF_KEY_APRS_TNC_BT_MAC, _aprs_tnc_bt_mac, NULL);
3010 gconf_client_set_int(gconf_client,
3011 GCONF_KEY_APRS_TNC_CONN_METHOD, _aprs_tnc_method, NULL);
3013 gconf_client_set_int(gconf_client,
3014 GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, _aprs_server_auto_filter_km, NULL);
3016 gconf_client_set_bool(gconf_client,
3017 GCONF_KEY_APRS_INET_AUTO_FILTER, _aprs_server_auto_filter_on, NULL);
3019 gconf_client_set_bool(gconf_client,
3020 GCONF_KEY_APRS_ENABLE_INET_TX, _aprs_enable_inet_tx, NULL);
3021 gconf_client_set_bool(gconf_client,
3022 GCONF_KEY_APRS_ENABLE_TTY_TX, _aprs_enable_tty_tx, NULL);
3024 if(_aprs_beacon_comment)
3025 gconf_client_set_string(gconf_client,
3026 GCONF_KEY_APRS_BEACON_COMMENT, _aprs_beacon_comment, NULL);
3028 gconf_client_set_int(gconf_client,
3029 GCONF_KEY_APRS_TTY_BEACON_INTERVAL, _aprs_tty_beacon_interval, NULL);
3031 gconf_client_set_bool(gconf_client,
3032 GCONF_KEY_APRS_BEACON_COMPRESSED, _aprs_transmit_compressed_posit, NULL);
3034 if(_aprs_unproto_path)
3035 gconf_client_set_string(gconf_client,
3036 GCONF_KEY_APRS_BEACON_PATH, _aprs_unproto_path, NULL);
3038 //if(_aprs_beacon_group)
3041 snprintf(tmp, 5, "%c", _aprs_beacon_group);
3043 gconf_client_set_string(gconf_client,
3044 GCONF_KEY_APRS_BEACON_SYM_GROUP, tmp, NULL);
3046 //if(strlen(tmp)> 1) _aprs_beacon_group = tmp[0];
3049 //if(_aprs_beacon_symbol)
3052 snprintf(tmp, 5, "%c", _aprs_beacon_symbol);
3054 gconf_client_set_string(gconf_client,
3055 GCONF_KEY_APRS_BEACON_SYMBOL, tmp, NULL);
3057 //if(strlen(tmp)> 1) _aprs_beacon_symbol = tmp[0];
3066 void setup_aprs_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3072 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3073 table = gtk_table_new(3/*rows*/, 4/*columns*/, FALSE /*Auto re-size*/),
3074 label = gtk_label_new(_("Station")));
3078 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Callsign");
3079 add_edit_box (table, 1, 2, 0, 1, -1, &(aprsSettings->txt_aprs_mycall), ALIGN_TOP_LEFT, _aprs_mycall);
3082 add_check_box(table, 2, 4, 0, 1, -1, &(aprsSettings->chk_compressed_beacon), ALIGN_TOP_LEFT,
3083 "Compress Beacons", _aprs_transmit_compressed_posit);
3084 // Not yet supported
3085 gtk_widget_set_sensitive (GTK_WIDGET (aprsSettings->chk_compressed_beacon), FALSE);
3089 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Path");
3090 add_edit_box (table, 1, 2, 1, 2, -1, &(aprsSettings->txt_unproto_path), ALIGN_TOP_LEFT, _aprs_unproto_path);
3093 add_check_box(table, 2, 4, 1, 2, -1, &(aprsSettings->chk_aprs_show_new_station_alert), ALIGN_TOP_LEFT,
3094 "Show New Station Alerts", _aprs_show_new_station_alert);
3097 add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol Group");
3098 gchar initialValue[2];
3099 snprintf(initialValue, 2, "%c", _aprs_beacon_group);
3100 add_edit_box (table, 1, 2, 2, 3, -1, &(aprsSettings->txt_beacon_group), ALIGN_TOP_LEFT, initialValue);
3102 add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol");
3104 snprintf(initialValue, 2, "%c", _aprs_beacon_symbol);
3105 add_edit_box (table, 3, 4, 2, 3, -1, &(aprsSettings->txt_beacon_symbol), ALIGN_TOP_LEFT, initialValue);
3111 void setup_aprs_tty_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3117 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3118 table = gtk_table_new(3/*rows*/, 2/*columns*/, FALSE /*Auto re-size*/),
3119 label = gtk_label_new(_("TNC 1")));
3122 // Receiver MAC Address.
3123 gtk_table_attach(GTK_TABLE(table),
3124 aprsSettings->rad_tnc_bt = gtk_radio_button_new_with_label(
3125 NULL, _("Bluetooth")),
3126 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
3127 // gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_bt), 1.f, 0.5f);
3128 gtk_table_attach(GTK_TABLE(table),
3129 hbox = gtk_hbox_new(FALSE, 4),
3130 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3132 gtk_box_pack_start(GTK_BOX(hbox),
3133 aprsSettings->txt_tnc_bt_mac = gtk_entry_new(),
3135 #ifdef MAEMO_CHANGES
3137 g_object_set(G_OBJECT(aprsSettings->txt_tnc_bt_mac), "hildon-input-mode",
3138 HILDON_GTK_INPUT_MODE_FULL, NULL);
3140 g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
3143 gtk_box_pack_start(GTK_BOX(hbox),
3144 aprsSettings->btn_scan_bt_tnc = gtk_button_new_with_label(_("Scan...")),
3147 #ifndef HAVE_LIBGPSBT
3148 gtk_widget_set_sensitive(aprsSettings->rad_tnc_bt, FALSE);
3149 gtk_widget_set_sensitive(aprsSettings->txt_tnc_bt_mac, FALSE);
3150 gtk_widget_set_sensitive(aprsSettings->btn_scan_bt_tnc, FALSE);
3153 // File Path (RFComm).
3154 gtk_table_attach(GTK_TABLE(table),
3155 aprsSettings->rad_tnc_file = gtk_radio_button_new_with_label_from_widget(
3156 GTK_RADIO_BUTTON(aprsSettings->rad_tnc_bt), _("File Path")),
3157 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
3158 // gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_file), 1.f, 0.5f);
3159 gtk_table_attach(GTK_TABLE(table),
3160 hbox = gtk_hbox_new(FALSE, 4),
3161 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3162 gtk_box_pack_start(GTK_BOX(hbox),
3163 aprsSettings->txt_aprs_tty_port = gtk_entry_new(),
3165 #ifdef MAEMO_CHANGES
3167 g_object_set(G_OBJECT(aprsSettings->txt_aprs_tty_port), "hildon-input-mode",
3168 HILDON_GTK_INPUT_MODE_FULL, NULL);
3170 g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
3176 add_check_box(table, 0, 1, 2, 3, -1, &(aprsSettings->chk_enable_tty_tx), ALIGN_TOP_LEFT,
3177 "Enable TX", _aprs_enable_tty_tx);
3179 gtk_table_attach(GTK_TABLE(table),
3180 label = gtk_label_new(_("Only KISS TNC's are supported (9600 8N1)")),
3181 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
3182 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3189 if(aprsSettings->txt_aprs_tty_port)
3190 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_tty_port), _aprs_tty_port);
3192 if(aprsSettings->txt_tnc_bt_mac)
3193 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_tnc_bt_mac), _aprs_tnc_bt_mac);
3196 if(_aprs_tnc_method == TNC_CONNECTION_BT)
3197 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_bt), TRUE);
3198 else if(_aprs_tnc_method == TNC_CONNECTION_FILE)
3199 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file), TRUE);
3204 void setup_aprs_tty2_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3209 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3210 table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
3211 label = gtk_label_new(_("TNC 2")));
3213 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Beacon Interval");
3215 gchar s_interval[8]; s_interval[0] = 0;
3216 if(_aprs_tty_beacon_interval>0) snprintf(s_interval, 8, "%u", _aprs_tty_beacon_interval );
3217 add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_tty_beacon_interval), ALIGN_TOP_LEFT,
3219 add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_LEFT, "seconds");
3221 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Text");
3222 add_edit_box (table, 1, 4, 1, 2, -1, &(aprsSettings->txt_beacon_comment), ALIGN_TOP_LEFT, _aprs_beacon_comment);
3227 void setup_aprs_general_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3232 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3233 table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
3234 label = gtk_label_new(_("APRS")));
3237 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT,
3238 "APRS (Automatic/Amateur Position Reporting System) is \na system used by Radio Amateurs to communicate position, \nweather, and short messages.");
3241 add_check_box(table, 0, 1, 1, 2, -1, &(aprsSettings->chk_aprs_enabled), ALIGN_TOP_LEFT,
3242 "Enable APRS functionality", _aprs_enable);
3245 void setup_aprs_inet_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3250 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3251 table = gtk_table_new(3/*rows*/, 5/*columns*/, FALSE /*Auto re-size*/),
3252 label = gtk_label_new(_("Internet")));
3256 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Server");
3257 add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_aprs_server), ALIGN_TOP_LEFT, _aprs_server);
3259 /*iNet server port*/
3260 add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_RIGHT, "Port");
3261 add_edit_box (table, 4, 5, 0, 1, 0.5, &(aprsSettings->num_aprs_server_port), ALIGN_TOP_LEFT,
3262 g_strdup_printf("%u", _aprs_server_port));
3266 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Server Validation");
3267 add_edit_box (table, 1, 3, 1, 2, 0.5, &(aprsSettings->txt_aprs_inet_server_validation), ALIGN_TOP_LEFT, _aprs_inet_server_validation);
3268 add_check_box(table, 3, 5, 1, 2, -1, &(aprsSettings->chk_enable_inet_tx), ALIGN_TOP_LEFT,
3269 "Enable TX", _aprs_enable_inet_tx);
3271 /*iNet server filter*/
3272 add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Filter data");
3273 add_check_box(table, 1, 2, 2, 3, -1, &(aprsSettings->chk_enable_inet_auto_filter), ALIGN_TOP_LEFT, "Enable",
3274 _aprs_server_auto_filter_on);
3275 add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_RIGHT, "Range");
3276 add_edit_box (table, 3, 4, 2, 3, 0.75, &(aprsSettings->txt_auto_filter_range), ALIGN_TOP_LEFT,
3277 g_strdup_printf("%u", _aprs_server_auto_filter_km));
3278 add_label_box(table, 4, 5, 2, 3, -1, &label, ALIGN_TOP_LEFT, "km");
3284 void setup_aprs_inet2_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3290 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3291 table = gtk_table_new(2/*rows*/, 3/*columns*/, FALSE /*Auto re-size*/),
3292 label = gtk_label_new(_("Internet 2")));
3295 /* iNet Beacon interval */
3297 gtk_table_attach(GTK_TABLE(table),
3298 label = gtk_label_new(_("Beacon interval")),
3299 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
3300 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3303 gtk_table_attach(GTK_TABLE(table),
3304 hbox = gtk_hbox_new(FALSE, 4),
3305 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3306 gtk_box_pack_start(GTK_BOX(hbox),
3307 aprsSettings->txt_aprs_inet_beacon_interval = gtk_entry_new(),
3311 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), "hildon-input-mode",
3312 HILDON_GTK_INPUT_MODE_FULL, NULL);
3314 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), HILDON_AUTOCAP, FALSE, NULL);
3317 gtk_table_attach(GTK_TABLE(table),
3318 label = gtk_label_new(_("seconds")),
3319 2, 3, 0, 1, GTK_FILL, 0, 2, 4);
3320 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3322 /* Beacon comment */
3324 gtk_table_attach(GTK_TABLE(table),
3325 label = gtk_label_new(_("Beacon Comment")),
3326 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
3327 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3330 gtk_table_attach(GTK_TABLE(table),
3331 hbox = gtk_hbox_new(FALSE, 4),
3332 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3333 gtk_box_pack_start(GTK_BOX(hbox),
3334 aprsSettings->txt_aprs_inet_beacon_comment = gtk_entry_new(),
3338 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), "hildon-input-mode",
3339 HILDON_GTK_INPUT_MODE_FULL, NULL);
3341 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), HILDON_AUTOCAP, FALSE, NULL);
3345 if(_aprs_inet_beacon_interval)
3348 snprintf(interval, 8, "%d", _aprs_inet_beacon_interval);
3350 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval), interval);
3353 if(_aprs_inet_beacon_comment)
3354 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment), _aprs_inet_beacon_comment);
3358 void aprs_settings_dialog(gboolean *aprs_inet_config_changed, gboolean *aprs_tty_config_changed)
3360 static GtkWidget *dialog = NULL;
3361 static GtkWidget *notebook = NULL;
3362 static TAprsSettings aprs_settings;
3363 static ScanInfo scan_info = {0};
3365 printf("%s()\n", __PRETTY_FUNCTION__);
3368 *aprs_inet_config_changed = FALSE;
3369 *aprs_tty_config_changed = FALSE;
3373 dialog = gtk_dialog_new_with_buttons(_("APRS Settings"),
3374 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
3375 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
3378 /* Enable the help button. */
3380 hildon_help_dialog_help_enable(
3382 ossohelp_dialog_help_enable(
3384 GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
3386 gtk_dialog_add_button(GTK_DIALOG(dialog),
3387 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
3389 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
3390 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
3394 // Add enable, and info page
3395 setup_aprs_general_options_page(notebook, &aprs_settings);
3397 // Add station details page
3398 setup_aprs_options_page(notebook, &aprs_settings);
3401 setup_aprs_inet_options_page(notebook, &aprs_settings);
3402 setup_aprs_inet2_options_page(notebook, &aprs_settings);
3405 setup_aprs_tty_page_options_page(notebook, &aprs_settings);
3406 setup_aprs_tty2_page_options_page(notebook, &aprs_settings);
3410 /* Connect signals. */
3411 memset(&scan_info, 0, sizeof(scan_info));
3412 scan_info.settings_dialog = dialog;
3413 scan_info.txt_gps_bt_mac = aprs_settings.txt_tnc_bt_mac;
3414 g_signal_connect(G_OBJECT(aprs_settings.btn_scan_bt_tnc), "clicked",
3415 G_CALLBACK(scan_bluetooth), &scan_info);
3419 gtk_widget_show_all(dialog);
3421 if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
3423 // TODO - check if settings have really changed
3424 *aprs_inet_config_changed = TRUE;
3425 *aprs_tty_config_changed = TRUE;
3428 read_aprs_options(&aprs_settings );
3430 save_aprs_options();
3435 gtk_widget_hide(dialog);
3437 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);
3440 #endif // INCLUDE_APRS