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(),
309 g_object_set(G_OBJECT(*ctrl), "hildon-input-mode",
310 HILDON_GTK_INPUT_MODE_FULL, NULL);
312 g_object_set(G_OBJECT(*ctrl), HILDON_AUTOCAP, FALSE, NULL);
316 //set_ctrl_alignment(*ctrl, alignment);
317 //set_ctrl_width(*ctrl, width);
319 // Set the initial value
322 gtk_entry_set_text(GTK_ENTRY(*ctrl), initial_value);
326 void add_check_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,
327 GtkWidget **ctrl, TCellAlignment alignment, gchar * caption, gboolean initial_value)
329 gtk_table_attach(GTK_TABLE(table),
330 *ctrl = gtk_check_button_new_with_label(caption),
331 xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
333 //set_ctrl_alignment(*ctrl, alignment);
334 //set_ctrl_width(*ctrl, width);
336 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(*ctrl), initial_value);
339 void add_label_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,
340 GtkWidget **ctrl, TCellAlignment alignment, gchar * initial_value)
343 gtk_table_attach(GTK_TABLE(table),
344 *ctrl = gtk_label_new(initial_value),
345 xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
347 gtk_misc_set_alignment(GTK_MISC(*ctrl), 1.f, 0.5f);
350 set_ctrl_alignment(*ctrl, alignment);
351 set_ctrl_width(*ctrl, width);
354 #endif // INCLUDE_APRS
358 * Save all configuration data to GCONF.
364 GConfClient *gconf_client;
366 printf("%s()\n", __PRETTY_FUNCTION__);
368 /* Initialize settings_dir. */
369 settings_dir = gnome_vfs_expand_initial_tilde(CONFIG_DIR_NAME);
370 g_mkdir_with_parents(settings_dir, 0700);
372 /* SAVE ALL GCONF SETTINGS. */
374 gconf_client = gconf_client_get_default();
378 _("Failed to initialize GConf. Settings were not saved."));
382 /* Save GPS Receiver Type. */
383 gconf_client_set_string(gconf_client,
384 GCONF_KEY_GPS_RCVR_TYPE,
385 GPS_RCVR_ENUM_TEXT[_gri.type], NULL);
387 /* Save Bluetooth Receiver MAC. */
389 gconf_client_set_string(gconf_client,
390 GCONF_KEY_GPS_BT_MAC, _gri.bt_mac, NULL);
392 gconf_client_unset(gconf_client,
393 GCONF_KEY_GPS_BT_MAC, NULL);
395 /* Save GPSD Host. */
397 gconf_client_set_string(gconf_client,
398 GCONF_KEY_GPS_GPSD_HOST, _gri.gpsd_host, NULL);
400 gconf_client_unset(gconf_client,
401 GCONF_KEY_GPS_GPSD_HOST, NULL);
403 /* Save GPSD Port. */
404 gconf_client_set_int(gconf_client,
405 GCONF_KEY_GPS_GPSD_PORT, _gri.gpsd_port, NULL);
407 /* Save File Path. */
409 gconf_client_set_string(gconf_client,
410 GCONF_KEY_GPS_FILE_PATH, _gri.file_path, NULL);
412 gconf_client_unset(gconf_client,
413 GCONF_KEY_GPS_FILE_PATH, NULL);
415 /* Save Auto-Download. */
416 gconf_client_set_bool(gconf_client,
417 GCONF_KEY_AUTO_DOWNLOAD, _auto_download, NULL);
419 /* Save Auto-Download Pre-cache. */
420 gconf_client_set_int(gconf_client,
421 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, _auto_download_precache, NULL);
423 /* Save Auto-Center Sensitivity. */
424 gconf_client_set_int(gconf_client,
425 GCONF_KEY_CENTER_SENSITIVITY, _center_ratio, NULL);
427 /* Save Auto-Center Lead Amount. */
428 gconf_client_set_int(gconf_client,
429 GCONF_KEY_LEAD_AMOUNT, _lead_ratio, NULL);
431 /* Save Auto-Center Lead Fixed flag. */
432 gconf_client_set_bool(gconf_client,
433 GCONF_KEY_LEAD_IS_FIXED, _lead_is_fixed, NULL);
435 /* Save Auto-Rotate Sensitivity. */
436 gconf_client_set_int(gconf_client,
437 GCONF_KEY_ROTATE_SENSITIVITY, _rotate_sens, NULL);
439 /* Save Auto-Center/Rotate Minimum Speed. */
440 gconf_client_set_int(gconf_client,
441 GCONF_KEY_AC_MIN_SPEED, _ac_min_speed, NULL);
443 /* Save Auto-Rotate Sensitivity. */
444 gconf_client_set_string(gconf_client,
445 GCONF_KEY_ROTATE_DIR, ROTATE_DIR_ENUM_TEXT[_rotate_dir], NULL);
447 /* Save Draw Line Width. */
448 gconf_client_set_int(gconf_client,
449 GCONF_KEY_DRAW_WIDTH, _draw_width, NULL);
451 /* Save Announce Flag. */
452 gconf_client_set_bool(gconf_client,
453 GCONF_KEY_ENABLE_ANNOUNCE, _enable_announce, NULL);
455 /* Save Announce Advance Notice Ratio. */
456 gconf_client_set_int(gconf_client,
457 GCONF_KEY_ANNOUNCE_NOTICE, _announce_notice_ratio, NULL);
459 /* Save Enable Voice flag. */
460 gconf_client_set_bool(gconf_client,
461 GCONF_KEY_ENABLE_VOICE, _enable_voice, NULL);
463 /* Save fullscreen flag. */
464 gconf_client_set_bool(gconf_client,
465 GCONF_KEY_FULLSCREEN, _fullscreen, NULL);
468 gconf_client_set_string(gconf_client,
469 GCONF_KEY_UNITS, UNITS_ENUM_TEXT[_units], NULL);
471 /* Save Custom Key Actions. */
474 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
475 gconf_client_set_string(gconf_client,
477 CUSTOM_ACTION_ENUM_TEXT[_action[i]], NULL);
480 /* Save Deg Format. */
481 gconf_client_set_string(gconf_client,
482 GCONF_KEY_DEG_FORMAT, DEG_FORMAT_ENUM_TEXT[_degformat].name , NULL);
484 /* Save Speed Limit On flag. */
485 gconf_client_set_bool(gconf_client,
486 GCONF_KEY_SPEED_LIMIT_ON, _speed_limit_on, NULL);
488 /* Save Speed Limit. */
489 gconf_client_set_int(gconf_client,
490 GCONF_KEY_SPEED_LIMIT, _speed_limit, NULL);
492 /* Save Speed Location. */
493 gconf_client_set_string(gconf_client,
494 GCONF_KEY_SPEED_LOCATION,
495 SPEED_LOCATION_ENUM_TEXT[_speed_location], NULL);
497 /* Save Info Font Size. */
498 gconf_client_set_string(gconf_client,
499 GCONF_KEY_INFO_FONT_SIZE,
500 INFO_FONT_ENUM_TEXT[_info_font_size], NULL);
502 /* Save Unblank Option. */
503 gconf_client_set_string(gconf_client,
504 GCONF_KEY_UNBLANK_SIZE,
505 UNBLANK_ENUM_TEXT[_unblank_option], NULL);
507 /* Save last saved latitude. */
508 gconf_client_set_float(gconf_client,
509 GCONF_KEY_LAST_LAT, _gps.lat, NULL);
511 /* Save last saved longitude. */
512 gconf_client_set_float(gconf_client,
513 GCONF_KEY_LAST_LON, _gps.lon, NULL);
515 /* Save last saved altitude. */
516 gconf_client_set_int(gconf_client,
517 GCONF_KEY_LAST_ALT, _pos.altitude, NULL);
519 /* Save last saved speed. */
520 gconf_client_set_float(gconf_client,
521 GCONF_KEY_LAST_SPEED, _gps.speed, NULL);
523 /* Save last saved heading. */
524 gconf_client_set_float(gconf_client,
525 GCONF_KEY_LAST_HEADING, _gps.heading, NULL);
527 /* Save last saved timestamp. */
528 gconf_client_set_float(gconf_client,
529 GCONF_KEY_LAST_TIME, _pos.time, NULL);
531 /* Save last center point. */
533 gdouble center_lat, center_lon;
534 unit2latlon(_center.unitx, _center.unity, center_lat, center_lon);
536 /* Save last center latitude. */
537 gconf_client_set_float(gconf_client,
538 GCONF_KEY_CENTER_LAT, center_lat, NULL);
540 /* Save last center longitude. */
541 gconf_client_set_float(gconf_client,
542 GCONF_KEY_CENTER_LON, center_lon, NULL);
544 /* Save last view angle. */
545 gconf_client_set_int(gconf_client,
546 GCONF_KEY_CENTER_ANGLE, _map_rotate_angle, NULL);
549 /* Save map correction. */
550 gconf_client_set_int(gconf_client,
551 GCONF_KEY_MAP_CORRECTION_UNITX, _map_correction_unitx, NULL);
552 gconf_client_set_int(gconf_client,
553 GCONF_KEY_MAP_CORRECTION_UNITY, _map_correction_unity, NULL);
555 /* Save last Zoom Level. */
556 gconf_client_set_int(gconf_client,
557 GCONF_KEY_ZOOM, _zoom, NULL);
559 /* Save Route Directory. */
561 gconf_client_set_string(gconf_client,
562 GCONF_KEY_ROUTEDIR, _route_dir_uri, NULL);
564 /* Save the repositories. */
566 GList *curr = _repo_list;
567 GSList *temp_list = NULL;
568 gint curr_repo_index = 0;
570 for(curr = _repo_list; curr != NULL; curr = curr->next)
572 /* Build from each part of a repo, delimited by newline characters:
580 * If layer_level > 0, have additional fields:
582 * 8. layer_refresh_interval
584 RepoData *rd = curr->data;
585 gchar buffer[BUFFER_SIZE];
588 if (!rd->layer_level)
589 snprintf(buffer, sizeof(buffer),
590 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
602 snprintf(buffer, sizeof(buffer),
603 "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d",
615 rd->layer_refresh_interval
617 temp_list = g_slist_append(temp_list, g_strdup(buffer));
619 gconf_client_set_int(gconf_client,
620 GCONF_KEY_CURRREPO, curr_repo_index, NULL);
625 gconf_client_set_list(gconf_client,
626 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, temp_list, NULL);
629 /* Save Last Track File. */
631 gconf_client_set_string(gconf_client,
632 GCONF_KEY_TRACKFILE, _track_file_uri, NULL);
634 /* Save Auto-Center Mode. */
635 gconf_client_set_int(gconf_client,
636 GCONF_KEY_AUTOCENTER_MODE, _center_mode, NULL);
638 /* Save Auto-Center Rotate Flag. */
639 gconf_client_set_bool(gconf_client,
640 GCONF_KEY_AUTOCENTER_ROTATE, _center_rotate, NULL);
642 /* Save Show Zoom Level flag. */
643 gconf_client_set_bool(gconf_client,
644 GCONF_KEY_SHOWZOOMLEVEL, _show_zoomlevel, NULL);
646 /* Save Show Scale flag. */
647 gconf_client_set_bool(gconf_client,
648 GCONF_KEY_SHOWSCALE, _show_scale, NULL);
650 /* Save Show Compass Rose flag. */
651 gconf_client_set_bool(gconf_client,
652 GCONF_KEY_SHOWCOMPROSE, _show_comprose, NULL);
654 /* Save Show Tracks flag. */
655 gconf_client_set_bool(gconf_client,
656 GCONF_KEY_SHOWTRACKS, _show_paths & TRACKS_MASK, NULL);
658 /* Save Show Routes flag. */
659 gconf_client_set_bool(gconf_client,
660 GCONF_KEY_SHOWROUTES, _show_paths & ROUTES_MASK, NULL);
662 /* Save Show Velocity Vector flag. */
663 gconf_client_set_bool(gconf_client,
664 GCONF_KEY_SHOWVELVEC, _show_velvec, NULL);
666 /* Save Show POIs flag. */
667 gconf_client_set_bool(gconf_client,
668 GCONF_KEY_SHOWPOIS, _show_poi, NULL);
670 /* Save Enable GPS flag. */
671 gconf_client_set_bool(gconf_client,
672 GCONF_KEY_ENABLE_GPS, _enable_gps, NULL);
674 /* Save Enable Tracking flag. */
675 gconf_client_set_bool(gconf_client,
676 GCONF_KEY_ENABLE_TRACKING, _enable_tracking, NULL);
678 /* Save Route Locations. */
679 gconf_client_set_list(gconf_client,
680 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, _loc_list, NULL);
682 /* Save GPS Info flag. */
683 gconf_client_set_bool(gconf_client,
684 GCONF_KEY_GPS_INFO, _gps_info, NULL);
686 /* Save Route Download URL Format. */
687 gconf_client_set_string(gconf_client,
688 GCONF_KEY_ROUTE_DL_URL, _route_dl_url, NULL);
690 /* Save Route Download Radius. */
691 gconf_client_set_int(gconf_client,
692 GCONF_KEY_ROUTE_DL_RADIUS, _route_dl_radius, NULL);
694 /* Save POI Download URL Format. */
695 gconf_client_set_string(gconf_client,
696 GCONF_KEY_POI_DL_URL, _poi_dl_url, NULL);
701 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
703 snprintf(buffer, sizeof(buffer), "#%02x%02x%02x",
705 _color[i].green >> 8,
706 _color[i].blue >> 8);
707 gconf_client_set_string(gconf_client,
708 COLORABLE_GCONF[i], buffer, NULL);
712 /* Save POI database. */
714 gconf_client_set_string(gconf_client,
715 GCONF_KEY_POI_DB, _poi_db_filename, NULL);
717 gconf_client_unset(gconf_client, GCONF_KEY_POI_DB, NULL);
719 /* Save Show POI below zoom. */
720 gconf_client_set_int(gconf_client,
721 GCONF_KEY_POI_ZOOM, _poi_zoom, NULL);
723 gconf_client_clear_cache(gconf_client);
724 g_object_unref(gconf_client);
725 g_free(settings_dir);
727 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
731 scan_cb_dev_found(DBusGProxy *sig_proxy, const gchar *bda,
732 const gchar *name, gpointer *class, guchar rssi, gint coff,
736 printf("%s()\n", __PRETTY_FUNCTION__);
737 gtk_list_store_append(scan_info->store, &iter);
738 gtk_list_store_set(scan_info->store, &iter,
742 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
746 scan_cb_search_complete(DBusGProxy *sig_proxy, ScanInfo *scan_info)
748 printf("%s()\n", __PRETTY_FUNCTION__);
749 gtk_widget_destroy(scan_info->banner);
750 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_DEV_FOUND_SIG,
751 G_CALLBACK(scan_cb_dev_found), scan_info);
752 dbus_g_proxy_disconnect_signal(sig_proxy, BTSEARCH_SEARCH_COMPLETE_SIG,
753 G_CALLBACK(scan_cb_search_complete), scan_info);
754 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
758 scan_start_search(ScanInfo *scan_info)
760 GError *error = NULL;
761 printf("%s()\n", __PRETTY_FUNCTION__);
763 /* Initialize D-Bus. */
764 if(NULL == (scan_info->bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error)))
766 g_printerr("Failed to open connection to D-Bus: %s.\n",
771 if(NULL == (scan_info->req_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
774 BTSEARCH_REQ_INTERFACE)))
776 g_printerr("Failed to create D-Bus request proxy for btsearch.");
780 if(NULL == (scan_info->sig_proxy =dbus_g_proxy_new_for_name(scan_info->bus,
783 BTSEARCH_SIG_INTERFACE)))
785 g_printerr("Failed to create D-Bus signal proxy for btsearch.");
789 dbus_g_object_register_marshaller(
790 g_cclosure_user_marshal_VOID__STRING_STRING_POINTER_UCHAR_UINT,
794 DBUS_TYPE_G_UCHAR_ARRAY,
799 dbus_g_proxy_add_signal(scan_info->sig_proxy,
800 BTSEARCH_DEV_FOUND_SIG,
803 DBUS_TYPE_G_UCHAR_ARRAY,
807 dbus_g_proxy_connect_signal(scan_info->sig_proxy, BTSEARCH_DEV_FOUND_SIG,
808 G_CALLBACK(scan_cb_dev_found), scan_info, NULL);
810 dbus_g_proxy_add_signal(scan_info->sig_proxy,
811 BTSEARCH_SEARCH_COMPLETE_SIG,
813 dbus_g_proxy_connect_signal(scan_info->sig_proxy,
814 BTSEARCH_SEARCH_COMPLETE_SIG,
815 G_CALLBACK(scan_cb_search_complete), scan_info, NULL);
818 if(!dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_START_SEARCH_REQ,
819 &error, G_TYPE_INVALID, G_TYPE_INVALID))
821 if(error->domain == DBUS_GERROR
822 && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
824 g_printerr("Caught remote method exception %s: %s",
825 dbus_g_error_get_name(error),
829 g_printerr("Error: %s\n", error->message);
833 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
838 * Scan for all bluetooth devices. This method can take a few seconds,
839 * during which the UI will freeze.
842 scan_bluetooth(GtkWidget *widget, ScanInfo *scan_info)
844 GError *error = NULL;
845 GtkWidget *dialog = NULL;
846 GtkWidget *lst_devices = NULL;
847 GtkTreeViewColumn *column = NULL;
848 GtkCellRenderer *renderer = NULL;
849 printf("%s()\n", __PRETTY_FUNCTION__);
851 dialog = gtk_dialog_new_with_buttons(_("Select Bluetooth Device"),
852 GTK_WINDOW(scan_info->settings_dialog), GTK_DIALOG_MODAL,
853 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
854 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
857 scan_info->scan_dialog = dialog;
859 scan_info->store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
861 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
863 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
864 lst_devices = gtk_tree_view_new_with_model(
865 GTK_TREE_MODEL(scan_info->store)), TRUE, TRUE, 0);
867 g_object_unref(G_OBJECT(scan_info->store));
869 gtk_tree_selection_set_mode(
870 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
871 GTK_SELECTION_SINGLE);
872 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(lst_devices), TRUE);
874 renderer = gtk_cell_renderer_text_new();
875 column = gtk_tree_view_column_new_with_attributes(
876 _("MAC"), renderer, "text", 0, NULL);
877 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
879 renderer = gtk_cell_renderer_text_new();
880 column = gtk_tree_view_column_new_with_attributes(
881 _("Description"), renderer, "text", 1, NULL);
882 gtk_tree_view_append_column(GTK_TREE_VIEW(lst_devices), column);
884 gtk_widget_show_all(dialog);
886 scan_info->banner = hildon_banner_show_animation(dialog, NULL,
887 _("Scanning for Bluetooth Devices"));
889 if(scan_start_search(scan_info))
891 gtk_widget_destroy(scan_info->banner);
892 popup_error(scan_info->settings_dialog,
893 _("An error occurred while attempting to scan for "
894 "bluetooth devices."));
896 else while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
899 if(gtk_tree_selection_get_selected(
900 gtk_tree_view_get_selection(GTK_TREE_VIEW(lst_devices)),
904 gtk_tree_model_get(GTK_TREE_MODEL(scan_info->store),
906 gtk_entry_set_text(GTK_ENTRY(scan_info->txt_gps_bt_mac), mac);
911 _("Please select a bluetooth device from the list."));
914 gtk_widget_destroy(dialog);
916 /* Clean up D-Bus. */
917 if(scan_info->req_proxy)
919 dbus_g_proxy_call(scan_info->req_proxy, BTSEARCH_STOP_SEARCH_REQ,
920 &error, G_TYPE_INVALID, G_TYPE_INVALID);
921 g_object_unref(scan_info->req_proxy);
922 scan_info->req_proxy = NULL;
924 if(scan_info->sig_proxy)
926 g_object_unref(scan_info->sig_proxy);
927 scan_info->sig_proxy = NULL;
931 dbus_g_connection_unref(scan_info->bus);
932 scan_info->bus = NULL;
935 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
940 settings_dialog_browse_forfile(GtkWidget *widget, BrowseInfo *browse_info)
943 printf("%s()\n", __PRETTY_FUNCTION__);
946 hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),
947 GTK_FILE_CHOOSER_ACTION_OPEN));
949 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
950 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
951 gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
953 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(dialog)))
955 gchar *filename = gtk_file_chooser_get_filename(
956 GTK_FILE_CHOOSER(dialog));
957 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
961 gtk_widget_destroy(dialog);
963 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
968 settings_dialog_hardkeys_reset(GtkWidget *widget, KeysDialogInfo *cdi)
971 printf("%s()\n", __PRETTY_FUNCTION__);
973 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
974 _("Reset all hardware keys to their original defaults?"));
976 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
979 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
980 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
981 CUSTOM_KEY_DEFAULT[i]);
983 gtk_widget_destroy(confirm);
985 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
990 settings_dialog_hardkeys(GtkWidget *widget, GtkWidget *parent)
993 static GtkWidget *dialog = NULL;
994 static GtkWidget *table = NULL;
995 static GtkWidget *label = NULL;
996 static KeysDialogInfo bdi;
997 static GtkWidget *btn_defaults = NULL;
998 printf("%s()\n", __PRETTY_FUNCTION__);
1002 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
1003 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
1004 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1007 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1008 btn_defaults = gtk_button_new_with_label(_("Reset...")));
1009 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
1010 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
1012 gtk_dialog_add_button(GTK_DIALOG(dialog),
1013 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1015 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1016 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
1017 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1020 gtk_table_attach(GTK_TABLE(table),
1021 label = gtk_label_new(""),
1022 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
1023 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1024 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
1025 gtk_table_attach(GTK_TABLE(table),
1026 bdi.cmb[i] = gtk_combo_box_new_text(),
1027 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
1028 for(j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
1029 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
1030 CUSTOM_ACTION_ENUM_TEXT[j]);
1034 /* Initialize contents of the combo boxes. */
1035 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1036 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
1038 gtk_widget_show_all(dialog);
1041 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1043 /* Check for duplicates. */
1044 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1047 for(j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++)
1049 if(gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))
1050 == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j])))
1053 gchar *buffer = g_strdup_printf("%s:\n %s\n%s",
1054 _("The following action is mapped to multiple keys"),
1055 CUSTOM_ACTION_ENUM_TEXT[gtk_combo_box_get_active(
1056 GTK_COMBO_BOX(bdi.cmb[i]))],
1058 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
1061 if(GTK_RESPONSE_OK != gtk_dialog_run(GTK_DIALOG(confirm)))
1063 gtk_widget_destroy(confirm);
1066 gtk_widget_destroy(confirm);
1070 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
1071 _action[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
1075 gtk_widget_hide(dialog);
1077 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1082 settings_dialog_colors_reset(GtkWidget *widget, ColorsDialogInfo *cdi)
1085 printf("%s()\n", __PRETTY_FUNCTION__);
1087 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
1088 _("Reset all colors to their original defaults?"));
1090 if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm)))
1093 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
1095 hildon_color_button_set_color(
1096 HILDON_COLOR_BUTTON(cdi->col[i]),
1097 &COLORABLE_DEFAULT[i]);
1100 gtk_widget_destroy(confirm);
1102 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
1107 settings_dialog_colors(GtkWidget *widget, GtkWidget *parent)
1109 static GtkWidget *dialog = NULL;
1110 static GtkWidget *table = NULL;
1111 static GtkWidget *label = NULL;
1112 static GtkWidget *btn_defaults = NULL;
1113 static ColorsDialogInfo cdi;
1114 printf("%s()\n", __PRETTY_FUNCTION__);
1118 dialog = gtk_dialog_new_with_buttons(_("Colors"),
1119 GTK_WINDOW(parent), GTK_DIALOG_MODAL,
1120 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1123 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1124 btn_defaults = gtk_button_new_with_label(_("Reset...")));
1125 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
1126 G_CALLBACK(settings_dialog_colors_reset), &cdi);
1128 gtk_dialog_add_button(GTK_DIALOG(dialog),
1129 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1131 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1132 table = gtk_table_new(4, 3, FALSE), TRUE, TRUE, 0);
1135 gtk_table_attach(GTK_TABLE(table),
1136 label = gtk_label_new(_("GPS")),
1137 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1138 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1139 gtk_table_attach(GTK_TABLE(table),
1140 cdi.col[COLORABLE_MARK] = hildon_color_button_new(),
1141 1, 2, 0, 1, 0, 0, 2, 4);
1142 gtk_table_attach(GTK_TABLE(table),
1143 cdi.col[COLORABLE_MARK_VELOCITY] = hildon_color_button_new(),
1144 2, 3, 0, 1, 0, 0, 2, 4);
1145 gtk_table_attach(GTK_TABLE(table),
1146 cdi.col[COLORABLE_MARK_OLD] = hildon_color_button_new(),
1147 3, 4, 0, 1, 0, 0, 2, 4);
1150 gtk_table_attach(GTK_TABLE(table),
1151 label = gtk_label_new(_("Track")),
1152 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1153 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1154 gtk_table_attach(GTK_TABLE(table),
1155 cdi.col[COLORABLE_TRACK] = hildon_color_button_new(),
1156 1, 2, 1, 2, 0, 0, 2, 4);
1157 gtk_table_attach(GTK_TABLE(table),
1158 cdi.col[COLORABLE_TRACK_MARK] = hildon_color_button_new(),
1159 2, 3, 1, 2, 0, 0, 2, 4);
1160 gtk_table_attach(GTK_TABLE(table),
1161 cdi.col[COLORABLE_TRACK_BREAK] = hildon_color_button_new(),
1162 3, 4, 1, 2, 0, 0, 2, 4);
1165 gtk_table_attach(GTK_TABLE(table),
1166 label = gtk_label_new(_("Route")),
1167 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1168 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1169 gtk_table_attach(GTK_TABLE(table),
1170 cdi.col[COLORABLE_ROUTE] = hildon_color_button_new(),
1171 1, 2, 2, 3, 0, 0, 2, 4);
1172 gtk_table_attach(GTK_TABLE(table),
1173 cdi.col[COLORABLE_ROUTE_WAY] = hildon_color_button_new(),
1174 2, 3, 2, 3, 0, 0, 2, 4);
1175 gtk_table_attach(GTK_TABLE(table),
1176 cdi.col[COLORABLE_ROUTE_BREAK] = hildon_color_button_new(),
1177 3, 4, 2, 3, 0, 0, 2, 4);
1180 gtk_table_attach(GTK_TABLE(table),
1181 label = gtk_label_new(_("POI")),
1182 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
1183 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1184 gtk_table_attach(GTK_TABLE(table),
1185 cdi.col[COLORABLE_POI] = hildon_color_button_new(),
1186 1, 2, 3, 4, 0, 0, 2, 4);
1189 /* Initialize GPS. */
1190 hildon_color_button_set_color(
1191 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
1192 &_color[COLORABLE_MARK]);
1193 hildon_color_button_set_color(
1194 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
1195 &_color[COLORABLE_MARK_VELOCITY]);
1196 hildon_color_button_set_color(
1197 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1198 &_color[COLORABLE_MARK_OLD]);
1200 /* Initialize Track. */
1201 hildon_color_button_set_color(
1202 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1203 &_color[COLORABLE_TRACK]);
1204 hildon_color_button_set_color(
1205 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1206 &_color[COLORABLE_TRACK_MARK]);
1207 hildon_color_button_set_color(
1208 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1209 &_color[COLORABLE_TRACK_BREAK]);
1211 /* Initialize Route. */
1212 hildon_color_button_set_color(
1213 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1214 &_color[COLORABLE_ROUTE]);
1215 hildon_color_button_set_color(
1216 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1217 &_color[COLORABLE_ROUTE_WAY]);
1218 hildon_color_button_set_color(
1219 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1220 &_color[COLORABLE_ROUTE_BREAK]);
1222 /* Initialize POI. */
1223 hildon_color_button_set_color(
1224 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1225 &_color[COLORABLE_POI]);
1227 gtk_widget_show_all(dialog);
1229 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1232 hildon_color_button_get_color(
1233 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]),
1234 &_color[COLORABLE_MARK]);
1236 hildon_color_button_get_color(
1237 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]),
1238 &_color[COLORABLE_MARK_VELOCITY]);
1240 hildon_color_button_get_color(
1241 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]),
1242 &_color[COLORABLE_MARK_OLD]);
1244 hildon_color_button_get_color(
1245 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]),
1246 &_color[COLORABLE_TRACK]);
1248 hildon_color_button_get_color(
1249 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]),
1250 &_color[COLORABLE_TRACK_MARK]);
1252 hildon_color_button_get_color(
1253 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),
1254 &_color[COLORABLE_TRACK_BREAK]);
1256 hildon_color_button_get_color(
1257 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),
1258 &_color[COLORABLE_ROUTE]);
1260 hildon_color_button_get_color(
1261 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),
1262 &_color[COLORABLE_ROUTE_WAY]);
1264 hildon_color_button_get_color(
1265 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),
1266 &_color[COLORABLE_ROUTE_BREAK]);
1268 hildon_color_button_get_color(
1269 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]),
1270 &_color[COLORABLE_POI]);
1274 color = hildon_color_button_get_color(
1275 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK]));
1276 _color[COLORABLE_MARK] = *color;
1278 color = hildon_color_button_get_color(
1279 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]));
1280 _color[COLORABLE_MARK_VELOCITY] = *color;
1282 color = hildon_color_button_get_color(
1283 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]));
1284 _color[COLORABLE_MARK_OLD] = *color;
1286 color = hildon_color_button_get_color(
1287 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]));
1288 _color[COLORABLE_TRACK] = *color;
1290 color = hildon_color_button_get_color(
1291 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]));
1292 _color[COLORABLE_TRACK_MARK] = *color;
1294 color = hildon_color_button_get_color(
1295 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]));
1296 _color[COLORABLE_TRACK_BREAK] = *color;
1298 color = hildon_color_button_get_color(
1299 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]));
1300 _color[COLORABLE_ROUTE] = *color;
1302 color = hildon_color_button_get_color(
1303 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]));
1304 _color[COLORABLE_ROUTE_WAY] = *color;
1306 color = hildon_color_button_get_color(
1307 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]));
1308 _color[COLORABLE_ROUTE_BREAK] = *color;
1310 color = hildon_color_button_get_color(
1311 HILDON_COLOR_BUTTON(cdi.col[COLORABLE_POI]));
1312 _color[COLORABLE_POI] = *color;
1322 gtk_widget_hide(dialog);
1324 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
1330 void load_aprs_options(GConfClient *gconf_client)
1332 _aprs_server = gconf_client_get_string(
1333 gconf_client, GCONF_KEY_APRS_SERVER, NULL);
1335 _aprs_server_port = gconf_client_get_int(
1336 gconf_client, GCONF_KEY_APRS_SERVER_PORT, NULL);
1338 _aprs_inet_server_validation = gconf_client_get_string(
1339 gconf_client, GCONF_KEY_APRS_SERVER_VAL, NULL);
1341 _aprs_mycall = gconf_client_get_string(gconf_client,
1342 GCONF_KEY_APRS_MYCALL, NULL);
1345 _aprs_tty_port = gconf_client_get_string(gconf_client,
1346 GCONF_KEY_APRS_TTY_PORT, NULL);
1350 _aprs_inet_beacon_comment = gconf_client_get_string(gconf_client,
1351 GCONF_KEY_APRS_INET_BEACON, NULL);
1353 _aprs_inet_beacon_interval = gconf_client_get_int(
1354 gconf_client, GCONF_KEY_APRS_INET_BEACON_INTERVAL, NULL);
1356 _aprs_std_pos_hist = gconf_client_get_int(
1357 gconf_client, GCONF_KEY_APRS_MAX_TRACK_PTS, NULL);
1359 _aprs_max_stations = gconf_client_get_int(
1360 gconf_client, GCONF_KEY_APRS_MAX_STATIONS, NULL);
1362 _aprs_enable = gconf_client_get_bool(gconf_client,
1363 GCONF_KEY_APRS_ENABLE, NULL);
1365 _aprs_show_new_station_alert = gconf_client_get_bool(gconf_client,
1366 GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, NULL);
1368 _aprs_tnc_method = gconf_client_get_int(
1369 gconf_client, GCONF_KEY_APRS_TNC_CONN_METHOD, NULL);
1371 _aprs_tnc_bt_mac = gconf_client_get_string(gconf_client,
1372 GCONF_KEY_APRS_TNC_BT_MAC, NULL);
1374 _aprs_server_auto_filter_km = gconf_client_get_int(
1375 gconf_client, GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, NULL);
1377 _aprs_server_auto_filter_on = gconf_client_get_bool(gconf_client,
1378 GCONF_KEY_APRS_INET_AUTO_FILTER, NULL);
1380 _aprs_beacon_comment = gconf_client_get_string(gconf_client,
1381 GCONF_KEY_APRS_BEACON_COMMENT, NULL);
1383 _aprs_enable_inet_tx = gconf_client_get_bool(gconf_client,
1384 GCONF_KEY_APRS_ENABLE_INET_TX, NULL);
1385 _aprs_enable_tty_tx = gconf_client_get_bool(gconf_client,
1386 GCONF_KEY_APRS_ENABLE_TTY_TX, NULL);
1388 _aprs_tty_beacon_interval = gconf_client_get_int(
1389 gconf_client, GCONF_KEY_APRS_TTY_BEACON_INTERVAL, NULL);
1392 //_aprs_unproto_path = g_strdup_printf("WIDE2-2");
1393 _aprs_unproto_path = gconf_client_get_string(gconf_client,
1394 GCONF_KEY_APRS_BEACON_PATH, NULL);
1396 _aprs_transmit_compressed_posit = gconf_client_get_bool(gconf_client,
1397 GCONF_KEY_APRS_BEACON_COMPRESSED, NULL);
1400 tmp = gconf_client_get_string(gconf_client,
1401 GCONF_KEY_APRS_BEACON_SYM_GROUP, NULL);
1402 if(tmp && strlen(tmp)>0) _aprs_beacon_group = tmp[0];
1403 else _aprs_beacon_group = '/';
1405 //_aprs_beacon_symbol = 'k';
1406 tmp = gconf_client_get_string(gconf_client,
1407 GCONF_KEY_APRS_BEACON_SYMBOL, NULL);
1408 if(tmp && strlen(tmp)>0) _aprs_beacon_symbol = tmp[0];
1409 else _aprs_beacon_symbol = 'l';
1415 #endif // INCLUDE_APRS
1418 * Bring up the Settings dialog. Return TRUE if and only if the recever
1419 * information has changed (MAC or channel).
1421 gboolean settings_dialog()
1423 static GtkWidget *dialog = NULL;
1424 static GtkWidget *notebook = NULL;
1425 static GtkWidget *table = NULL;
1426 static GtkWidget *hbox = NULL;
1427 static GtkWidget *label = NULL;
1428 static GtkWidget *rad_gps_bt = NULL;
1429 static GtkWidget *rad_gps_gpsd = NULL;
1430 static GtkWidget *rad_gps_file = NULL;
1431 static GtkWidget *txt_gps_bt_mac = NULL;
1432 static GtkWidget *txt_gps_gpsd_host = NULL;
1433 static GtkWidget *num_gps_gpsd_port = NULL;
1434 static GtkWidget *txt_gps_file_path = NULL;
1435 static GtkWidget *num_center_ratio = NULL;
1436 static GtkWidget *num_lead_ratio = NULL;
1437 static GtkWidget *chk_lead_is_fixed = NULL;
1438 static GtkWidget *num_rotate_sens = NULL;
1439 static GtkWidget *cmb_rotate_dir = NULL;
1440 static GtkWidget *num_ac_min_speed = NULL;
1441 static GtkWidget *num_announce_notice = NULL;
1442 static GtkWidget *chk_enable_voice = NULL;
1443 static GtkWidget *chk_enable_announce = NULL;
1444 static GtkWidget *num_draw_width = NULL;
1445 static GtkWidget *cmb_units = NULL;
1446 static GtkWidget *cmb_degformat = NULL;
1447 static GtkWidget *btn_scan = NULL;
1448 static GtkWidget *btn_browse_gps = NULL;
1449 static GtkWidget *btn_buttons = NULL;
1450 static GtkWidget *btn_colors = NULL;
1452 static GtkWidget *txt_poi_db = NULL;
1453 static GtkWidget *btn_browse_poi = NULL;
1454 static GtkWidget *num_poi_zoom = NULL;
1455 static GtkWidget *num_auto_download_precache = NULL;
1456 static GtkWidget *chk_speed_limit_on = NULL;
1457 static GtkWidget *num_speed = NULL;
1458 static GtkWidget *cmb_speed_location = NULL;
1459 static GtkWidget *cmb_unblank_option = NULL;
1460 static GtkWidget *cmb_info_font_size = NULL;
1462 static BrowseInfo poi_browse_info = {0, 0};
1463 static BrowseInfo gps_file_browse_info = {0, 0};
1464 static ScanInfo scan_info = {0};
1465 gboolean rcvr_changed = FALSE;
1467 printf("%s()\n", __PRETTY_FUNCTION__);
1471 dialog = gtk_dialog_new_with_buttons(_("Settings"),
1472 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
1473 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
1476 /* Enable the help button. */
1478 hildon_help_dialog_help_enable(
1480 ossohelp_dialog_help_enable(
1482 GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
1484 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1485 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
1487 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
1488 btn_colors = gtk_button_new_with_label(_("Colors...")));
1490 gtk_dialog_add_button(GTK_DIALOG(dialog),
1491 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
1493 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
1494 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
1496 /* Receiver page. */
1497 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1498 table = gtk_table_new(3, 4, FALSE),
1499 label = gtk_label_new(_("GPS")));
1501 /* Receiver MAC Address. */
1502 gtk_table_attach(GTK_TABLE(table),
1503 rad_gps_bt = gtk_radio_button_new_with_label(
1504 NULL, _("Bluetooth")),
1505 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1506 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1507 gtk_table_attach(GTK_TABLE(table),
1508 hbox = gtk_hbox_new(FALSE, 4),
1509 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1510 gtk_box_pack_start(GTK_BOX(hbox),
1511 txt_gps_bt_mac = gtk_entry_new(),
1513 #ifdef MAEMO_CHANGES
1515 g_object_set(G_OBJECT(txt_gps_bt_mac), "hildon-input-mode",
1516 HILDON_GTK_INPUT_MODE_FULL, NULL);
1518 g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
1521 gtk_box_pack_start(GTK_BOX(hbox),
1522 btn_scan = gtk_button_new_with_label(_("Scan...")),
1524 #ifndef HAVE_LIBGPSBT
1525 gtk_widget_set_sensitive(rad_gps_bt, FALSE);
1526 gtk_widget_set_sensitive(txt_gps_bt_mac, FALSE);
1527 gtk_widget_set_sensitive(btn_scan, FALSE);
1530 /* File Path (RFComm). */
1531 gtk_table_attach(GTK_TABLE(table),
1532 rad_gps_file = gtk_radio_button_new_with_label_from_widget(
1533 GTK_RADIO_BUTTON(rad_gps_bt), _("File Path")),
1534 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1535 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1536 gtk_table_attach(GTK_TABLE(table),
1537 hbox = gtk_hbox_new(FALSE, 4),
1538 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1539 gtk_box_pack_start(GTK_BOX(hbox),
1540 txt_gps_file_path = gtk_entry_new(),
1542 #ifdef MAEMO_CHANGES
1544 g_object_set(G_OBJECT(txt_gps_file_path), "hildon-input-mode",
1545 HILDON_GTK_INPUT_MODE_FULL, NULL);
1547 g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
1550 gtk_box_pack_start(GTK_BOX(hbox),
1551 btn_browse_gps = gtk_button_new_with_label(_("Browse...")),
1553 #ifndef HAVE_LIBGPSBT
1554 gtk_widget_set_sensitive(rad_gps_file, FALSE);
1555 gtk_widget_set_sensitive(txt_gps_file_path, FALSE);
1556 gtk_widget_set_sensitive(btn_browse_gps, FALSE);
1559 /* GPSD Hostname and Port. */
1560 gtk_table_attach(GTK_TABLE(table),
1561 rad_gps_gpsd = gtk_radio_button_new_with_label_from_widget(
1562 GTK_RADIO_BUTTON(rad_gps_bt), _("GPSD Host")),
1563 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1564 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1565 gtk_table_attach(GTK_TABLE(table),
1566 hbox = gtk_hbox_new(FALSE, 4),
1567 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1568 gtk_box_pack_start(GTK_BOX(hbox),
1569 txt_gps_gpsd_host = gtk_entry_new(),
1571 #ifdef MAEMO_CHANGES
1573 g_object_set(G_OBJECT(txt_gps_gpsd_host), "hildon-input-mode",
1574 HILDON_GTK_INPUT_MODE_FULL, NULL);
1576 g_object_set(G_OBJECT(txt_gps_gpsd_host), HILDON_AUTOCAP, FALSE, NULL);
1579 gtk_box_pack_start(GTK_BOX(hbox),
1580 label = gtk_label_new(_("Port")),
1582 gtk_box_pack_start(GTK_BOX(hbox),
1583 num_gps_gpsd_port = hildon_number_editor_new(1, 65535),
1587 /* Auto-Center page. */
1588 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1589 table = gtk_table_new(3, 3, FALSE),
1590 label = gtk_label_new(_("Auto-Center")));
1593 gtk_table_attach(GTK_TABLE(table),
1594 label = gtk_label_new(_("Lead Amount")),
1595 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1596 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1597 gtk_table_attach(GTK_TABLE(table),
1598 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1599 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1600 gtk_container_add(GTK_CONTAINER(label),
1601 num_lead_ratio = hildon_controlbar_new());
1602 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
1603 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
1605 gtk_table_attach(GTK_TABLE(table),
1606 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1607 2, 3, 0, 1, GTK_FILL, 0, 2, 4);
1608 gtk_container_add(GTK_CONTAINER(label),
1609 chk_lead_is_fixed = gtk_check_button_new_with_label(_("Fixed")));
1611 /* Auto-Center Pan Sensitivity. */
1612 gtk_table_attach(GTK_TABLE(table),
1613 label = gtk_label_new(_("Pan Sensitivity")),
1614 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1615 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1616 gtk_table_attach(GTK_TABLE(table),
1617 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1618 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1619 gtk_container_add(GTK_CONTAINER(label),
1620 num_center_ratio = hildon_controlbar_new());
1621 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1,10);
1622 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
1624 gtk_table_attach(GTK_TABLE(table),
1625 hbox = gtk_hbox_new(FALSE, 4),
1626 2, 3, 1, 2, GTK_FILL, 0, 2, 4);
1627 gtk_box_pack_start(GTK_BOX(hbox),
1628 label = gtk_label_new(_("Min. Speed")),
1630 gtk_box_pack_start(GTK_BOX(hbox),
1631 num_ac_min_speed = hildon_number_editor_new(0, 99),
1634 /* Auto-Center Rotate Sensitivity. */
1635 gtk_table_attach(GTK_TABLE(table),
1636 label = gtk_label_new(_("Rotate Sensit.")),
1637 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1638 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1639 gtk_table_attach(GTK_TABLE(table),
1640 num_rotate_sens = hildon_controlbar_new(),
1641 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1642 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_rotate_sens), 1,10);
1643 force_min_visible_bars(HILDON_CONTROLBAR(num_rotate_sens), 1);
1645 gtk_table_attach(GTK_TABLE(table),
1646 hbox = gtk_hbox_new(FALSE, 4),
1647 2, 3, 2, 3, GTK_FILL, 0, 2, 4);
1648 gtk_box_pack_start(GTK_BOX(hbox),
1649 label = gtk_label_new(_("Points")),
1651 gtk_box_pack_start(GTK_BOX(hbox),
1652 cmb_rotate_dir = gtk_combo_box_new_text(),
1654 for(i = 0; i < ROTATE_DIR_ENUM_COUNT; i++)
1655 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_rotate_dir),
1656 ROTATE_DIR_ENUM_TEXT[i]);
1659 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1660 table = gtk_table_new(2, 3, FALSE),
1661 label = gtk_label_new(_("Announce")));
1663 /* Enable Waypoint Announcements. */
1664 gtk_table_attach(GTK_TABLE(table),
1665 chk_enable_announce = gtk_check_button_new_with_label(
1666 _("Enable Waypoint Announcements")),
1667 0, 2, 0, 1, GTK_FILL, 0, 2, 4);
1668 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_announce),
1671 /* Announcement Advance Notice. */
1672 gtk_table_attach(GTK_TABLE(table),
1673 label = gtk_label_new(_("Advance Notice")),
1674 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1675 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1676 gtk_table_attach(GTK_TABLE(table),
1677 num_announce_notice = hildon_controlbar_new(),
1678 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1679 hildon_controlbar_set_range(
1680 HILDON_CONTROLBAR(num_announce_notice), 1, 20);
1681 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
1684 gtk_table_attach(GTK_TABLE(table),
1685 chk_enable_voice = gtk_check_button_new_with_label(
1686 _("Enable Voice Synthesis (requires flite)")),
1687 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
1688 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
1692 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1693 table = gtk_table_new(3, 5, FALSE),
1694 label = gtk_label_new(_("Misc.")));
1697 gtk_table_attach(GTK_TABLE(table),
1698 label = gtk_label_new(_("Line Width")),
1699 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1700 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1701 gtk_table_attach(GTK_TABLE(table),
1702 num_draw_width = hildon_controlbar_new(),
1703 1, 5, 0, 1, GTK_FILL, 0, 2, 4);
1704 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
1705 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
1707 /* Unblank Screen */
1708 gtk_table_attach(GTK_TABLE(table),
1709 label = gtk_label_new(_("Unblank Screen")),
1710 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1711 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1712 gtk_table_attach(GTK_TABLE(table),
1713 cmb_unblank_option = gtk_combo_box_new_text(),
1714 1, 5, 1, 2, GTK_FILL, 0, 2, 4);
1715 for(i = 0; i < UNBLANK_ENUM_COUNT; i++)
1716 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_unblank_option),
1717 UNBLANK_ENUM_TEXT[i]);
1719 /* Information Font Size. */
1720 gtk_table_attach(GTK_TABLE(table),
1721 label = gtk_label_new(_("Info Font Size")),
1722 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1723 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1724 gtk_table_attach(GTK_TABLE(table),
1725 cmb_info_font_size = gtk_combo_box_new_text(),
1726 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1727 for(i = 0; i < INFO_FONT_ENUM_COUNT; i++)
1728 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
1729 INFO_FONT_ENUM_TEXT[i]);
1731 gtk_table_attach(GTK_TABLE(table),
1732 gtk_vseparator_new(),
1733 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 2,4);
1737 gtk_table_attach(GTK_TABLE(table),
1738 label = gtk_label_new(_("Units")),
1739 3, 4, 2, 3, GTK_FILL, 0, 2, 4);
1740 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1741 gtk_table_attach(GTK_TABLE(table),
1742 cmb_units = gtk_combo_box_new_text(),
1743 4, 5, 2, 3, GTK_FILL, 0, 2, 4);
1744 for(i = 0; i < UNITS_ENUM_COUNT; i++)
1745 gtk_combo_box_append_text(
1746 GTK_COMBO_BOX(cmb_units), UNITS_ENUM_TEXT[i]);
1749 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1750 table = gtk_table_new(3, 4, FALSE),
1751 label = gtk_label_new(_("Misc. 2")));
1753 /* Degrees format */
1754 gtk_table_attach(GTK_TABLE(table),
1755 label = gtk_label_new(_("Degrees Format")),
1756 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
1757 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1758 gtk_table_attach(GTK_TABLE(table),
1759 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1760 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
1761 gtk_container_add(GTK_CONTAINER(label),
1762 cmb_degformat = gtk_combo_box_new_text());
1763 for(i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
1764 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
1765 DEG_FORMAT_ENUM_TEXT[i].name);
1767 gtk_table_attach(GTK_TABLE(table),
1768 label = gtk_label_new(_("Auto-Download Pre-cache")),
1769 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1770 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1771 gtk_table_attach(GTK_TABLE(table),
1772 num_auto_download_precache = hildon_controlbar_new(),
1773 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
1774 hildon_controlbar_set_range(
1775 HILDON_CONTROLBAR(num_auto_download_precache), 1, 5);
1776 force_min_visible_bars(
1777 HILDON_CONTROLBAR(num_auto_download_precache), 1);
1780 gtk_table_attach(GTK_TABLE(table),
1781 hbox = gtk_hbox_new(FALSE, 4),
1782 0, 4, 2, 3, GTK_FILL, 0, 2, 4);
1784 gtk_box_pack_start(GTK_BOX(hbox),
1785 chk_speed_limit_on = gtk_check_button_new_with_label(
1789 gtk_box_pack_start(GTK_BOX(hbox),
1790 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1792 gtk_container_add(GTK_CONTAINER(label),
1793 num_speed = hildon_number_editor_new(0, 999));
1795 gtk_box_pack_start(GTK_BOX(hbox),
1796 label = gtk_label_new(_("Location")),
1798 gtk_box_pack_start(GTK_BOX(hbox),
1799 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1801 gtk_container_add(GTK_CONTAINER(label),
1802 cmb_speed_location = gtk_combo_box_new_text());
1803 for(i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
1804 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
1805 SPEED_LOCATION_ENUM_TEXT[i]);
1809 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
1810 table = gtk_table_new(2, 3, FALSE),
1811 label = gtk_label_new(_("POI")));
1814 gtk_table_attach(GTK_TABLE(table),
1815 label = gtk_label_new(_("POI database")),
1816 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
1817 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1818 gtk_table_attach(GTK_TABLE(table),
1819 hbox = gtk_hbox_new(FALSE, 4),
1820 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
1821 gtk_box_pack_start(GTK_BOX(hbox),
1822 txt_poi_db = gtk_entry_new(),
1824 #ifdef MAEMO_CHANGES
1826 g_object_set(G_OBJECT(txt_poi_db), "hildon-input-mode",
1827 HILDON_GTK_INPUT_MODE_FULL, NULL);
1829 g_object_set(G_OBJECT(txt_poi_db), HILDON_AUTOCAP, FALSE, NULL);
1832 gtk_box_pack_start(GTK_BOX(hbox),
1833 btn_browse_poi = gtk_button_new_with_label(_("Browse...")),
1836 /* Show POI below zoom. */
1837 gtk_table_attach(GTK_TABLE(table),
1838 label = gtk_label_new(_("Show POI below zoom")),
1839 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
1840 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
1841 gtk_table_attach(GTK_TABLE(table),
1842 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
1843 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
1844 gtk_container_add(GTK_CONTAINER(label),
1845 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
1847 /* Connect signals. */
1848 memset(&scan_info, 0, sizeof(scan_info));
1849 scan_info.settings_dialog = dialog;
1850 scan_info.txt_gps_bt_mac = txt_gps_bt_mac;
1851 g_signal_connect(G_OBJECT(btn_scan), "clicked",
1852 G_CALLBACK(scan_bluetooth), &scan_info);
1853 g_signal_connect(G_OBJECT(btn_buttons), "clicked",
1854 G_CALLBACK(settings_dialog_hardkeys), dialog);
1855 g_signal_connect(G_OBJECT(btn_colors), "clicked",
1856 G_CALLBACK(settings_dialog_colors), dialog);
1858 poi_browse_info.dialog = dialog;
1859 poi_browse_info.txt = txt_poi_db;
1860 g_signal_connect(G_OBJECT(btn_browse_poi), "clicked",
1861 G_CALLBACK(settings_dialog_browse_forfile), &poi_browse_info);
1863 gps_file_browse_info.dialog = dialog;
1864 gps_file_browse_info.txt = txt_gps_file_path;
1865 g_signal_connect(G_OBJECT(btn_browse_gps), "clicked",
1866 G_CALLBACK(settings_dialog_browse_forfile),
1867 &gps_file_browse_info);
1871 /* Initialize fields. */
1873 gtk_entry_set_text(GTK_ENTRY(txt_gps_bt_mac), _gri.bt_mac);
1875 gtk_entry_set_text(GTK_ENTRY(txt_gps_gpsd_host), _gri.gpsd_host);
1876 hildon_number_editor_set_value(
1877 HILDON_NUMBER_EDITOR(num_gps_gpsd_port), _gri.gpsd_port);
1879 gtk_entry_set_text(GTK_ENTRY(txt_gps_file_path), _gri.file_path);
1883 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd),TRUE);
1886 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_file),TRUE);
1888 default: /* Including GPS_RCVR_BT */
1889 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rad_gps_bt), TRUE);
1893 if(_poi_db_filename)
1894 gtk_entry_set_text(GTK_ENTRY(txt_poi_db), _poi_db_filename);
1895 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
1897 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
1899 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
1901 gtk_toggle_button_set_active(
1902 GTK_TOGGLE_BUTTON(chk_lead_is_fixed), _lead_is_fixed);
1903 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_rotate_sens),
1905 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_rotate_dir), _rotate_dir);
1906 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_ac_min_speed),
1908 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
1909 _announce_notice_ratio);
1910 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
1912 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
1913 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
1914 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
1916 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_auto_download_precache),
1917 _auto_download_precache);
1918 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed),
1920 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location),
1922 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_unblank_option),
1924 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size),
1927 gtk_widget_show_all(dialog);
1929 while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
1931 GpsRcvrType new_grtype;
1933 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd))
1934 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1936 popup_error(dialog, _("Please specify a GPSD hostname."));
1940 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file))
1941 && !*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
1943 popup_error(dialog, _("Please specify a GPS file pathname."));
1947 /* Set _gri.bt_mac if necessary. */
1948 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac)))
1950 /* User specified no rcvr mac - set _gri.bt_mac to NULL. */
1953 g_free(_gri.bt_mac);
1955 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1958 else if(!_gri.bt_mac || strcmp(_gri.bt_mac,
1959 gtk_entry_get_text(GTK_ENTRY(txt_gps_bt_mac))))
1961 /* User specified a new rcvr mac. */
1962 g_free(_gri.bt_mac);
1963 _gri.bt_mac = g_strdup(gtk_entry_get_text(
1964 GTK_ENTRY(txt_gps_bt_mac)));
1965 rcvr_changed = (_gri.type == GPS_RCVR_BT);
1968 /* Set _gri.gpsd_host if necessary. */
1969 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host)))
1971 /* User specified no rcvr mac - set _gri.gpsd_host to NULL. */
1974 g_free(_gri.gpsd_host);
1975 _gri.gpsd_host = NULL;
1976 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1979 else if(!_gri.gpsd_host || strcmp(_gri.gpsd_host,
1980 gtk_entry_get_text(GTK_ENTRY(txt_gps_gpsd_host))))
1982 /* User specified a new rcvr mac. */
1983 g_free(_gri.gpsd_host);
1984 _gri.gpsd_host = g_strdup(gtk_entry_get_text(
1985 GTK_ENTRY(txt_gps_gpsd_host)));
1986 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1989 if(_gri.gpsd_port != hildon_number_editor_get_value(
1990 HILDON_NUMBER_EDITOR(num_gps_gpsd_port)))
1992 _gri.gpsd_port = hildon_number_editor_get_value(
1993 HILDON_NUMBER_EDITOR(num_gps_gpsd_port));
1994 rcvr_changed = (_gri.type == GPS_RCVR_GPSD);
1997 /* Set _gri.file_path if necessary. */
1998 if(!*gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path)))
2000 /* User specified no rcvr mac - set _gri.file_path to NULL. */
2003 g_free(_gri.file_path);
2004 _gri.file_path = NULL;
2005 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
2008 else if(!_gri.file_path || strcmp(_gri.file_path,
2009 gtk_entry_get_text(GTK_ENTRY(txt_gps_file_path))))
2011 /* User specified a new rcvr mac. */
2012 g_free(_gri.file_path);
2013 _gri.file_path = g_strdup(gtk_entry_get_text(
2014 GTK_ENTRY(txt_gps_file_path)));
2015 rcvr_changed = (_gri.type == GPS_RCVR_FILE);
2018 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_bt)))
2019 new_grtype = GPS_RCVR_BT;
2020 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_gpsd)))
2021 new_grtype = GPS_RCVR_GPSD;
2022 else if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rad_gps_file)))
2023 new_grtype = GPS_RCVR_FILE;
2025 new_grtype = GPS_RCVR_BT;
2027 if(new_grtype != _gri.type)
2029 _gri.type = new_grtype;
2030 rcvr_changed = TRUE;
2033 _center_ratio = hildon_controlbar_get_value(
2034 HILDON_CONTROLBAR(num_center_ratio));
2036 _lead_ratio = hildon_controlbar_get_value(
2037 HILDON_CONTROLBAR(num_lead_ratio));
2039 _lead_is_fixed = gtk_toggle_button_get_active(
2040 GTK_TOGGLE_BUTTON(chk_lead_is_fixed));
2042 _rotate_sens = hildon_controlbar_get_value(
2043 HILDON_CONTROLBAR(num_rotate_sens));
2045 _ac_min_speed = hildon_number_editor_get_value(
2046 HILDON_NUMBER_EDITOR(num_ac_min_speed));
2048 _rotate_dir = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_rotate_dir));
2050 _auto_download_precache = hildon_controlbar_get_value(
2051 HILDON_CONTROLBAR(num_auto_download_precache));
2053 _draw_width = hildon_controlbar_get_value(
2054 HILDON_CONTROLBAR(num_draw_width));
2056 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
2057 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
2059 _speed_limit_on = gtk_toggle_button_get_active(
2060 GTK_TOGGLE_BUTTON(chk_speed_limit_on));
2061 _speed_limit = hildon_number_editor_get_value(
2062 HILDON_NUMBER_EDITOR(num_speed));
2063 _speed_location = gtk_combo_box_get_active(
2064 GTK_COMBO_BOX(cmb_speed_location));
2066 _unblank_option = gtk_combo_box_get_active(
2067 GTK_COMBO_BOX(cmb_unblank_option));
2069 _info_font_size = gtk_combo_box_get_active(
2070 GTK_COMBO_BOX(cmb_info_font_size));
2072 _announce_notice_ratio = hildon_controlbar_get_value(
2073 HILDON_CONTROLBAR(num_announce_notice));
2075 _enable_announce = gtk_toggle_button_get_active(
2076 GTK_TOGGLE_BUTTON(chk_enable_announce));
2078 _enable_voice = gtk_toggle_button_get_active(
2079 GTK_TOGGLE_BUTTON(chk_enable_voice));
2081 /* Check if user specified a different POI database from before. */
2082 if((!_poi_db_filename && *gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
2083 || strcmp(_poi_db_filename,
2084 gtk_entry_get_text(GTK_ENTRY(txt_poi_db))))
2086 /* Clear old filename/dirname, if necessary. */
2087 if(_poi_db_filename)
2089 g_free(_poi_db_filename);
2090 _poi_db_filename = NULL;
2091 g_free(_poi_db_dirname);
2092 _poi_db_dirname = NULL;
2095 if(*gtk_entry_get_text(GTK_ENTRY(txt_poi_db)))
2097 _poi_db_filename = g_strdup(gtk_entry_get_text(
2098 GTK_ENTRY(txt_poi_db)));
2099 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
2105 _poi_zoom = hildon_number_editor_get_value(
2106 HILDON_NUMBER_EDITOR(num_poi_zoom));
2113 map_refresh_mark(TRUE);
2118 gtk_widget_hide(dialog);
2120 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);
2121 return rcvr_changed;
2125 settings_parse_repo(gchar *str)
2127 /* Parse each part of a repo, delimited by newline characters:
2132 * 5. view_zoom_steps
2135 * If layer_level > 0, have additional fields:
2137 * 8. layer_refresh_interval
2139 gchar *token, *error_check;
2140 printf("%s(%s)\n", __PRETTY_FUNCTION__, str);
2142 RepoData *rd = g_new0(RepoData, 1);
2145 token = strsep(&str, "\n\t");
2147 rd->name = g_strdup(token);
2149 /* Parse URL format. */
2150 token = strsep(&str, "\n\t");
2152 rd->url = g_strdup(token);
2154 /* Parse cache dir. */
2155 token = strsep(&str, "\n\t");
2157 rd->db_filename = gnome_vfs_expand_initial_tilde(token);
2159 /* Parse download zoom steps. */
2160 token = strsep(&str, "\n\t");
2161 if(!token || !*token || !(rd->dl_zoom_steps = atoi(token)))
2162 rd->dl_zoom_steps = 2;
2164 /* Parse view zoom steps. */
2165 token = strsep(&str, "\n\t");
2166 if(!token || !*token || !(rd->view_zoom_steps = atoi(token)))
2167 rd->view_zoom_steps = 1;
2169 /* Parse double-size. */
2170 token = strsep(&str, "\n\t");
2172 rd->double_size = atoi(token); /* Default is zero (FALSE) */
2174 /* Parse next-able. */
2175 token = strsep(&str, "\n\t");
2176 if(!token || !*token
2177 || (rd->nextable = strtol(token, &error_check, 10), token == str))
2178 rd->nextable = TRUE;
2180 /* Parse min zoom. */
2181 token = strsep(&str, "\n\t");
2182 if(!token || !*token
2183 || (rd->min_zoom = strtol(token, &error_check, 10), token == str))
2186 /* Parse max zoom. */
2187 token = strsep(&str, "\n\t");
2188 if(!token || !*token
2189 || (rd->max_zoom = strtol(token, &error_check, 10), token == str))
2192 /* Parse layer_level */
2193 token = strsep(&str, "\n\t");
2194 if(!token || !*token
2195 || (rd->layer_level = strtol(token, &error_check, 10), token == str))
2196 rd->layer_level = 0;
2198 if (rd->layer_level) {
2199 /* Parse layer_enabled */
2200 token = strsep(&str, "\n\t");
2201 if(!token || !*token || (rd->layer_enabled = strtol(token, &error_check, 10), token == str))
2202 rd->layer_enabled = 0;
2204 /* Parse layer_refresh_interval */
2205 token = strsep(&str, "\n\t");
2206 if(!token || !*token || (rd->layer_refresh_interval = strtol(token, &error_check, 10), token == str))
2207 rd->layer_refresh_interval = 0;
2209 rd->layer_refresh_countdown = rd->layer_refresh_interval;
2214 vprintf("%s(): return %p\n", __PRETTY_FUNCTION__, rd);
2219 * Initialize all configuration from GCONF. This should not be called more
2220 * than once during execution.
2226 GConfClient *gconf_client = gconf_client_get_default();
2228 printf("%s()\n", __PRETTY_FUNCTION__);
2230 /* Initialize some constants. */
2231 CUSTOM_KEY_GCONF[CUSTOM_KEY_UP] = GCONF_KEY_PREFIX"/key_up";
2232 CUSTOM_KEY_GCONF[CUSTOM_KEY_DOWN] = GCONF_KEY_PREFIX"/key_down";
2233 CUSTOM_KEY_GCONF[CUSTOM_KEY_LEFT] = GCONF_KEY_PREFIX"/key_left";
2234 CUSTOM_KEY_GCONF[CUSTOM_KEY_RIGHT] = GCONF_KEY_PREFIX"/key_right";
2235 CUSTOM_KEY_GCONF[CUSTOM_KEY_SELECT] = GCONF_KEY_PREFIX"/key_select";
2236 CUSTOM_KEY_GCONF[CUSTOM_KEY_INCREASE] = GCONF_KEY_PREFIX"/key_increase";
2237 CUSTOM_KEY_GCONF[CUSTOM_KEY_DECREASE] = GCONF_KEY_PREFIX"/key_decrease";
2238 CUSTOM_KEY_GCONF[CUSTOM_KEY_FULLSCREEN]= GCONF_KEY_PREFIX"/key_fullscreen";
2239 CUSTOM_KEY_GCONF[CUSTOM_KEY_ESC] = GCONF_KEY_PREFIX"/key_esc";
2241 COLORABLE_GCONF[COLORABLE_MARK] = GCONF_KEY_PREFIX"/color_mark";
2242 COLORABLE_GCONF[COLORABLE_MARK_VELOCITY]
2243 = GCONF_KEY_PREFIX"/color_mark_velocity";
2244 COLORABLE_GCONF[COLORABLE_MARK_OLD] = GCONF_KEY_PREFIX"/color_mark_old";
2245 COLORABLE_GCONF[COLORABLE_TRACK] = GCONF_KEY_PREFIX"/color_track";
2246 COLORABLE_GCONF[COLORABLE_TRACK_MARK] =GCONF_KEY_PREFIX"/color_track_mark";
2247 COLORABLE_GCONF[COLORABLE_TRACK_BREAK]
2248 = GCONF_KEY_PREFIX"/color_track_break";
2249 COLORABLE_GCONF[COLORABLE_ROUTE] = GCONF_KEY_PREFIX"/color_route";
2250 COLORABLE_GCONF[COLORABLE_ROUTE_WAY] = GCONF_KEY_PREFIX"/color_route_way";
2251 COLORABLE_GCONF[COLORABLE_ROUTE_BREAK]
2252 = GCONF_KEY_PREFIX"/color_route_break";
2253 COLORABLE_GCONF[COLORABLE_POI] = GCONF_KEY_PREFIX"/color_poi";
2256 COLORABLE_GCONF[COLORABLE_APRS_STATION] = GCONF_KEY_PREFIX"/color_aprs_station";
2257 #endif // INCLUDE_APRS
2261 popup_error(_window, _("Failed to initialize GConf. Quitting."));
2265 /* Get GPS Receiver Type. Default is Bluetooth Receiver. */
2267 gchar *gri_type_str = gconf_client_get_string(gconf_client,
2268 GCONF_KEY_GPS_RCVR_TYPE, NULL);
2272 for(i = GPS_RCVR_ENUM_COUNT - 1; i > 0; i--)
2273 if(!strcmp(gri_type_str, GPS_RCVR_ENUM_TEXT[i]))
2275 g_free(gri_type_str);
2280 /* Get Bluetooth Receiver MAC. Default is NULL. */
2281 _gri.bt_mac = gconf_client_get_string(
2282 gconf_client, GCONF_KEY_GPS_BT_MAC, NULL);
2284 /* Get GPSD Host. Default is localhost. */
2285 _gri.gpsd_host = gconf_client_get_string(
2286 gconf_client, GCONF_KEY_GPS_GPSD_HOST, NULL);
2288 _gri.gpsd_host = g_strdup("127.0.0.1");
2290 /* Get GPSD Port. Default is GPSD_PORT_DEFAULT (2947). */
2291 if(!(_gri.gpsd_port = gconf_client_get_int(
2292 gconf_client, GCONF_KEY_GPS_GPSD_PORT, NULL)))
2293 _gri.gpsd_port = GPSD_PORT_DEFAULT;
2295 /* Get File Path. Default is /dev/pgps. */
2296 _gri.file_path = gconf_client_get_string(
2297 gconf_client, GCONF_KEY_GPS_FILE_PATH, NULL);
2299 _gri.file_path = g_strdup("/dev/pgps");
2301 /* Get Auto-Download. Default is FALSE. */
2302 _auto_download = gconf_client_get_bool(gconf_client,
2303 GCONF_KEY_AUTO_DOWNLOAD, NULL);
2305 /* Get Auto-Download Pre-cache - Default is 2. */
2306 _auto_download_precache = gconf_client_get_int(gconf_client,
2307 GCONF_KEY_AUTO_DOWNLOAD_PRECACHE, NULL);
2308 if(!_auto_download_precache)
2309 _auto_download_precache = 2;
2311 /* Get Center Ratio - Default is 5. */
2312 _center_ratio = gconf_client_get_int(gconf_client,
2313 GCONF_KEY_CENTER_SENSITIVITY, NULL);
2317 /* Get Lead Ratio - Default is 5. */
2318 _lead_ratio = gconf_client_get_int(gconf_client,
2319 GCONF_KEY_LEAD_AMOUNT, NULL);
2323 /* Get Lead Is Fixed flag - Default is FALSE. */
2324 _lead_is_fixed = gconf_client_get_bool(gconf_client,
2325 GCONF_KEY_LEAD_IS_FIXED, NULL);
2327 /* Get Rotate Sensitivity - Default is 5. */
2328 _rotate_sens = gconf_client_get_int(gconf_client,
2329 GCONF_KEY_ROTATE_SENSITIVITY, NULL);
2333 /* Get Auto-Center/Rotate Minimum Speed - Default is 2. */
2334 value = gconf_client_get(gconf_client, GCONF_KEY_AC_MIN_SPEED, NULL);
2337 _ac_min_speed = gconf_value_get_int(value);
2338 gconf_value_free(value);
2343 /* Get Rotate Dir - Default is ROTATE_DIR_UP. */
2345 gchar *rotate_dir_str = gconf_client_get_string(gconf_client,
2346 GCONF_KEY_ROTATE_DIR, NULL);
2349 for(i = ROTATE_DIR_ENUM_COUNT - 1; i >= 0; i--)
2350 if(!strcmp(rotate_dir_str, ROTATE_DIR_ENUM_TEXT[i]))
2357 /* Get Draw Line Width- Default is 5. */
2358 _draw_width = gconf_client_get_int(gconf_client,
2359 GCONF_KEY_DRAW_WIDTH, NULL);
2363 /* Get Enable Announcements flag. Default is TRUE. */
2364 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_ANNOUNCE, NULL);
2367 _enable_announce = gconf_value_get_bool(value);
2368 gconf_value_free(value);
2371 _enable_announce = TRUE;
2373 /* Get Announce Advance Notice - Default is 30. */
2374 value = gconf_client_get(gconf_client, GCONF_KEY_ANNOUNCE_NOTICE, NULL);
2377 _announce_notice_ratio = gconf_value_get_int(value);
2378 gconf_value_free(value);
2381 _announce_notice_ratio = 8;
2383 /* Get Enable Voice flag. Default is TRUE. */
2384 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_VOICE, NULL);
2387 _enable_voice = gconf_value_get_bool(value);
2388 gconf_value_free(value);
2391 _enable_voice = TRUE;
2395 /* Make sure we actually have voice capabilities. */
2396 GnomeVFSFileInfo file_info;
2397 _enable_voice = ((GNOME_VFS_OK == gnome_vfs_get_file_info(
2398 _voice_synth_path, &file_info,
2399 GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS))
2400 && (file_info.permissions & GNOME_VFS_PERM_ACCESS_EXECUTABLE));
2403 /* Get Fullscreen flag. Default is FALSE. */
2404 _fullscreen = gconf_client_get_bool(gconf_client,
2405 GCONF_KEY_FULLSCREEN, NULL);
2407 /* Get Units. Default is UNITS_KM. */
2409 gchar *units_str = gconf_client_get_string(gconf_client,
2410 GCONF_KEY_UNITS, NULL);
2413 for(i = UNITS_ENUM_COUNT - 1; i > 0; i--)
2414 if(!strcmp(units_str, UNITS_ENUM_TEXT[i]))
2419 /* Get Custom Key Actions. */
2422 for(i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
2424 gint j = CUSTOM_KEY_DEFAULT[i];
2425 gchar *str = gconf_client_get_string(gconf_client,
2426 CUSTOM_KEY_GCONF[i], NULL);
2428 for(j = CUSTOM_ACTION_ENUM_COUNT - 1; j > 0; j--)
2429 if(!strcmp(str, CUSTOM_ACTION_ENUM_TEXT[j]))
2435 /* Get Deg format. Default is DDPDDDDD. */
2437 gchar *degformat_key_str = gconf_client_get_string(gconf_client,
2438 GCONF_KEY_DEG_FORMAT, NULL);
2440 if(degformat_key_str)
2441 for(i = DEG_FORMAT_ENUM_COUNT - 1; i > 0; i--)
2442 if(!strcmp(degformat_key_str, DEG_FORMAT_ENUM_TEXT[i].name))
2447 /* Get Speed Limit On flag. Default is FALSE. */
2448 _speed_limit_on = gconf_client_get_bool(gconf_client,
2449 GCONF_KEY_SPEED_LIMIT_ON, NULL);
2451 /* Get Speed Limit */
2452 _speed_limit = gconf_client_get_int(gconf_client,
2453 GCONF_KEY_SPEED_LIMIT, NULL);
2454 if(_speed_limit <= 0)
2457 /* Get Speed Location. Default is SPEED_LOCATION_TOP_LEFT. */
2459 gchar *speed_location_str = gconf_client_get_string(gconf_client,
2460 GCONF_KEY_SPEED_LOCATION, NULL);
2462 if(speed_location_str)
2463 for(i = SPEED_LOCATION_ENUM_COUNT - 1; i > 0; i--)
2464 if(!strcmp(speed_location_str, SPEED_LOCATION_ENUM_TEXT[i]))
2466 _speed_location = i;
2469 /* Get Unblank Option. Default is UNBLANK_FULLSCREEN. */
2471 gchar *unblank_option_str = gconf_client_get_string(gconf_client,
2472 GCONF_KEY_UNBLANK_SIZE, NULL);
2474 if(unblank_option_str)
2475 for(i = UNBLANK_ENUM_COUNT - 1; i >= 0; i--)
2476 if(!strcmp(unblank_option_str, UNBLANK_ENUM_TEXT[i]))
2479 i = UNBLANK_FULLSCREEN;
2480 _unblank_option = i;
2484 load_aprs_options(gconf_client);
2485 #endif // INCLUDE_APRS
2487 /* Get Info Font Size. Default is INFO_FONT_MEDIUM. */
2489 gchar *info_font_size_str = gconf_client_get_string(gconf_client,
2490 GCONF_KEY_INFO_FONT_SIZE, NULL);
2492 if(info_font_size_str)
2493 for(i = INFO_FONT_ENUM_COUNT - 1; i >= 0; i--)
2494 if(!strcmp(info_font_size_str, INFO_FONT_ENUM_TEXT[i]))
2497 i = INFO_FONT_MEDIUM;
2498 _info_font_size = i;
2501 /* Get last saved latitude. Default is 50.f. */
2502 value = gconf_client_get(gconf_client, GCONF_KEY_LAST_LAT, NULL);
2505 _gps.lat = gconf_value_get_float(value);
2506 gconf_value_free(value);
2511 /* Get last saved longitude. Default is 0. */
2512 _gps.lon = gconf_client_get_float(gconf_client, GCONF_KEY_LAST_LON, NULL);
2514 /* Get last saved altitude. Default is 0. */
2515 _pos.altitude = gconf_client_get_int(
2516 gconf_client, GCONF_KEY_LAST_ALT, NULL);
2518 /* Get last saved speed. Default is 0. */
2519 _gps.speed = gconf_client_get_float(
2520 gconf_client, GCONF_KEY_LAST_SPEED, NULL);
2522 /* Get last saved speed. Default is 0. */
2523 _gps.heading = gconf_client_get_float(
2524 gconf_client, GCONF_KEY_LAST_HEADING, NULL);
2526 /* Get last saved timestamp. Default is 0. */
2527 _pos.time= gconf_client_get_float(gconf_client, GCONF_KEY_LAST_TIME, NULL);
2529 /* Get last center point. */
2531 gdouble center_lat, center_lon;
2533 /* Get last saved latitude. Default is last saved latitude. */
2534 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LAT, NULL);
2537 center_lat = gconf_value_get_float(value);
2538 gconf_value_free(value);
2542 _is_first_time = TRUE;
2543 center_lat = _gps.lat;
2546 /* Get last saved longitude. Default is last saved longitude. */
2547 value = gconf_client_get(gconf_client, GCONF_KEY_CENTER_LON, NULL);
2550 center_lon = gconf_value_get_float(value);
2551 gconf_value_free(value);
2554 center_lon = _gps.lon;
2556 latlon2unit(center_lat, center_lon, _center.unitx, _center.unity);
2557 _next_center = _center;
2560 /* Get map correction. Default is 0. */
2561 _map_correction_unitx = gconf_client_get_int(gconf_client,
2562 GCONF_KEY_MAP_CORRECTION_UNITX, NULL);
2563 _map_correction_unity = gconf_client_get_int(gconf_client,
2564 GCONF_KEY_MAP_CORRECTION_UNITY, NULL);
2566 /* Get last viewing angle. Default is 0. */
2567 _map_rotate_angle = _next_map_rotate_angle = gconf_client_get_int(
2568 gconf_client, GCONF_KEY_CENTER_ANGLE, NULL);
2569 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2571 deg2rad(ROTATE_DIR_ENUM_DEGREES[_rotate_dir] - _map_rotate_angle));
2572 gdk_pixbuf_rotate_matrix_fill_for_rotation(
2573 _map_reverse_matrix,
2574 deg2rad(_map_rotate_angle - ROTATE_DIR_ENUM_DEGREES[_rotate_dir]));
2577 /* Load the repositories. */
2579 GSList *list, *curr;
2580 RepoData *prev_repo = NULL, *curr_repo = NULL;
2581 gint curr_repo_index = gconf_client_get_int(gconf_client,
2582 GCONF_KEY_CURRREPO, NULL);
2583 list = gconf_client_get_list(gconf_client,
2584 GCONF_KEY_REPOSITORIES, GCONF_VALUE_STRING, NULL);
2586 for(curr = list; curr != NULL; curr = curr->next)
2588 RepoData *rd = settings_parse_repo(curr->data);
2590 if (rd->layer_level == 0) {
2591 _repo_list = g_list_append(_repo_list, rd);
2592 if(!curr_repo_index--)
2596 prev_repo->layers = rd;
2603 repo_set_curr(curr_repo);
2605 /* this timer decrements layers' counters and frefresh map if needed */
2606 g_timeout_add (60 * 1000, map_layer_refresh_cb, NULL);
2610 if(_repo_list == NULL)
2612 /* We have no repositories - create a default one. */
2613 RepoData *repo = g_new0(RepoData, 1);
2615 repo->db_filename = gnome_vfs_expand_initial_tilde(
2616 REPO_DEFAULT_CACHE_DIR);
2617 repo->url=g_strdup(REPO_DEFAULT_MAP_URI);
2618 repo->dl_zoom_steps = REPO_DEFAULT_DL_ZOOM_STEPS;
2619 repo->name = g_strdup(REPO_DEFAULT_NAME);
2620 repo->view_zoom_steps = REPO_DEFAULT_VIEW_ZOOM_STEPS;
2621 repo->double_size = FALSE;
2622 repo->nextable = TRUE;
2623 repo->min_zoom = REPO_DEFAULT_MIN_ZOOM;
2624 repo->max_zoom = REPO_DEFAULT_MAX_ZOOM;
2625 repo->layers = NULL;
2626 repo->layer_level = 0;
2627 set_repo_type(repo);
2629 _repo_list = g_list_append(_repo_list, repo);
2630 repo_set_curr(repo);
2633 /* Get last Zoom Level. Default is 16. */
2634 value = gconf_client_get(gconf_client, GCONF_KEY_ZOOM, NULL);
2637 _zoom = gconf_value_get_int(value) / _curr_repo->view_zoom_steps
2638 * _curr_repo->view_zoom_steps;
2639 gconf_value_free(value);
2642 _zoom = 16 / _curr_repo->view_zoom_steps
2643 * _curr_repo->view_zoom_steps;
2644 BOUND(_zoom, 0, MAX_ZOOM);
2647 /* Get Route Directory. Default is NULL. */
2648 _route_dir_uri = gconf_client_get_string(gconf_client,
2649 GCONF_KEY_ROUTEDIR, NULL);
2651 /* Get Last Track File. Default is NULL. */
2652 _track_file_uri = gconf_client_get_string(gconf_client,
2653 GCONF_KEY_TRACKFILE, NULL);
2655 /* Get Auto-Center Mode. Default is CENTER_LEAD. */
2656 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_MODE, NULL);
2659 _center_mode = gconf_value_get_int(value);
2660 gconf_value_free(value);
2663 _center_mode = CENTER_LEAD;
2665 /* Get Auto-Center Rotate Flag. Default is TRUE. */
2666 value = gconf_client_get(gconf_client, GCONF_KEY_AUTOCENTER_ROTATE, NULL);
2669 _center_rotate = gconf_value_get_bool(value);
2670 gconf_value_free(value);
2673 _center_rotate = TRUE;
2675 /* Get Show Zoom Level flag. Default is FALSE. */
2676 _show_zoomlevel = gconf_client_get_bool(gconf_client,
2677 GCONF_KEY_SHOWZOOMLEVEL, NULL);
2679 /* Get Show Scale flag. Default is TRUE. */
2680 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWSCALE, NULL);
2683 _show_scale = gconf_value_get_bool(value);
2684 gconf_value_free(value);
2689 /* Get Show Compass Rose flag. Default is TRUE. */
2690 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWCOMPROSE, NULL);
2693 _show_comprose = gconf_value_get_bool(value);
2694 gconf_value_free(value);
2697 _show_comprose = TRUE;
2699 /* Get Show Tracks flag. Default is TRUE. */
2700 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWTRACKS, NULL);
2703 _show_paths |= (gconf_value_get_bool(value) ? TRACKS_MASK : 0);
2704 gconf_value_free(value);
2707 _show_paths |= TRACKS_MASK;
2709 /* Get Show Routes flag. Default is TRUE. */
2710 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWROUTES, NULL);
2713 _show_paths |= (gconf_value_get_bool(value) ? ROUTES_MASK : 0);
2714 gconf_value_free(value);
2717 _show_paths |= ROUTES_MASK;
2719 /* Get Show Velocity Vector flag. Default is TRUE. */
2720 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWVELVEC, NULL);
2723 _show_velvec = gconf_value_get_bool(value);
2724 gconf_value_free(value);
2727 _show_velvec = TRUE;
2729 /* Get Show Velocity Vector flag. Default is TRUE. */
2730 value = gconf_client_get(gconf_client, GCONF_KEY_SHOWPOIS, NULL);
2733 _show_poi = gconf_value_get_bool(value);
2734 gconf_value_free(value);
2739 /* Get Enable GPS flag. Default is TRUE. */
2740 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_GPS, NULL);
2743 _enable_gps = gconf_value_get_bool(value);
2744 gconf_value_free(value);
2749 /* Get Enable Tracking flag. Default is TRUE. */
2750 value = gconf_client_get(gconf_client, GCONF_KEY_ENABLE_TRACKING, NULL);
2753 _enable_tracking = gconf_value_get_bool(value);
2754 gconf_value_free(value);
2757 _enable_tracking = TRUE;
2759 /* Initialize _gps_state based on _enable_gps. */
2760 _gps_state = RCVR_OFF;
2762 /* Load the route locations. */
2765 _loc_list = gconf_client_get_list(gconf_client,
2766 GCONF_KEY_ROUTE_LOCATIONS, GCONF_VALUE_STRING, NULL);
2767 _loc_model = gtk_list_store_new(1, G_TYPE_STRING);
2768 for(curr = _loc_list; curr != NULL; curr = curr->next)
2771 gtk_list_store_insert_with_values(_loc_model, &iter, INT_MAX,
2776 /* Get POI Database. Default is in REPO_DEFAULT_CACHE_BASE */
2777 _poi_db_filename = gconf_client_get_string(gconf_client,
2778 GCONF_KEY_POI_DB, NULL);
2779 if(_poi_db_filename == NULL)
2781 gchar *poi_base = gnome_vfs_expand_initial_tilde(
2782 REPO_DEFAULT_CACHE_BASE);
2783 _poi_db_filename = gnome_vfs_uri_make_full_from_relative(
2784 poi_base, "poi.db");
2788 _poi_db_dirname = g_path_get_dirname(_poi_db_filename);
2790 _poi_zoom = gconf_client_get_int(gconf_client,
2791 GCONF_KEY_POI_ZOOM, NULL);
2793 _poi_zoom = MAX_ZOOM - 10;
2796 /* Get GPS Info flag. Default is FALSE. */
2797 _gps_info = gconf_client_get_bool(gconf_client, GCONF_KEY_GPS_INFO, NULL);
2799 /* Get Route Download URL. Default is:
2800 * "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s" */
2801 _route_dl_url = gconf_client_get_string(gconf_client,
2802 GCONF_KEY_ROUTE_DL_URL, NULL);
2803 if(_route_dl_url == NULL)
2804 _route_dl_url = g_strdup(
2805 "http://www.gnuite.com/cgi-bin/gpx.cgi?saddr=%s&daddr=%s");
2807 /* Get Route Download Radius. Default is 4. */
2808 value = gconf_client_get(gconf_client, GCONF_KEY_ROUTE_DL_RADIUS, NULL);
2811 _route_dl_radius = gconf_value_get_int(value);
2812 gconf_value_free(value);
2815 _route_dl_radius = 8;
2817 /* Get POI Download URL. Default is:
2818 * "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d" */
2819 _poi_dl_url = gconf_client_get_string(gconf_client,
2820 GCONF_KEY_POI_DL_URL, NULL);
2821 if(_poi_dl_url == NULL)
2822 _poi_dl_url = g_strdup(
2823 "http://www.gnuite.com/cgi-bin/poi.cgi?saddr=%s&query=%s&page=%d");
2828 for(i = 0; i < COLORABLE_ENUM_COUNT; i++)
2830 str = gconf_client_get_string(gconf_client,
2831 COLORABLE_GCONF[i], NULL);
2832 if(!str || !gdk_color_parse(str, &_color[i]))
2833 _color[i] = COLORABLE_DEFAULT[i];
2837 gconf_client_clear_cache(gconf_client);
2838 g_object_unref(gconf_client);
2845 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
2850 ////// APRS Settings start
2852 void read_aprs_options(TAprsSettings *aprsSettings )
2855 _aprs_mycall = g_strdup(gtk_entry_get_text(
2856 GTK_ENTRY(aprsSettings->txt_aprs_mycall)));
2859 _aprs_enable = gtk_toggle_button_get_active(
2860 GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_enabled ));
2862 _aprs_show_new_station_alert = gtk_toggle_button_get_active(
2863 GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_show_new_station_alert ));
2866 gchar * s_max_stations = g_strdup(gtk_entry_get_text(
2867 GTK_ENTRY(aprsSettings->txt_aprs_max_stations)));
2868 gint64 i64_max_stations = g_ascii_strtoll (s_max_stations, NULL, 10);
2869 _aprs_max_stations = (gint)i64_max_stations;
2873 _aprs_server = g_strdup(gtk_entry_get_text(
2874 GTK_ENTRY(aprsSettings->txt_aprs_server)));
2877 _aprs_tty_port = g_strdup(gtk_entry_get_text(
2878 GTK_ENTRY(aprsSettings->txt_aprs_tty_port)));
2880 _aprs_inet_server_validation = g_strdup(gtk_entry_get_text(
2881 GTK_ENTRY(aprsSettings->txt_aprs_inet_server_validation)));
2883 gchar * s_port = g_strdup(gtk_entry_get_text(
2884 GTK_ENTRY(aprsSettings->num_aprs_server_port)));
2885 gint64 i64_port = g_ascii_strtoll (s_port, NULL, 10);
2886 _aprs_server_port = (gint)i64_port;
2889 gchar * s_beacon_interval = g_strdup(gtk_entry_get_text(
2890 GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval )));
2891 gint64 i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
2892 g_free(s_beacon_interval);
2893 _aprs_inet_beacon_interval = (gint)i64_beacon_interval;
2895 s_beacon_interval = g_strdup(gtk_entry_get_text(
2896 GTK_ENTRY(aprsSettings->txt_tty_beacon_interval )));
2897 i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
2898 g_free(s_beacon_interval);
2899 _aprs_tty_beacon_interval = (gint)i64_beacon_interval;
2902 _aprs_inet_beacon_comment = g_strdup(gtk_entry_get_text(
2903 GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment )));
2905 _aprs_tnc_bt_mac = g_strdup(gtk_entry_get_text(
2906 GTK_ENTRY(aprsSettings->txt_tnc_bt_mac )));
2908 _aprs_tnc_method = TNC_CONNECTION_BT;
2909 if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file) ))
2911 _aprs_tnc_method = TNC_CONNECTION_FILE;
2915 _aprs_server_auto_filter_on = gtk_toggle_button_get_active(
2916 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_auto_filter ));
2918 gchar * s_server_auto_filter_km = g_strdup(gtk_entry_get_text(
2919 GTK_ENTRY(aprsSettings->txt_auto_filter_range )));
2920 gint64 i64_server_auto_filter_km = g_ascii_strtoll (s_server_auto_filter_km, NULL, 10);
2921 _aprs_server_auto_filter_km = (gint)i64_server_auto_filter_km;
2924 _aprs_enable_inet_tx = gtk_toggle_button_get_active(
2925 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_tx ));
2927 _aprs_enable_tty_tx = gtk_toggle_button_get_active(
2928 GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_tty_tx ));
2930 _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
2931 GTK_ENTRY(aprsSettings->txt_beacon_comment )));
2933 _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
2934 GTK_ENTRY(aprsSettings->txt_beacon_comment )));
2937 _aprs_unproto_path = g_strdup(gtk_entry_get_text(
2938 GTK_ENTRY(aprsSettings->txt_unproto_path )));
2941 tmp = g_strdup(gtk_entry_get_text(
2942 GTK_ENTRY(aprsSettings->txt_beacon_group )));
2943 if(strlen(tmp)>0) _aprs_beacon_group = tmp[0];
2945 tmp = g_strdup(gtk_entry_get_text(
2946 GTK_ENTRY(aprsSettings->txt_beacon_symbol )));
2947 if(strlen(tmp)>0) _aprs_beacon_symbol = tmp[0];
2949 _aprs_transmit_compressed_posit = FALSE; // Not currently supported
2953 void save_aprs_options()
2955 GConfClient *gconf_client = gconf_client_get_default();
2958 popup_error(_window,
2959 _("Failed to initialize GConf. Settings were not saved."));
2966 gconf_client_set_string(gconf_client,
2967 GCONF_KEY_APRS_SERVER, _aprs_server, NULL);
2969 if(_aprs_server_port)
2970 gconf_client_set_int(gconf_client,
2971 GCONF_KEY_APRS_SERVER_PORT, _aprs_server_port, NULL);
2973 if(_aprs_inet_server_validation)
2974 gconf_client_set_string(gconf_client,
2975 GCONF_KEY_APRS_SERVER_VAL, _aprs_inet_server_validation, NULL);
2978 gconf_client_set_string(gconf_client,
2979 GCONF_KEY_APRS_MYCALL, _aprs_mycall, NULL);
2982 gconf_client_set_string(gconf_client,
2983 GCONF_KEY_APRS_TTY_PORT, _aprs_tty_port, NULL);
2988 if(_aprs_inet_beacon_comment)
2989 gconf_client_set_string(gconf_client,
2990 GCONF_KEY_APRS_INET_BEACON, _aprs_inet_beacon_comment, NULL);
2992 gconf_client_set_int(gconf_client,
2993 GCONF_KEY_APRS_INET_BEACON_INTERVAL, _aprs_inet_beacon_interval, NULL);
2995 gconf_client_set_int(gconf_client,
2996 GCONF_KEY_APRS_MAX_TRACK_PTS, _aprs_std_pos_hist, NULL);
2998 gconf_client_set_int(gconf_client,
2999 GCONF_KEY_APRS_MAX_STATIONS, _aprs_max_stations, NULL);
3001 gconf_client_set_bool(gconf_client,
3002 GCONF_KEY_APRS_ENABLE, _aprs_enable, NULL);
3005 gconf_client_set_bool(gconf_client,
3006 GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, _aprs_show_new_station_alert, NULL);
3008 if(_aprs_tnc_bt_mac)
3009 gconf_client_set_string(gconf_client,
3010 GCONF_KEY_APRS_TNC_BT_MAC, _aprs_tnc_bt_mac, NULL);
3012 gconf_client_set_int(gconf_client,
3013 GCONF_KEY_APRS_TNC_CONN_METHOD, _aprs_tnc_method, NULL);
3015 gconf_client_set_int(gconf_client,
3016 GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, _aprs_server_auto_filter_km, NULL);
3018 gconf_client_set_bool(gconf_client,
3019 GCONF_KEY_APRS_INET_AUTO_FILTER, _aprs_server_auto_filter_on, NULL);
3021 gconf_client_set_bool(gconf_client,
3022 GCONF_KEY_APRS_ENABLE_INET_TX, _aprs_enable_inet_tx, NULL);
3023 gconf_client_set_bool(gconf_client,
3024 GCONF_KEY_APRS_ENABLE_TTY_TX, _aprs_enable_tty_tx, NULL);
3026 if(_aprs_beacon_comment)
3027 gconf_client_set_string(gconf_client,
3028 GCONF_KEY_APRS_BEACON_COMMENT, _aprs_beacon_comment, NULL);
3030 gconf_client_set_int(gconf_client,
3031 GCONF_KEY_APRS_TTY_BEACON_INTERVAL, _aprs_tty_beacon_interval, NULL);
3033 gconf_client_set_bool(gconf_client,
3034 GCONF_KEY_APRS_BEACON_COMPRESSED, _aprs_transmit_compressed_posit, NULL);
3036 if(_aprs_unproto_path)
3037 gconf_client_set_string(gconf_client,
3038 GCONF_KEY_APRS_BEACON_PATH, _aprs_unproto_path, NULL);
3040 //if(_aprs_beacon_group)
3043 snprintf(tmp, 5, "%c", _aprs_beacon_group);
3045 gconf_client_set_string(gconf_client,
3046 GCONF_KEY_APRS_BEACON_SYM_GROUP, tmp, NULL);
3048 //if(strlen(tmp)> 1) _aprs_beacon_group = tmp[0];
3051 //if(_aprs_beacon_symbol)
3054 snprintf(tmp, 5, "%c", _aprs_beacon_symbol);
3056 gconf_client_set_string(gconf_client,
3057 GCONF_KEY_APRS_BEACON_SYMBOL, tmp, NULL);
3059 //if(strlen(tmp)> 1) _aprs_beacon_symbol = tmp[0];
3068 void setup_aprs_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3074 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3075 table = gtk_table_new(3/*rows*/, 4/*columns*/, FALSE /*Auto re-size*/),
3076 label = gtk_label_new(_("Station")));
3080 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Callsign");
3081 add_edit_box (table, 1, 2, 0, 1, -1, &(aprsSettings->txt_aprs_mycall), ALIGN_TOP_LEFT, _aprs_mycall);
3084 add_check_box(table, 2, 4, 0, 1, -1, &(aprsSettings->chk_compressed_beacon), ALIGN_TOP_LEFT,
3085 "Compress Beacons", _aprs_transmit_compressed_posit);
3086 // Not yet supported
3087 gtk_widget_set_sensitive (GTK_WIDGET (aprsSettings->chk_compressed_beacon), FALSE);
3091 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Path");
3092 add_edit_box (table, 1, 2, 1, 2, -1, &(aprsSettings->txt_unproto_path), ALIGN_TOP_LEFT, _aprs_unproto_path);
3095 add_check_box(table, 2, 4, 1, 2, -1, &(aprsSettings->chk_aprs_show_new_station_alert), ALIGN_TOP_LEFT,
3096 "Show New Station Alerts", _aprs_show_new_station_alert);
3099 add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol Group");
3100 gchar initialValue[2];
3101 snprintf(initialValue, 2, "%c", _aprs_beacon_group);
3102 add_edit_box (table, 1, 2, 2, 3, -1, &(aprsSettings->txt_beacon_group), ALIGN_TOP_LEFT, initialValue);
3104 add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol");
3106 snprintf(initialValue, 2, "%c", _aprs_beacon_symbol);
3107 add_edit_box (table, 3, 4, 2, 3, -1, &(aprsSettings->txt_beacon_symbol), ALIGN_TOP_LEFT, initialValue);
3113 void setup_aprs_tty_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3119 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3120 table = gtk_table_new(3/*rows*/, 2/*columns*/, FALSE /*Auto re-size*/),
3121 label = gtk_label_new(_("TNC 1")));
3124 // Receiver MAC Address.
3125 gtk_table_attach(GTK_TABLE(table),
3126 aprsSettings->rad_tnc_bt = gtk_radio_button_new_with_label(
3127 NULL, _("Bluetooth")),
3128 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
3129 // gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_bt), 1.f, 0.5f);
3130 gtk_table_attach(GTK_TABLE(table),
3131 hbox = gtk_hbox_new(FALSE, 4),
3132 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3134 gtk_box_pack_start(GTK_BOX(hbox),
3135 aprsSettings->txt_tnc_bt_mac = gtk_entry_new(),
3137 #ifdef MAEMO_CHANGES
3139 g_object_set(G_OBJECT(aprsSettings->txt_tnc_bt_mac), "hildon-input-mode",
3140 HILDON_GTK_INPUT_MODE_FULL, NULL);
3142 g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
3145 gtk_box_pack_start(GTK_BOX(hbox),
3146 aprsSettings->btn_scan_bt_tnc = gtk_button_new_with_label(_("Scan...")),
3149 #ifndef HAVE_LIBGPSBT
3150 gtk_widget_set_sensitive(aprsSettings->rad_tnc_bt, FALSE);
3151 gtk_widget_set_sensitive(aprsSettings->txt_tnc_bt_mac, FALSE);
3152 gtk_widget_set_sensitive(aprsSettings->btn_scan_bt_tnc, FALSE);
3155 // File Path (RFComm).
3156 gtk_table_attach(GTK_TABLE(table),
3157 aprsSettings->rad_tnc_file = gtk_radio_button_new_with_label_from_widget(
3158 GTK_RADIO_BUTTON(aprsSettings->rad_tnc_bt), _("File Path")),
3159 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
3160 // gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_file), 1.f, 0.5f);
3161 gtk_table_attach(GTK_TABLE(table),
3162 hbox = gtk_hbox_new(FALSE, 4),
3163 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3164 gtk_box_pack_start(GTK_BOX(hbox),
3165 aprsSettings->txt_aprs_tty_port = gtk_entry_new(),
3167 #ifdef MAEMO_CHANGES
3169 g_object_set(G_OBJECT(aprsSettings->txt_aprs_tty_port), "hildon-input-mode",
3170 HILDON_GTK_INPUT_MODE_FULL, NULL);
3172 g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
3178 add_check_box(table, 0, 1, 2, 3, -1, &(aprsSettings->chk_enable_tty_tx), ALIGN_TOP_LEFT,
3179 "Enable TX", _aprs_enable_tty_tx);
3181 gtk_table_attach(GTK_TABLE(table),
3182 label = gtk_label_new(_("Only KISS TNC's are supported (9600 8N1)")),
3183 1, 2, 2, 3, GTK_FILL, 0, 2, 4);
3184 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3191 if(aprsSettings->txt_aprs_tty_port)
3192 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_tty_port), _aprs_tty_port);
3194 if(aprsSettings->txt_tnc_bt_mac)
3195 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_tnc_bt_mac), _aprs_tnc_bt_mac);
3198 if(_aprs_tnc_method == TNC_CONNECTION_BT)
3199 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_bt), TRUE);
3200 else if(_aprs_tnc_method == TNC_CONNECTION_FILE)
3201 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file), TRUE);
3206 void setup_aprs_tty2_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3211 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3212 table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
3213 label = gtk_label_new(_("TNC 2")));
3215 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Beacon Interval");
3217 gchar s_interval[8]; s_interval[0] = 0;
3218 if(_aprs_tty_beacon_interval>0) snprintf(s_interval, 8, "%u", _aprs_tty_beacon_interval );
3219 add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_tty_beacon_interval), ALIGN_TOP_LEFT,
3221 add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_LEFT, "seconds");
3223 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Text");
3224 add_edit_box (table, 1, 4, 1, 2, -1, &(aprsSettings->txt_beacon_comment), ALIGN_TOP_LEFT, _aprs_beacon_comment);
3229 void setup_aprs_general_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3234 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3235 table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
3236 label = gtk_label_new(_("APRS")));
3239 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT,
3240 "APRS (Automatic/Amateur Position Reporting System) is \na system used by Radio Amateurs to communicate position, \nweather, and short messages.");
3243 add_check_box(table, 0, 1, 1, 2, -1, &(aprsSettings->chk_aprs_enabled), ALIGN_TOP_LEFT,
3244 "Enable APRS functionality", _aprs_enable);
3247 void setup_aprs_inet_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3252 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3253 table = gtk_table_new(3/*rows*/, 5/*columns*/, FALSE /*Auto re-size*/),
3254 label = gtk_label_new(_("Internet")));
3258 add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Server");
3259 add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_aprs_server), ALIGN_TOP_LEFT, _aprs_server);
3261 /*iNet server port*/
3262 add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_RIGHT, "Port");
3263 add_edit_box (table, 4, 5, 0, 1, 0.5, &(aprsSettings->num_aprs_server_port), ALIGN_TOP_LEFT,
3264 g_strdup_printf("%u", _aprs_server_port));
3268 add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Server Validation");
3269 add_edit_box (table, 1, 3, 1, 2, 0.5, &(aprsSettings->txt_aprs_inet_server_validation), ALIGN_TOP_LEFT, _aprs_inet_server_validation);
3270 add_check_box(table, 3, 5, 1, 2, -1, &(aprsSettings->chk_enable_inet_tx), ALIGN_TOP_LEFT,
3271 "Enable TX", _aprs_enable_inet_tx);
3273 /*iNet server filter*/
3274 add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Filter data");
3275 add_check_box(table, 1, 2, 2, 3, -1, &(aprsSettings->chk_enable_inet_auto_filter), ALIGN_TOP_LEFT, "Enable",
3276 _aprs_server_auto_filter_on);
3277 add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_RIGHT, "Range");
3278 add_edit_box (table, 3, 4, 2, 3, 0.75, &(aprsSettings->txt_auto_filter_range), ALIGN_TOP_LEFT,
3279 g_strdup_printf("%u", _aprs_server_auto_filter_km));
3280 add_label_box(table, 4, 5, 2, 3, -1, &label, ALIGN_TOP_LEFT, "km");
3286 void setup_aprs_inet2_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
3292 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
3293 table = gtk_table_new(2/*rows*/, 3/*columns*/, FALSE /*Auto re-size*/),
3294 label = gtk_label_new(_("Internet 2")));
3297 /* iNet Beacon interval */
3299 gtk_table_attach(GTK_TABLE(table),
3300 label = gtk_label_new(_("Beacon interval")),
3301 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
3302 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3305 gtk_table_attach(GTK_TABLE(table),
3306 hbox = gtk_hbox_new(FALSE, 4),
3307 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3308 gtk_box_pack_start(GTK_BOX(hbox),
3309 aprsSettings->txt_aprs_inet_beacon_interval = gtk_entry_new(),
3312 #ifdef MAEMO_CHANGES
3314 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), "hildon-input-mode",
3315 HILDON_GTK_INPUT_MODE_FULL, NULL);
3317 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), HILDON_AUTOCAP, FALSE, NULL);
3321 gtk_table_attach(GTK_TABLE(table),
3322 label = gtk_label_new(_("seconds")),
3323 2, 3, 0, 1, GTK_FILL, 0, 2, 4);
3324 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3326 /* Beacon comment */
3328 gtk_table_attach(GTK_TABLE(table),
3329 label = gtk_label_new(_("Beacon Comment")),
3330 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
3331 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
3334 gtk_table_attach(GTK_TABLE(table),
3335 hbox = gtk_hbox_new(FALSE, 4),
3336 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
3337 gtk_box_pack_start(GTK_BOX(hbox),
3338 aprsSettings->txt_aprs_inet_beacon_comment = gtk_entry_new(),
3341 #ifdef MAEMO_CHANGES
3343 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), "hildon-input-mode",
3344 HILDON_GTK_INPUT_MODE_FULL, NULL);
3346 g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), HILDON_AUTOCAP, FALSE, NULL);
3351 if(_aprs_inet_beacon_interval)
3354 snprintf(interval, 8, "%d", _aprs_inet_beacon_interval);
3356 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval), interval);
3359 if(_aprs_inet_beacon_comment)
3360 gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment), _aprs_inet_beacon_comment);
3364 void aprs_settings_dialog(gboolean *aprs_inet_config_changed, gboolean *aprs_tty_config_changed)
3366 static GtkWidget *dialog = NULL;
3367 static GtkWidget *notebook = NULL;
3368 static TAprsSettings aprs_settings;
3369 static ScanInfo scan_info = {0};
3371 printf("%s()\n", __PRETTY_FUNCTION__);
3374 *aprs_inet_config_changed = FALSE;
3375 *aprs_tty_config_changed = FALSE;
3379 dialog = gtk_dialog_new_with_buttons(_("APRS Settings"),
3380 GTK_WINDOW(_window), GTK_DIALOG_MODAL,
3381 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
3384 /* Enable the help button. */
3386 hildon_help_dialog_help_enable(
3388 ossohelp_dialog_help_enable(
3390 GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
3392 gtk_dialog_add_button(GTK_DIALOG(dialog),
3393 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
3395 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
3396 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
3400 // Add enable, and info page
3401 setup_aprs_general_options_page(notebook, &aprs_settings);
3403 // Add station details page
3404 setup_aprs_options_page(notebook, &aprs_settings);
3407 setup_aprs_inet_options_page(notebook, &aprs_settings);
3408 setup_aprs_inet2_options_page(notebook, &aprs_settings);
3411 setup_aprs_tty_page_options_page(notebook, &aprs_settings);
3412 setup_aprs_tty2_page_options_page(notebook, &aprs_settings);
3416 /* Connect signals. */
3417 memset(&scan_info, 0, sizeof(scan_info));
3418 scan_info.settings_dialog = dialog;
3419 scan_info.txt_gps_bt_mac = aprs_settings.txt_tnc_bt_mac;
3420 g_signal_connect(G_OBJECT(aprs_settings.btn_scan_bt_tnc), "clicked",
3421 G_CALLBACK(scan_bluetooth), &scan_info);
3425 gtk_widget_show_all(dialog);
3427 if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
3429 // TODO - check if settings have really changed
3430 *aprs_inet_config_changed = TRUE;
3431 *aprs_tty_config_changed = TRUE;
3434 read_aprs_options(&aprs_settings );
3436 save_aprs_options();
3441 gtk_widget_hide(dialog);
3443 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
3446 #endif // INCLUDE_APRS