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>
27 #include <osso-helplib.h>
30 #include <hildon-widgets/hildon-program.h>
31 #include <hildon-widgets/hildon-controlbar.h>
32 #include <hildon-widgets/hildon-note.h>
33 #include <hildon-widgets/hildon-color-button.h>
34 #include <hildon-widgets/hildon-file-chooser-dialog.h>
35 #include <hildon-widgets/hildon-number-editor.h>
36 #include <hildon-widgets/hildon-banner.h>
37 #include <hildon-widgets/hildon-system-sound.h>
38 #include <hildon-widgets/hildon-input-mode-hint.h>
39 #include <device_symbols.h>
46 #include "mapper-types.h"
48 #include "ui-common.h"
52 #include "hildon-wrappers.h"
55 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
59 printf("%s()\n", __PRETTY_FUNCTION__);
62 GTK_WIDGET(hildon_file_chooser_dialog_new
63 (GTK_WINDOW(browse_info->dialog),
64 GTK_FILE_CHOOSER_ACTION_OPEN));
66 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
67 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
68 gtk_entry_get_text(GTK_ENTRY
72 res=gtk_dialog_run(GTK_DIALOG(dialog));
73 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
75 gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
76 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
80 gtk_widget_destroy(dialog);
82 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
86 typedef struct _KeysDialogInfo KeysDialogInfo;
87 struct _KeysDialogInfo {
88 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
92 settings_dialog_hardkeys_reset(GtkWidget * widget, KeysDialogInfo * cdi)
95 printf("%s()\n", __PRETTY_FUNCTION__);
97 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
98 _("Reset all hardware keys to their original defaults?"));
100 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
102 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
103 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
104 CUSTOM_KEY_DEFAULT[i]);
106 gtk_widget_destroy(confirm);
108 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
113 settings_dialog_hardkeys(GtkWidget * widget, GtkWidget * parent)
120 GtkWidget *btn_defaults;
121 printf("%s()\n", __PRETTY_FUNCTION__);
123 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
125 GTK_DIALOG_MODAL, GTK_STOCK_OK,
126 GTK_RESPONSE_ACCEPT, NULL);
128 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
130 gtk_button_new_with_label(_("Reset...")));
131 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
132 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
134 gtk_dialog_add_button(GTK_DIALOG(dialog),
135 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
137 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
138 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
140 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
142 gtk_table_attach(GTK_TABLE(table),
143 label = gtk_label_new(""),
144 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
145 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
147 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
149 gtk_table_attach(GTK_TABLE(table),
150 bdi.cmb[i] = gtk_combo_box_new_text(),
151 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
152 for (j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
153 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
154 CUSTOM_ACTION_TEXT[j]);
155 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
158 gtk_widget_show_all(dialog);
161 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
162 /* Check for duplicates. */
163 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
165 for (j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
166 if (gtk_combo_box_get_active
167 (GTK_COMBO_BOX(bdi.cmb[i]))
169 gtk_combo_box_get_active(GTK_COMBO_BOX
173 g_strdup_printf("%s:\n %s\n%s",
175 ("The following action is mapped to multiple keys"),
177 [gtk_combo_box_get_active
182 hildon_note_new_confirmation
183 (GTK_WINDOW(_window), buffer);
185 if (GTK_RESPONSE_OK !=
186 gtk_dialog_run(GTK_DIALOG(confirm)))
188 gtk_widget_destroy(confirm);
191 gtk_widget_destroy(confirm);
195 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
197 gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
201 gtk_widget_destroy(dialog);
203 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
207 typedef struct _ColorsDialogInfo ColorsDialogInfo;
208 struct _ColorsDialogInfo {
209 GtkWidget *col[COLORABLE_ENUM_COUNT];
213 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
216 printf("%s()\n", __PRETTY_FUNCTION__);
218 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
220 ("Reset all colors to their original defaults?"));
222 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
224 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
225 gtk_color_button_set_color(GTK_COLOR_BUTTON
227 &COLORABLE_DEFAULT[i]);
230 gtk_widget_destroy(confirm);
232 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
237 settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
242 GtkWidget *btn_defaults;
243 ColorsDialogInfo cdi;
244 printf("%s()\n", __PRETTY_FUNCTION__);
246 dialog = gtk_dialog_new_with_buttons(_("Colors"),
248 GTK_DIALOG_MODAL, GTK_STOCK_OK,
249 GTK_RESPONSE_ACCEPT, NULL);
251 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
252 btn_defaults = gtk_button_new_with_label(_("Reset...")));
253 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
254 G_CALLBACK(settings_dialog_colors_reset), &cdi);
256 gtk_dialog_add_button(GTK_DIALOG(dialog),
257 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
259 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
260 table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
263 gtk_table_attach(GTK_TABLE(table),
264 label = gtk_label_new(_("GPS")),
265 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
266 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
267 gtk_table_attach(GTK_TABLE(table),
268 cdi.col[COLORABLE_MARK] = gtk_color_button_new(),
269 1, 2, 0, 1, 0, 0, 2, 4);
270 gtk_color_button_set_color(GTK_COLOR_BUTTON
271 (cdi.col[COLORABLE_MARK]),
272 &_color[COLORABLE_MARK]);
273 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] =
274 gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
275 gtk_color_button_set_color(GTK_COLOR_BUTTON
276 (cdi.col[COLORABLE_MARK_VELOCITY]),
277 &_color[COLORABLE_MARK_VELOCITY]);
278 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] =
279 gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
280 gtk_color_button_set_color(GTK_COLOR_BUTTON
281 (cdi.col[COLORABLE_MARK_OLD]),
282 &_color[COLORABLE_MARK_OLD]);
285 gtk_table_attach(GTK_TABLE(table),
286 label = gtk_label_new(_("Track")),
287 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
288 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
289 gtk_table_attach(GTK_TABLE(table),
290 cdi.col[COLORABLE_TRACK] = gtk_color_button_new(),
291 1, 2, 1, 2, 0, 0, 2, 4);
292 gtk_color_button_set_color(GTK_COLOR_BUTTON
293 (cdi.col[COLORABLE_TRACK]),
294 &_color[COLORABLE_TRACK]);
295 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] =
296 gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
297 gtk_color_button_set_color(GTK_COLOR_BUTTON
298 (cdi.col[COLORABLE_TRACK_MARK]),
299 &_color[COLORABLE_TRACK_MARK]);
300 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] =
301 gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
302 gtk_color_button_set_color(GTK_COLOR_BUTTON
303 (cdi.col[COLORABLE_TRACK_BREAK]),
304 &_color[COLORABLE_TRACK_BREAK]);
307 gtk_table_attach(GTK_TABLE(table),
308 label = gtk_label_new(_("Route")),
309 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
310 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
311 gtk_table_attach(GTK_TABLE(table),
312 cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(),
313 1, 2, 2, 3, 0, 0, 2, 4);
314 gtk_color_button_set_color(GTK_COLOR_BUTTON
315 (cdi.col[COLORABLE_ROUTE]),
316 &_color[COLORABLE_ROUTE]);
317 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] =
318 gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
319 gtk_color_button_set_color(GTK_COLOR_BUTTON
320 (cdi.col[COLORABLE_ROUTE_WAY]),
321 &_color[COLORABLE_ROUTE_WAY]);
322 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] =
323 gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
324 gtk_color_button_set_color(GTK_COLOR_BUTTON
325 (cdi.col[COLORABLE_ROUTE_BREAK]),
326 &_color[COLORABLE_ROUTE_BREAK]);
329 gtk_table_attach(GTK_TABLE(table),
330 label = gtk_label_new(_("POI")),
331 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
332 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
333 gtk_table_attach(GTK_TABLE(table),
334 cdi.col[COLORABLE_POI] = gtk_color_button_new(),
335 1, 2, 3, 4, 0, 0, 2, 4);
336 gtk_color_button_set_color(GTK_COLOR_BUTTON
337 (cdi.col[COLORABLE_POI]),
338 &_color[COLORABLE_POI]);
340 gtk_widget_show_all(dialog);
342 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
345 gtk_color_button_get_color(GTK_COLOR_BUTTON
346 (cdi.col[COLORABLE_MARK]),color);
347 _color[COLORABLE_MARK] = *color;
349 gtk_color_button_get_color(GTK_COLOR_BUTTON
350 (cdi.col[COLORABLE_MARK_VELOCITY]) ,color);
351 _color[COLORABLE_MARK_VELOCITY] = *color;
353 gtk_color_button_get_color(GTK_COLOR_BUTTON
354 (cdi.col[COLORABLE_MARK_OLD]),color);
355 _color[COLORABLE_MARK_OLD] = *color;
357 gtk_color_button_get_color(GTK_COLOR_BUTTON
358 (cdi.col[COLORABLE_TRACK]),color);
359 _color[COLORABLE_TRACK] = *color;
361 gtk_color_button_get_color(GTK_COLOR_BUTTON
362 (cdi.col[COLORABLE_TRACK_MARK]),color);
363 _color[COLORABLE_TRACK_MARK] = *color;
365 gtk_color_button_get_color(GTK_COLOR_BUTTON
366 (cdi.col[COLORABLE_TRACK_BREAK]),color);
367 _color[COLORABLE_TRACK_BREAK] = *color;
369 gtk_color_button_get_color(GTK_COLOR_BUTTON
370 (cdi.col[COLORABLE_ROUTE]),color);
371 _color[COLORABLE_ROUTE] = *color;
373 gtk_color_button_get_color(GTK_COLOR_BUTTON
374 (cdi.col[COLORABLE_ROUTE_WAY]),color);
375 _color[COLORABLE_ROUTE_WAY] = *color;
377 gtk_color_button_get_color(GTK_COLOR_BUTTON
378 (cdi.col[COLORABLE_ROUTE_BREAK]),color);
379 _color[COLORABLE_ROUTE_BREAK] = *color;
381 gtk_color_button_get_color(GTK_COLOR_BUTTON
382 (cdi.col[COLORABLE_POI]),color);
383 _color[COLORABLE_POI] = *color;
389 gtk_widget_destroy(dialog);
391 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
396 * Bring up the Settings dialog. Return TRUE if and only if the recever
397 * information has changed (MAC or channel).
400 settings_dialog(void)
408 GtkWidget *txt_rcvr_mac;
409 GtkWidget *num_center_ratio;
410 GtkWidget *num_lead_ratio;
411 GtkWidget *num_announce_notice;
412 GtkWidget *chk_enable_voice;
413 GtkWidget *num_voice_speed;
414 GtkWidget *num_voice_pitch;
415 GtkWidget *lbl_voice_speed;
416 GtkWidget *lbl_voice_pitch;
417 GtkWidget *num_draw_width;
418 GtkWidget *chk_always_keep_on;
419 GtkWidget *cmb_units;
420 GtkWidget *cmb_degformat;
422 GtkWidget *btn_buttons;
423 GtkWidget *btn_colors;
425 GtkWidget *txt_mapper_db;
426 GtkWidget *btn_browsedb;
427 GtkWidget *num_poi_zoom;
428 GtkWidget *chk_speed_limit_on;
429 GtkWidget *num_speed;
430 GtkWidget *cmb_speed_location;
431 GtkWidget *cmb_info_font_size;
433 GtkWidget *chk_gps_filter;
434 GtkWidget *num_angle;
437 GtkWidget *num_osm_dist;
439 BrowseInfo browse_info = { 0, 0 };
440 ScanInfo scan_info = { 0 };
441 gboolean rcvr_changed = FALSE;
443 printf("%s()\n", __PRETTY_FUNCTION__);
445 dialog = gtk_dialog_new_with_buttons(_("Settings"),
447 GTK_DIALOG_MODAL, GTK_STOCK_OK,
448 GTK_RESPONSE_ACCEPT, NULL);
451 /* Enable the help button. */
452 ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
454 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
455 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
458 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
459 btn_colors = gtk_button_new_with_label(_("Colors...")));
461 gtk_dialog_add_button(GTK_DIALOG(dialog),
462 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
464 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
465 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
468 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
469 table = gtk_table_new(2, 3, FALSE),
470 label = gtk_label_new(_("GPS")));
472 /* Receiver MAC Address. */
473 gtk_table_attach(GTK_TABLE(table),
474 label = gtk_label_new(_("MAC")),
475 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
476 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
477 gtk_table_attach(GTK_TABLE(table),
478 hbox = gtk_hbox_new(FALSE, 4),
479 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
480 gtk_box_pack_start(GTK_BOX(hbox),
481 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
482 gtk_box_pack_start(GTK_BOX(hbox),
483 btn_scan = gtk_button_new_with_label(_("Scan...")),
487 gtk_table_attach(GTK_TABLE(table),
488 label = gtk_label_new(_
489 ("Note: You can enter a device path\n"
490 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
491 2, GTK_FILL, 0, 2, 4);
492 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
493 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
495 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
496 table = gtk_table_new(2, 5, FALSE),
497 label = gtk_label_new(_("Filter")));
499 gtk_table_attach(GTK_TABLE(table),
500 chk_gps_filter = gtk_check_button_new_with_label(_("Enable GPS track filter")),
501 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
502 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_gps_filter), _gps_filter);
504 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Horizontal")),
505 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
506 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
507 gtk_table_attach(GTK_TABLE(table), num_hdop = gtk_hscale_new_with_range(0, 200, 0.1),
508 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
510 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Vertical")),
511 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
512 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
513 gtk_table_attach(GTK_TABLE(table), num_vdop = gtk_hscale_new_with_range(0, 200, 0.1),
514 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
516 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Angle")),
517 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
518 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
519 gtk_table_attach(GTK_TABLE(table), num_angle = gtk_hscale_new_with_range(0, 45, 0.5),
520 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4);
522 /* Distance to OSM data */
523 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Distance to OSM Data")),
524 0, 1, 4, 5, GTK_FILL, 0, 2, 4);
525 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
526 gtk_table_attach(GTK_TABLE(table), num_osm_dist = gtk_hscale_new_with_range(0, 5000, 1),
527 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 2, 4);
529 /* Auto-Center page. */
530 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
531 table = gtk_table_new(2, 2, FALSE),
532 label = gtk_label_new(_("Auto-Center")));
534 /* Auto-Center Sensitivity. */
535 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
536 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
537 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
538 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
539 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
540 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
541 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
544 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
545 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
546 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
548 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
549 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
550 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
551 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
553 /* Announcement page */
554 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
555 table = gtk_table_new(2, 3, FALSE),
556 label = gtk_label_new(_("Announce")));
558 /* Announcement Advance Notice. */
559 gtk_table_attach(GTK_TABLE(table),
560 label = gtk_label_new(_("Advance Notice")),
561 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
562 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
563 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(),
564 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
565 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
566 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
569 gtk_table_attach(GTK_TABLE(table),
571 gtk_check_button_new_with_label(_
572 ("Enable Voice Synthesis (requires flite)")),
573 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
574 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
577 /* Voice Speed and Pitch. */
578 gtk_table_attach(GTK_TABLE(table),
579 hbox = gtk_hbox_new(FALSE, 12),
580 0, 2, 2, 3, 0, 0, 2, 6);
581 gtk_box_pack_start(GTK_BOX(hbox),
582 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
583 gtk_box_pack_start(GTK_BOX(hbox2),
584 lbl_voice_speed = gtk_label_new(_("Speed")),
586 gtk_box_pack_start(GTK_BOX(hbox2),
587 num_voice_speed = hildon_controlbar_new(),
589 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
590 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
592 gtk_box_pack_start(GTK_BOX(hbox),
593 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
594 gtk_box_pack_start(GTK_BOX(hbox2),
595 lbl_voice_pitch = gtk_label_new(_("Pitch")),
597 gtk_box_pack_start(GTK_BOX(hbox2),
598 num_voice_pitch = hildon_controlbar_new(),
600 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
601 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
603 /* Display settings page. */
604 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
605 table = gtk_table_new(2, 3, FALSE),
606 label = gtk_label_new(_("Display")));
609 gtk_table_attach(GTK_TABLE(table),
610 label = gtk_label_new(_("Line Width")),
611 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
612 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
613 gtk_table_attach(GTK_TABLE(table),
614 num_draw_width = hildon_controlbar_new(),
615 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
616 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
617 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
619 /* Keep Display On Only When Fullscreen. */
620 gtk_table_attach(GTK_TABLE(table),
622 gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
623 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
625 /* Information Font Size. */
626 gtk_table_attach(GTK_TABLE(table),
627 hbox = gtk_hbox_new(FALSE, 4),
628 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
629 gtk_box_pack_start(GTK_BOX(hbox),
630 label = gtk_label_new(_("Information Font Size")),
632 gtk_box_pack_start(GTK_BOX(hbox),
633 cmb_info_font_size = gtk_combo_box_new_text(),
635 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
636 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
640 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
641 table = gtk_table_new(2, 3, FALSE),
642 label = gtk_label_new(_("Units")));
645 gtk_table_attach(GTK_TABLE(table),
646 label = gtk_label_new(_("Units")),
647 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
648 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
649 gtk_table_attach(GTK_TABLE(table),
650 cmb_units = gtk_combo_box_new_text(),
651 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
652 for (i = 0; i < UNITS_ENUM_COUNT; i++)
653 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units),
657 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")),
658 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
659 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
660 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
661 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
662 gtk_container_add(GTK_CONTAINER(label),
663 cmb_degformat = gtk_combo_box_new_text());
664 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
665 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
668 gtk_table_attach(GTK_TABLE(table),
670 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
673 gtk_table_attach(GTK_TABLE(table),
674 hbox = gtk_hbox_new(FALSE, 4),
675 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
677 gtk_box_pack_start(GTK_BOX(hbox),
679 gtk_check_button_new_with_label(_("Speed Limit")),
682 gtk_box_pack_start(GTK_BOX(hbox),
683 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
685 gtk_container_add(GTK_CONTAINER(label),
686 num_speed = hildon_number_editor_new(0, 999));
688 gtk_box_pack_start(GTK_BOX(hbox),
689 label = gtk_label_new(_("Location")),
691 gtk_box_pack_start(GTK_BOX(hbox),
692 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
694 gtk_container_add(GTK_CONTAINER(label),
695 cmb_speed_location = gtk_combo_box_new_text());
696 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
697 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
698 SPEED_LOCATION_TEXT[i]);
701 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
702 table = gtk_table_new(2, 3, FALSE),
703 label = gtk_label_new(_("Database")));
706 gtk_table_attach(GTK_TABLE(table),
707 label = gtk_label_new(_("Database")),
708 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
709 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
710 gtk_table_attach(GTK_TABLE(table),
711 hbox = gtk_hbox_new(FALSE, 4),
712 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
713 gtk_box_pack_start(GTK_BOX(hbox),
714 txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
715 gtk_box_pack_start(GTK_BOX(hbox),
717 gtk_button_new_with_label(_("Browse...")), FALSE,
720 /* Show POI below zoom. */
721 gtk_table_attach(GTK_TABLE(table),
722 label = gtk_label_new(_("Show POI below zoom")),
723 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
724 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
725 gtk_table_attach(GTK_TABLE(table),
726 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
727 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
728 gtk_container_add(GTK_CONTAINER(label),
729 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
731 /* Connect signals. */
732 scan_info.settings_dialog = dialog;
733 scan_info.txt_rcvr_mac = txt_rcvr_mac;
734 g_signal_connect(G_OBJECT(btn_scan), "clicked",
735 G_CALLBACK(scan_bluetooth), &scan_info);
736 g_signal_connect(G_OBJECT(btn_buttons), "clicked",
737 G_CALLBACK(settings_dialog_hardkeys), dialog);
738 g_signal_connect(G_OBJECT(btn_colors), "clicked",
739 G_CALLBACK(settings_dialog_colors), dialog);
741 browse_info.dialog = dialog;
742 browse_info.txt = txt_mapper_db;
743 g_signal_connect(G_OBJECT(btn_browsedb), "clicked",
744 G_CALLBACK(settings_dialog_browse_forfile),
747 /* Initialize fields. */
749 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
751 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
753 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
755 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
757 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
759 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
760 _announce_notice_ratio);
761 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
762 (gint) (_voice_speed * 3 + 0.5));
763 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
765 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
767 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
769 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
770 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
771 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
773 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
774 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
775 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
776 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
778 gtk_range_set_value(num_hdop, _filter_hdop);
779 gtk_range_set_value(num_vdop, _filter_vdop);
780 gtk_range_set_value(num_angle, _filter_angle);
781 gtk_range_set_value(num_osm_dist, _filter_osm);
783 gtk_widget_show_all(dialog);
785 /* TODO: Uncomment the following hide function calls if moimart ever
786 * releases his dbus-based flite software. */
787 gtk_widget_hide(lbl_voice_speed);
788 gtk_widget_hide(num_voice_speed);
789 gtk_widget_hide(lbl_voice_pitch);
790 gtk_widget_hide(num_voice_pitch);
792 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
793 /* Set _rcvr_mac if necessary. */
794 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
795 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
800 gtk_widget_set_sensitive(GTK_WIDGET
801 (_menu_gps_details_item),
805 gtk_check_menu_item_set_active
806 (GTK_CHECK_MENU_ITEM(_menu_enable_gps_item),
809 _("No GPS Receiver MAC provided.\n"
810 "GPS will be disabled."));
812 gtk_widget_set_sensitive(GTK_WIDGET
813 (_menu_gps_details_item),
816 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
817 /* User specified a new rcvr mac. */
819 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
823 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
824 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
825 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
826 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
827 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
828 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
829 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
830 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
831 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
832 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
834 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
836 _voice_speed = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
837 _voice_pitch = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_pitch));
838 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
840 _filter_angle = gtk_range_get_value(GTK_RANGE(num_angle));
841 _filter_hdop = gtk_range_get_value(GTK_RANGE(num_hdop));
842 _filter_vdop = gtk_range_get_value(GTK_RANGE(num_vdop));
843 _filter_osm = gtk_range_get_value(GTK_RANGE(num_osm_dist));
844 _gps_filter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_gps_filter));
847 mapper_db_disconnect(&_db);
851 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
852 _mapper_db = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
853 mapper_db_connect(&_db, _mapper_db);
858 /* Sensitize menus based on whether we have a database conn. */
859 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
860 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
861 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
862 gtk_widget_set_sensitive(_menu_poi_item, _db != NULL);
864 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
873 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
874 gtk_widget_destroy(dialog);
876 gtk_widget_hide(dialog);
879 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);