14 #include <glib/gstdio.h>
17 #include <libgnomevfs/gnome-vfs.h>
18 #include <curl/multi.h>
19 #include <gconf/gconf-client.h>
20 #include <libxml/parser.h>
29 #include "mapper-types.h"
31 #include "ui-common.h"
35 #include "hildon-wrappers.h"
38 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
42 printf("%s()\n", __PRETTY_FUNCTION__);
45 GTK_WIDGET(hildon_file_chooser_dialog_new
46 (GTK_WINDOW(browse_info->dialog),
47 GTK_FILE_CHOOSER_ACTION_OPEN));
49 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
50 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
51 gtk_entry_get_text(GTK_ENTRY
55 res=gtk_dialog_run(GTK_DIALOG(dialog));
56 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
58 gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
59 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
63 gtk_widget_destroy(dialog);
65 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
69 typedef struct _KeysDialogInfo KeysDialogInfo;
70 struct _KeysDialogInfo {
71 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
75 settings_dialog_hardkeys_reset(GtkWidget * widget, KeysDialogInfo * cdi)
78 printf("%s()\n", __PRETTY_FUNCTION__);
80 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
82 ("Reset all hardware keys to their original defaults?"));
84 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
86 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
87 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
88 CUSTOM_KEY_DEFAULT[i]);
90 gtk_widget_destroy(confirm);
92 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
96 gboolean settings_dialog_hardkeys(GtkWidget * widget, GtkWidget * parent)
103 GtkWidget *btn_defaults;
104 printf("%s()\n", __PRETTY_FUNCTION__);
106 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
108 GTK_DIALOG_MODAL, GTK_STOCK_OK,
109 GTK_RESPONSE_ACCEPT, NULL);
111 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
113 gtk_button_new_with_label(_("Reset...")));
114 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
115 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
117 gtk_dialog_add_button(GTK_DIALOG(dialog),
118 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
120 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
121 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
123 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
125 gtk_table_attach(GTK_TABLE(table),
126 label = gtk_label_new(""),
127 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
128 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
130 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
132 gtk_table_attach(GTK_TABLE(table),
133 bdi.cmb[i] = gtk_combo_box_new_text(),
134 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
135 for (j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
136 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
137 CUSTOM_ACTION_TEXT[j]);
138 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
141 gtk_widget_show_all(dialog);
144 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
145 /* Check for duplicates. */
146 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
148 for (j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
149 if (gtk_combo_box_get_active
150 (GTK_COMBO_BOX(bdi.cmb[i]))
152 gtk_combo_box_get_active(GTK_COMBO_BOX
156 g_strdup_printf("%s:\n %s\n%s",
158 ("The following action is mapped to multiple keys"),
160 [gtk_combo_box_get_active
165 hildon_note_new_confirmation
166 (GTK_WINDOW(_window), buffer);
168 if (GTK_RESPONSE_OK !=
169 gtk_dialog_run(GTK_DIALOG(confirm)))
171 gtk_widget_destroy(confirm);
174 gtk_widget_destroy(confirm);
178 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
180 gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
184 gtk_widget_destroy(dialog);
186 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
190 typedef struct _ColorsDialogInfo ColorsDialogInfo;
191 struct _ColorsDialogInfo {
192 GtkWidget *col[COLORABLE_ENUM_COUNT];
196 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
199 printf("%s()\n", __PRETTY_FUNCTION__);
201 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
203 ("Reset all colors to their original defaults?"));
205 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
207 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
208 gtk_color_button_set_color(GTK_COLOR_BUTTON
210 &COLORABLE_DEFAULT[i]);
213 gtk_widget_destroy(confirm);
215 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
219 gboolean settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
224 GtkWidget *btn_defaults;
225 ColorsDialogInfo cdi;
226 printf("%s()\n", __PRETTY_FUNCTION__);
228 dialog = gtk_dialog_new_with_buttons(_("Colors"),
230 GTK_DIALOG_MODAL, GTK_STOCK_OK,
231 GTK_RESPONSE_ACCEPT, NULL);
233 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
234 btn_defaults = gtk_button_new_with_label(_("Reset...")));
235 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
236 G_CALLBACK(settings_dialog_colors_reset), &cdi);
238 gtk_dialog_add_button(GTK_DIALOG(dialog),
239 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
241 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
242 table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
245 gtk_table_attach(GTK_TABLE(table),
246 label = gtk_label_new(_("GPS")),
247 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
248 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
249 gtk_table_attach(GTK_TABLE(table),
250 cdi.col[COLORABLE_MARK] = gtk_color_button_new(),
251 1, 2, 0, 1, 0, 0, 2, 4);
252 gtk_color_button_set_color(GTK_COLOR_BUTTON
253 (cdi.col[COLORABLE_MARK]),
254 &_color[COLORABLE_MARK]);
255 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] =
256 gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
257 gtk_color_button_set_color(GTK_COLOR_BUTTON
258 (cdi.col[COLORABLE_MARK_VELOCITY]),
259 &_color[COLORABLE_MARK_VELOCITY]);
260 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] =
261 gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
262 gtk_color_button_set_color(GTK_COLOR_BUTTON
263 (cdi.col[COLORABLE_MARK_OLD]),
264 &_color[COLORABLE_MARK_OLD]);
267 gtk_table_attach(GTK_TABLE(table),
268 label = gtk_label_new(_("Track")),
269 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
270 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
271 gtk_table_attach(GTK_TABLE(table),
272 cdi.col[COLORABLE_TRACK] = gtk_color_button_new(),
273 1, 2, 1, 2, 0, 0, 2, 4);
274 gtk_color_button_set_color(GTK_COLOR_BUTTON
275 (cdi.col[COLORABLE_TRACK]),
276 &_color[COLORABLE_TRACK]);
277 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] =
278 gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
279 gtk_color_button_set_color(GTK_COLOR_BUTTON
280 (cdi.col[COLORABLE_TRACK_MARK]),
281 &_color[COLORABLE_TRACK_MARK]);
282 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] =
283 gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
284 gtk_color_button_set_color(GTK_COLOR_BUTTON
285 (cdi.col[COLORABLE_TRACK_BREAK]),
286 &_color[COLORABLE_TRACK_BREAK]);
289 gtk_table_attach(GTK_TABLE(table),
290 label = gtk_label_new(_("Route")),
291 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
292 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
293 gtk_table_attach(GTK_TABLE(table),
294 cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(),
295 1, 2, 2, 3, 0, 0, 2, 4);
296 gtk_color_button_set_color(GTK_COLOR_BUTTON
297 (cdi.col[COLORABLE_ROUTE]),
298 &_color[COLORABLE_ROUTE]);
299 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] =
300 gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
301 gtk_color_button_set_color(GTK_COLOR_BUTTON
302 (cdi.col[COLORABLE_ROUTE_WAY]),
303 &_color[COLORABLE_ROUTE_WAY]);
304 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] =
305 gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
306 gtk_color_button_set_color(GTK_COLOR_BUTTON
307 (cdi.col[COLORABLE_ROUTE_BREAK]),
308 &_color[COLORABLE_ROUTE_BREAK]);
311 gtk_table_attach(GTK_TABLE(table),
312 label = gtk_label_new(_("POI")),
313 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
314 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
315 gtk_table_attach(GTK_TABLE(table),
316 cdi.col[COLORABLE_POI] = gtk_color_button_new(),
317 1, 2, 3, 4, 0, 0, 2, 4);
318 gtk_color_button_set_color(GTK_COLOR_BUTTON
319 (cdi.col[COLORABLE_POI]),
320 &_color[COLORABLE_POI]);
322 gtk_widget_show_all(dialog);
324 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
327 gtk_color_button_get_color(GTK_COLOR_BUTTON
328 (cdi.col[COLORABLE_MARK]),color);
329 _color[COLORABLE_MARK] = *color;
331 gtk_color_button_get_color(GTK_COLOR_BUTTON
332 (cdi.col[COLORABLE_MARK_VELOCITY]) ,color);
333 _color[COLORABLE_MARK_VELOCITY] = *color;
335 gtk_color_button_get_color(GTK_COLOR_BUTTON
336 (cdi.col[COLORABLE_MARK_OLD]),color);
337 _color[COLORABLE_MARK_OLD] = *color;
339 gtk_color_button_get_color(GTK_COLOR_BUTTON
340 (cdi.col[COLORABLE_TRACK]),color);
341 _color[COLORABLE_TRACK] = *color;
343 gtk_color_button_get_color(GTK_COLOR_BUTTON
344 (cdi.col[COLORABLE_TRACK_MARK]),color);
345 _color[COLORABLE_TRACK_MARK] = *color;
347 gtk_color_button_get_color(GTK_COLOR_BUTTON
348 (cdi.col[COLORABLE_TRACK_BREAK]),color);
349 _color[COLORABLE_TRACK_BREAK] = *color;
351 gtk_color_button_get_color(GTK_COLOR_BUTTON
352 (cdi.col[COLORABLE_ROUTE]),color);
353 _color[COLORABLE_ROUTE] = *color;
355 gtk_color_button_get_color(GTK_COLOR_BUTTON
356 (cdi.col[COLORABLE_ROUTE_WAY]),color);
357 _color[COLORABLE_ROUTE_WAY] = *color;
359 gtk_color_button_get_color(GTK_COLOR_BUTTON
360 (cdi.col[COLORABLE_ROUTE_BREAK]),color);
361 _color[COLORABLE_ROUTE_BREAK] = *color;
363 gtk_color_button_get_color(GTK_COLOR_BUTTON
364 (cdi.col[COLORABLE_POI]),color);
365 _color[COLORABLE_POI] = *color;
371 gtk_widget_destroy(dialog);
373 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
378 * Bring up the Settings dialog. Return TRUE if and only if the recever
379 * information has changed (MAC or channel).
381 gboolean settings_dialog()
389 GtkWidget *txt_rcvr_mac;
390 GtkWidget *num_center_ratio;
391 GtkWidget *num_lead_ratio;
392 GtkWidget *num_announce_notice;
393 GtkWidget *chk_enable_voice;
394 GtkWidget *num_voice_speed;
395 GtkWidget *num_voice_pitch;
396 GtkWidget *lbl_voice_speed;
397 GtkWidget *lbl_voice_pitch;
398 GtkWidget *num_draw_width;
399 GtkWidget *chk_always_keep_on;
400 GtkWidget *cmb_units;
401 GtkWidget *cmb_degformat;
403 GtkWidget *btn_buttons;
404 GtkWidget *btn_colors;
406 GtkWidget *txt_mapper_db;
407 GtkWidget *btn_browsedb;
408 GtkWidget *num_poi_zoom;
409 GtkWidget *chk_speed_limit_on;
410 GtkWidget *num_speed;
411 GtkWidget *cmb_speed_location;
412 GtkWidget *cmb_info_font_size;
414 GtkWidget *chk_gps_filter;
415 GtkWidget *num_angle;
416 GtkWidget *num_hdop_ratio;
417 GtkWidget *num_vdop_ratio;
418 GtkWidget *num_osm_dist;
420 BrowseInfo browse_info = { 0, 0 };
421 ScanInfo scan_info = { 0 };
422 gboolean rcvr_changed = FALSE;
424 printf("%s()\n", __PRETTY_FUNCTION__);
426 dialog = gtk_dialog_new_with_buttons(_("Settings"),
428 GTK_DIALOG_MODAL, GTK_STOCK_OK,
429 GTK_RESPONSE_ACCEPT, NULL);
432 /* Enable the help button. */
433 ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
436 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
437 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
439 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
440 btn_colors = gtk_button_new_with_label(_("Colors...")));
442 gtk_dialog_add_button(GTK_DIALOG(dialog),
443 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
445 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
446 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
449 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
450 table = gtk_table_new(2, 3, FALSE),
451 label = gtk_label_new(_("GPS")));
453 /* Receiver MAC Address. */
454 gtk_table_attach(GTK_TABLE(table),
455 label = gtk_label_new(_("MAC")),
456 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
457 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
458 gtk_table_attach(GTK_TABLE(table),
459 hbox = gtk_hbox_new(FALSE, 4),
460 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
461 gtk_box_pack_start(GTK_BOX(hbox),
462 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
463 gtk_box_pack_start(GTK_BOX(hbox),
464 btn_scan = gtk_button_new_with_label(_("Scan...")),
468 gtk_table_attach(GTK_TABLE(table),
471 ("Note: You can enter a device path\n"
472 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
473 2, GTK_FILL, 0, 2, 4);
474 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
475 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
477 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
478 table = gtk_table_new(2, 5, FALSE),
479 label = gtk_label_new(_("Filter")));
481 gtk_table_attach(GTK_TABLE(table),
482 chk_gps_filter = gtk_check_button_new_with_label(_("Enable GPS track filter")),
483 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
484 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_gps_filter), _gps_filter);
486 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Horizontal")),
487 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
488 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
489 gtk_table_attach(GTK_TABLE(table), num_hdop_ratio = hildon_controlbar_new(),
490 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
491 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_hdop_ratio), 0, 200);
492 force_min_visible_bars(HILDON_CONTROLBAR(num_hdop_ratio), 1);
494 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Vertical")),
495 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
496 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
497 gtk_table_attach(GTK_TABLE(table), num_vdop_ratio = hildon_controlbar_new(),
498 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
499 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_vdop_ratio), 0, 200);
500 force_min_visible_bars(HILDON_CONTROLBAR(num_vdop_ratio), 1);
502 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Angle")),
503 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
504 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
505 gtk_table_attach(GTK_TABLE(table), num_angle = hildon_controlbar_new(),
506 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4);
507 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_angle), 0, 45);
508 force_min_visible_bars(HILDON_CONTROLBAR(num_angle), 1);
510 /* Distance to OSM data */
511 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("OSM Data")),
512 0, 1, 4, 5, GTK_FILL, 0, 2, 4);
513 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
514 gtk_table_attach(GTK_TABLE(table), num_osm_dist = hildon_controlbar_new(),
515 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 2, 4);
516 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_osm_dist), 0, 5000);
517 force_min_visible_bars(HILDON_CONTROLBAR(num_osm_dist), 1);
519 /* Auto-Center page. */
520 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
521 table = gtk_table_new(2, 2, FALSE),
522 label = gtk_label_new(_("Auto-Center")));
524 /* Auto-Center Sensitivity. */
525 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
526 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
527 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
528 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
529 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
530 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
531 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
534 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
535 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
536 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
538 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
539 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
540 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
541 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
543 /* Announcement page */
544 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
545 table = gtk_table_new(2, 3, FALSE),
546 label = gtk_label_new(_("Announce")));
548 /* Announcement Advance Notice. */
549 gtk_table_attach(GTK_TABLE(table),
550 label = gtk_label_new(_("Advance Notice")),
551 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
552 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
553 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(),
554 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
555 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
556 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
559 gtk_table_attach(GTK_TABLE(table),
561 gtk_check_button_new_with_label(_
562 ("Enable Voice Synthesis (requires flite)")),
563 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
564 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
567 /* Voice Speed and Pitch. */
568 gtk_table_attach(GTK_TABLE(table),
569 hbox = gtk_hbox_new(FALSE, 12),
570 0, 2, 2, 3, 0, 0, 2, 6);
571 gtk_box_pack_start(GTK_BOX(hbox),
572 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
573 gtk_box_pack_start(GTK_BOX(hbox2),
574 lbl_voice_speed = gtk_label_new(_("Speed")),
576 gtk_box_pack_start(GTK_BOX(hbox2),
577 num_voice_speed = hildon_controlbar_new(),
579 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
580 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
582 gtk_box_pack_start(GTK_BOX(hbox),
583 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
584 gtk_box_pack_start(GTK_BOX(hbox2),
585 lbl_voice_pitch = gtk_label_new(_("Pitch")),
587 gtk_box_pack_start(GTK_BOX(hbox2),
588 num_voice_pitch = hildon_controlbar_new(),
590 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
591 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
593 /* Display settings page. */
594 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
595 table = gtk_table_new(2, 3, FALSE),
596 label = gtk_label_new(_("Display")));
599 gtk_table_attach(GTK_TABLE(table),
600 label = gtk_label_new(_("Line Width")),
601 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
602 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
603 gtk_table_attach(GTK_TABLE(table),
604 num_draw_width = hildon_controlbar_new(),
605 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
606 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
607 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
609 /* Keep Display On Only When Fullscreen. */
610 gtk_table_attach(GTK_TABLE(table),
612 gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
613 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
615 /* Information Font Size. */
616 gtk_table_attach(GTK_TABLE(table),
617 hbox = gtk_hbox_new(FALSE, 4),
618 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
619 gtk_box_pack_start(GTK_BOX(hbox),
620 label = gtk_label_new(_("Information Font Size")),
622 gtk_box_pack_start(GTK_BOX(hbox),
623 cmb_info_font_size = gtk_combo_box_new_text(),
625 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
626 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
630 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
631 table = gtk_table_new(2, 3, FALSE),
632 label = gtk_label_new(_("Units")));
635 gtk_table_attach(GTK_TABLE(table),
636 label = gtk_label_new(_("Units")),
637 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
638 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
639 gtk_table_attach(GTK_TABLE(table),
640 cmb_units = gtk_combo_box_new_text(),
641 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
642 for (i = 0; i < UNITS_ENUM_COUNT; i++)
643 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units),
647 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")),
648 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
649 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
650 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
651 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
652 gtk_container_add(GTK_CONTAINER(label),
653 cmb_degformat = gtk_combo_box_new_text());
654 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
655 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
658 gtk_table_attach(GTK_TABLE(table),
660 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
663 gtk_table_attach(GTK_TABLE(table),
664 hbox = gtk_hbox_new(FALSE, 4),
665 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
667 gtk_box_pack_start(GTK_BOX(hbox),
669 gtk_check_button_new_with_label(_("Speed Limit")),
672 gtk_box_pack_start(GTK_BOX(hbox),
673 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
675 gtk_container_add(GTK_CONTAINER(label),
676 num_speed = hildon_number_editor_new(0, 999));
678 gtk_box_pack_start(GTK_BOX(hbox),
679 label = gtk_label_new(_("Location")),
681 gtk_box_pack_start(GTK_BOX(hbox),
682 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
684 gtk_container_add(GTK_CONTAINER(label),
685 cmb_speed_location = gtk_combo_box_new_text());
686 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
687 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
688 SPEED_LOCATION_TEXT[i]);
691 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
692 table = gtk_table_new(2, 3, FALSE),
693 label = gtk_label_new(_("Database")));
696 gtk_table_attach(GTK_TABLE(table),
697 label = gtk_label_new(_("Database")),
698 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
699 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
700 gtk_table_attach(GTK_TABLE(table),
701 hbox = gtk_hbox_new(FALSE, 4),
702 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
703 gtk_box_pack_start(GTK_BOX(hbox),
704 txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
705 gtk_box_pack_start(GTK_BOX(hbox),
707 gtk_button_new_with_label(_("Browse...")), FALSE,
710 /* Show POI below zoom. */
711 gtk_table_attach(GTK_TABLE(table),
712 label = gtk_label_new(_("Show POI below zoom")),
713 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
714 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
715 gtk_table_attach(GTK_TABLE(table),
716 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
717 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
718 gtk_container_add(GTK_CONTAINER(label),
719 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
721 /* Connect signals. */
722 scan_info.settings_dialog = dialog;
723 scan_info.txt_rcvr_mac = txt_rcvr_mac;
724 g_signal_connect(G_OBJECT(btn_scan), "clicked",
725 G_CALLBACK(scan_bluetooth), &scan_info);
726 g_signal_connect(G_OBJECT(btn_buttons), "clicked",
727 G_CALLBACK(settings_dialog_hardkeys), dialog);
728 g_signal_connect(G_OBJECT(btn_colors), "clicked",
729 G_CALLBACK(settings_dialog_colors), dialog);
731 browse_info.dialog = dialog;
732 browse_info.txt = txt_mapper_db;
733 g_signal_connect(G_OBJECT(btn_browsedb), "clicked",
734 G_CALLBACK(settings_dialog_browse_forfile),
737 /* Initialize fields. */
739 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
741 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
743 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
745 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
747 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
749 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
750 _announce_notice_ratio);
751 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
752 (gint) (_voice_speed * 3 + 0.5));
753 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
755 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
757 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
759 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
760 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
761 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
763 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
764 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
765 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
766 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
768 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_hdop_ratio),(gint) _filter_hdop);
769 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_vdop_ratio),(gint) _filter_vdop);
770 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_angle),(gint) _filter_angle);
772 gtk_widget_show_all(dialog);
774 /* TODO: Uncomment the following hide function calls if moimart ever
775 * releases his dbus-based flite software. */
776 gtk_widget_hide(lbl_voice_speed);
777 gtk_widget_hide(num_voice_speed);
778 gtk_widget_hide(lbl_voice_pitch);
779 gtk_widget_hide(num_voice_pitch);
781 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
782 /* Set _rcvr_mac if necessary. */
783 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
784 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
789 gtk_widget_set_sensitive(GTK_WIDGET
790 (_menu_gps_details_item),
794 gtk_check_menu_item_set_active
795 (GTK_CHECK_MENU_ITEM(_menu_enable_gps_item),
798 _("No GPS Receiver MAC provided.\n"
799 "GPS will be disabled."));
801 gtk_widget_set_sensitive(GTK_WIDGET
802 (_menu_gps_details_item),
805 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
806 /* User specified a new rcvr mac. */
808 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
812 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
813 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
814 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
815 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
816 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
817 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
818 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
819 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
820 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
821 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
823 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
825 _voice_speed = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
826 _voice_pitch = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_pitch));
827 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
829 _filter_angle =(gfloat)hildon_controlbar_get_value(HILDON_CONTROLBAR(num_angle));
830 _filter_hdop =(gfloat)hildon_controlbar_get_value(HILDON_CONTROLBAR(num_hdop_ratio));
831 _filter_vdop =(gfloat)hildon_controlbar_get_value(HILDON_CONTROLBAR(num_vdop_ratio));
832 _gps_filter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_gps_filter));
835 mapper_db_disconnect(&_db);
839 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
840 _mapper_db = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
841 mapper_db_connect(&_db, _mapper_db);
846 /* Sensitize menus based on whether we have a database conn. */
847 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
848 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
849 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
850 gtk_widget_set_sensitive(_menu_poi_item, _db != NULL);
852 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
860 gtk_widget_destroy(dialog); /* Destroying causes a crash (!?!?!??!) huh?*/
862 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);