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),
129 btn_defaults = gtk_button_new_with_label(_("Reset...")));
130 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
131 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
133 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
135 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
136 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
138 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
140 gtk_table_attach(GTK_TABLE(table),
141 label = gtk_label_new(""),
142 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
143 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
145 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
147 gtk_table_attach(GTK_TABLE(table),
148 bdi.cmb[i] = gtk_combo_box_new_text(),
149 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
150 for (j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
151 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
152 CUSTOM_ACTION_TEXT[j]);
153 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
156 gtk_widget_show_all(dialog);
159 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
160 /* Check for duplicates. */
161 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
163 for (j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
164 if (gtk_combo_box_get_active
165 (GTK_COMBO_BOX(bdi.cmb[i]))
167 gtk_combo_box_get_active(GTK_COMBO_BOX
171 g_strdup_printf("%s:\n %s\n%s",
173 ("The following action is mapped to multiple keys"),
175 [gtk_combo_box_get_active
180 hildon_note_new_confirmation
181 (GTK_WINDOW(_window), buffer);
183 if (GTK_RESPONSE_OK !=
184 gtk_dialog_run(GTK_DIALOG(confirm)))
186 gtk_widget_destroy(confirm);
189 gtk_widget_destroy(confirm);
193 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
195 gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
199 gtk_widget_destroy(dialog);
201 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
205 typedef struct _ColorsDialogInfo ColorsDialogInfo;
206 struct _ColorsDialogInfo {
207 GtkWidget *col[COLORABLE_ENUM_COUNT];
211 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
214 printf("%s()\n", __PRETTY_FUNCTION__);
216 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
218 ("Reset all colors to their original defaults?"));
220 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
222 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
223 gtk_color_button_set_color(GTK_COLOR_BUTTON
225 &COLORABLE_DEFAULT[i]);
228 gtk_widget_destroy(confirm);
230 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
235 settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
240 GtkWidget *btn_defaults;
241 ColorsDialogInfo cdi;
242 printf("%s()\n", __PRETTY_FUNCTION__);
244 dialog = gtk_dialog_new_with_buttons(_("Colors"),
246 GTK_DIALOG_MODAL, GTK_STOCK_OK,
247 GTK_RESPONSE_ACCEPT, NULL);
249 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
250 btn_defaults = gtk_button_new_with_label(_("Reset...")));
251 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
252 G_CALLBACK(settings_dialog_colors_reset), &cdi);
254 gtk_dialog_add_button(GTK_DIALOG(dialog),
255 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
257 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
258 table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
261 gtk_table_attach(GTK_TABLE(table),
262 label = gtk_label_new(_("GPS")),
263 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
264 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
265 gtk_table_attach(GTK_TABLE(table),
266 cdi.col[COLORABLE_MARK] = gtk_color_button_new(),
267 1, 2, 0, 1, 0, 0, 2, 4);
268 gtk_color_button_set_color(GTK_COLOR_BUTTON
269 (cdi.col[COLORABLE_MARK]),
270 &_color[COLORABLE_MARK]);
271 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] =
272 gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
273 gtk_color_button_set_color(GTK_COLOR_BUTTON
274 (cdi.col[COLORABLE_MARK_VELOCITY]),
275 &_color[COLORABLE_MARK_VELOCITY]);
276 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] =
277 gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
278 gtk_color_button_set_color(GTK_COLOR_BUTTON
279 (cdi.col[COLORABLE_MARK_OLD]),
280 &_color[COLORABLE_MARK_OLD]);
283 gtk_table_attach(GTK_TABLE(table),
284 label = gtk_label_new(_("Track")),
285 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
286 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
287 gtk_table_attach(GTK_TABLE(table),
288 cdi.col[COLORABLE_TRACK] = gtk_color_button_new(),
289 1, 2, 1, 2, 0, 0, 2, 4);
290 gtk_color_button_set_color(GTK_COLOR_BUTTON
291 (cdi.col[COLORABLE_TRACK]),
292 &_color[COLORABLE_TRACK]);
293 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] =
294 gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
295 gtk_color_button_set_color(GTK_COLOR_BUTTON
296 (cdi.col[COLORABLE_TRACK_MARK]),
297 &_color[COLORABLE_TRACK_MARK]);
298 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] =
299 gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
300 gtk_color_button_set_color(GTK_COLOR_BUTTON
301 (cdi.col[COLORABLE_TRACK_BREAK]),
302 &_color[COLORABLE_TRACK_BREAK]);
305 gtk_table_attach(GTK_TABLE(table),
306 label = gtk_label_new(_("Route")),
307 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
308 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
309 gtk_table_attach(GTK_TABLE(table),
310 cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(),
311 1, 2, 2, 3, 0, 0, 2, 4);
312 gtk_color_button_set_color(GTK_COLOR_BUTTON
313 (cdi.col[COLORABLE_ROUTE]),
314 &_color[COLORABLE_ROUTE]);
315 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] =
316 gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
317 gtk_color_button_set_color(GTK_COLOR_BUTTON
318 (cdi.col[COLORABLE_ROUTE_WAY]),
319 &_color[COLORABLE_ROUTE_WAY]);
320 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] =
321 gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
322 gtk_color_button_set_color(GTK_COLOR_BUTTON
323 (cdi.col[COLORABLE_ROUTE_BREAK]),
324 &_color[COLORABLE_ROUTE_BREAK]);
327 gtk_table_attach(GTK_TABLE(table),
328 label = gtk_label_new(_("POI")),
329 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
330 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
331 gtk_table_attach(GTK_TABLE(table),
332 cdi.col[COLORABLE_POI] = gtk_color_button_new(),
333 1, 2, 3, 4, 0, 0, 2, 4);
334 gtk_color_button_set_color(GTK_COLOR_BUTTON
335 (cdi.col[COLORABLE_POI]),
336 &_color[COLORABLE_POI]);
338 gtk_widget_show_all(dialog);
340 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
343 gtk_color_button_get_color(GTK_COLOR_BUTTON
344 (cdi.col[COLORABLE_MARK]),color);
345 _color[COLORABLE_MARK] = *color;
347 gtk_color_button_get_color(GTK_COLOR_BUTTON
348 (cdi.col[COLORABLE_MARK_VELOCITY]) ,color);
349 _color[COLORABLE_MARK_VELOCITY] = *color;
351 gtk_color_button_get_color(GTK_COLOR_BUTTON
352 (cdi.col[COLORABLE_MARK_OLD]),color);
353 _color[COLORABLE_MARK_OLD] = *color;
355 gtk_color_button_get_color(GTK_COLOR_BUTTON
356 (cdi.col[COLORABLE_TRACK]),color);
357 _color[COLORABLE_TRACK] = *color;
359 gtk_color_button_get_color(GTK_COLOR_BUTTON
360 (cdi.col[COLORABLE_TRACK_MARK]),color);
361 _color[COLORABLE_TRACK_MARK] = *color;
363 gtk_color_button_get_color(GTK_COLOR_BUTTON
364 (cdi.col[COLORABLE_TRACK_BREAK]),color);
365 _color[COLORABLE_TRACK_BREAK] = *color;
367 gtk_color_button_get_color(GTK_COLOR_BUTTON
368 (cdi.col[COLORABLE_ROUTE]),color);
369 _color[COLORABLE_ROUTE] = *color;
371 gtk_color_button_get_color(GTK_COLOR_BUTTON
372 (cdi.col[COLORABLE_ROUTE_WAY]),color);
373 _color[COLORABLE_ROUTE_WAY] = *color;
375 gtk_color_button_get_color(GTK_COLOR_BUTTON
376 (cdi.col[COLORABLE_ROUTE_BREAK]),color);
377 _color[COLORABLE_ROUTE_BREAK] = *color;
379 gtk_color_button_get_color(GTK_COLOR_BUTTON
380 (cdi.col[COLORABLE_POI]),color);
381 _color[COLORABLE_POI] = *color;
387 gtk_widget_destroy(dialog);
389 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
394 * Bring up the Settings dialog. Return TRUE if and only if the recever
395 * information has changed (MAC or channel).
398 settings_dialog(void)
406 GtkWidget *txt_rcvr_mac;
407 GtkWidget *num_center_ratio;
408 GtkWidget *num_lead_ratio;
409 GtkWidget *num_announce_notice;
410 GtkWidget *chk_enable_voice;
411 GtkWidget *num_voice_speed;
412 GtkWidget *num_voice_pitch;
413 GtkWidget *lbl_voice_speed;
414 GtkWidget *lbl_voice_pitch;
415 GtkWidget *num_draw_width;
416 GtkWidget *chk_always_keep_on;
417 GtkWidget *cmb_units;
418 GtkWidget *cmb_degformat;
420 GtkWidget *btn_buttons;
421 GtkWidget *btn_colors;
423 GtkWidget *txt_mapper_db;
424 GtkWidget *btn_browsedb;
425 GtkWidget *num_poi_zoom;
426 GtkWidget *chk_speed_limit_on;
427 GtkWidget *num_speed;
428 GtkWidget *cmb_speed_location;
429 GtkWidget *cmb_info_font_size;
431 GtkWidget *chk_gps_filter;
432 GtkWidget *num_angle;
435 GtkWidget *num_osm_dist;
437 BrowseInfo browse_info = { 0, 0 };
438 ScanInfo scan_info = { 0 };
439 gboolean rcvr_changed = FALSE;
441 printf("%s()\n", __PRETTY_FUNCTION__);
443 dialog = gtk_dialog_new_with_buttons(_("Settings"),
445 GTK_DIALOG_MODAL, GTK_STOCK_OK,
446 GTK_RESPONSE_ACCEPT, NULL);
449 /* Enable the help button. */
450 ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
452 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
453 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
454 g_signal_connect(G_OBJECT(btn_buttons), "clicked", G_CALLBACK(settings_dialog_hardkeys), dialog);
457 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
458 btn_colors = gtk_button_new_with_label(_("Colors...")));
460 gtk_dialog_add_button(GTK_DIALOG(dialog),
461 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
463 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
464 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
467 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
468 table = gtk_table_new(2, 3, FALSE),
469 label = gtk_label_new(_("GPS")));
471 /* Receiver MAC Address. */
472 gtk_table_attach(GTK_TABLE(table),
473 label = gtk_label_new(_("MAC")),
474 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
475 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
476 gtk_table_attach(GTK_TABLE(table),
477 hbox = gtk_hbox_new(FALSE, 4),
478 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
479 gtk_box_pack_start(GTK_BOX(hbox),
480 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
481 gtk_box_pack_start(GTK_BOX(hbox),
482 btn_scan = gtk_button_new_with_label(_("Scan...")),
486 gtk_table_attach(GTK_TABLE(table),
487 label = gtk_label_new(_
488 ("Note: You can enter a device path\n"
489 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
490 2, GTK_FILL, 0, 2, 4);
491 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
492 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
494 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
495 table = gtk_table_new(2, 5, FALSE),
496 label = gtk_label_new(_("Filter")));
498 gtk_table_attach(GTK_TABLE(table),
499 chk_gps_filter = gtk_check_button_new_with_label(_("Enable GPS track filter")),
500 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
501 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_gps_filter), _gps_filter);
503 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Horizontal")),
504 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
505 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
506 gtk_table_attach(GTK_TABLE(table), num_hdop = gtk_hscale_new_with_range(0, 200, 0.1),
507 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
509 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Vertical")),
510 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
511 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
512 gtk_table_attach(GTK_TABLE(table), num_vdop = gtk_hscale_new_with_range(0, 200, 0.1),
513 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
515 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Angle")),
516 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
517 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
518 gtk_table_attach(GTK_TABLE(table), num_angle = gtk_hscale_new_with_range(0, 45, 0.5),
519 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4);
521 /* Distance to OSM data */
522 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Distance to OSM Data")),
523 0, 1, 4, 5, GTK_FILL, 0, 2, 4);
524 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
525 gtk_table_attach(GTK_TABLE(table), num_osm_dist = gtk_hscale_new_with_range(0, 5000, 1),
526 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 2, 4);
528 /* Auto-Center page. */
529 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
530 table = gtk_table_new(2, 2, FALSE),
531 label = gtk_label_new(_("Auto-Center")));
533 /* Auto-Center Sensitivity. */
534 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
535 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
536 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
537 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
538 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
539 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
540 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
543 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
544 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
545 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
547 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
548 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
549 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
550 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
552 /* Announcement page */
553 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
554 table = gtk_table_new(2, 3, FALSE),
555 label = gtk_label_new(_("Announce")));
557 /* Announcement Advance Notice. */
558 gtk_table_attach(GTK_TABLE(table),
559 label = gtk_label_new(_("Advance Notice")),
560 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
561 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
562 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(),
563 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
564 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
565 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
568 gtk_table_attach(GTK_TABLE(table),
570 gtk_check_button_new_with_label(_
571 ("Enable Voice Synthesis (requires flite)")),
572 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
573 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
576 /* Voice Speed and Pitch. */
577 gtk_table_attach(GTK_TABLE(table),
578 hbox = gtk_hbox_new(FALSE, 12),
579 0, 2, 2, 3, 0, 0, 2, 6);
580 gtk_box_pack_start(GTK_BOX(hbox),
581 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
582 gtk_box_pack_start(GTK_BOX(hbox2),
583 lbl_voice_speed = gtk_label_new(_("Speed")),
585 gtk_box_pack_start(GTK_BOX(hbox2),
586 num_voice_speed = hildon_controlbar_new(),
588 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
589 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
591 gtk_box_pack_start(GTK_BOX(hbox),
592 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
593 gtk_box_pack_start(GTK_BOX(hbox2),
594 lbl_voice_pitch = gtk_label_new(_("Pitch")),
596 gtk_box_pack_start(GTK_BOX(hbox2),
597 num_voice_pitch = hildon_controlbar_new(),
599 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
600 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
602 /* Display settings page. */
603 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
604 table = gtk_table_new(2, 3, FALSE),
605 label = gtk_label_new(_("Display")));
608 gtk_table_attach(GTK_TABLE(table),
609 label = gtk_label_new(_("Line Width")),
610 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
611 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
612 gtk_table_attach(GTK_TABLE(table),
613 num_draw_width = hildon_controlbar_new(),
614 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
615 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
616 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
618 /* Keep Display On Only When Fullscreen. */
619 gtk_table_attach(GTK_TABLE(table),
621 gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
622 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
624 /* Information Font Size. */
625 gtk_table_attach(GTK_TABLE(table),
626 hbox = gtk_hbox_new(FALSE, 4),
627 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
628 gtk_box_pack_start(GTK_BOX(hbox),
629 label = gtk_label_new(_("Information Font Size")),
631 gtk_box_pack_start(GTK_BOX(hbox),
632 cmb_info_font_size = gtk_combo_box_new_text(),
634 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
635 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
639 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
640 table = gtk_table_new(2, 3, FALSE),
641 label = gtk_label_new(_("Units")));
644 gtk_table_attach(GTK_TABLE(table),
645 label = gtk_label_new(_("Units")),
646 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
647 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
648 gtk_table_attach(GTK_TABLE(table),
649 cmb_units = gtk_combo_box_new_text(),
650 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
651 for (i = 0; i < UNITS_ENUM_COUNT; i++)
652 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units),
656 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")),
657 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
658 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
659 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
660 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
661 gtk_container_add(GTK_CONTAINER(label),
662 cmb_degformat = gtk_combo_box_new_text());
663 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
664 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
667 gtk_table_attach(GTK_TABLE(table),
669 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
672 gtk_table_attach(GTK_TABLE(table),
673 hbox = gtk_hbox_new(FALSE, 4),
674 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
676 gtk_box_pack_start(GTK_BOX(hbox),
678 gtk_check_button_new_with_label(_("Speed Limit")),
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 num_speed = hildon_number_editor_new(0, 999));
687 gtk_box_pack_start(GTK_BOX(hbox),
688 label = gtk_label_new(_("Location")),
690 gtk_box_pack_start(GTK_BOX(hbox),
691 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
693 gtk_container_add(GTK_CONTAINER(label),
694 cmb_speed_location = gtk_combo_box_new_text());
695 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
696 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
697 SPEED_LOCATION_TEXT[i]);
700 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
701 table = gtk_table_new(2, 3, FALSE),
702 label = gtk_label_new(_("Database")));
705 gtk_table_attach(GTK_TABLE(table),
706 label = gtk_label_new(_("Database")),
707 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
708 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
709 gtk_table_attach(GTK_TABLE(table),
710 hbox = gtk_hbox_new(FALSE, 4),
711 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
712 gtk_box_pack_start(GTK_BOX(hbox),
713 txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
714 gtk_box_pack_start(GTK_BOX(hbox),
716 gtk_button_new_with_label(_("Browse...")), FALSE,
719 /* Show POI below zoom. */
720 gtk_table_attach(GTK_TABLE(table),
721 label = gtk_label_new(_("Show POI below zoom")),
722 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
723 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
724 gtk_table_attach(GTK_TABLE(table),
725 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
726 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
727 gtk_container_add(GTK_CONTAINER(label),
728 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
730 /* Connect signals. */
731 scan_info.settings_dialog = dialog;
732 scan_info.txt_rcvr_mac = txt_rcvr_mac;
733 g_signal_connect(G_OBJECT(btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
734 g_signal_connect(G_OBJECT(btn_colors), "clicked", G_CALLBACK(settings_dialog_colors), dialog);
736 browse_info.dialog = dialog;
737 browse_info.txt = txt_mapper_db;
738 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
740 /* Initialize fields. */
742 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
745 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
747 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
749 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
751 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
753 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
754 _announce_notice_ratio);
755 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
756 (gint) (_voice_speed * 3 + 0.5));
757 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
759 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
761 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
763 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
764 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
765 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
767 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
768 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
769 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
770 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
772 gtk_range_set_value(num_hdop, _filter_hdop);
773 gtk_range_set_value(num_vdop, _filter_vdop);
774 gtk_range_set_value(num_angle, _filter_angle);
775 gtk_range_set_value(num_osm_dist, _filter_osm);
777 gtk_widget_show_all(dialog);
779 /* TODO: Uncomment the following hide function calls if moimart ever
780 * releases his dbus-based flite software. */
781 gtk_widget_hide(lbl_voice_speed);
782 gtk_widget_hide(num_voice_speed);
783 gtk_widget_hide(lbl_voice_pitch);
784 gtk_widget_hide(num_voice_pitch);
786 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
787 /* Set _rcvr_mac if necessary. */
788 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
789 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
794 gtk_widget_set_sensitive(GTK_WIDGET
795 (_menu_gps_details_item),
799 gtk_check_menu_item_set_active
800 (GTK_CHECK_MENU_ITEM(_menu_enable_gps_item),
803 _("No GPS Receiver MAC provided.\n"
804 "GPS will be disabled."));
806 gtk_widget_set_sensitive(GTK_WIDGET
807 (_menu_gps_details_item),
810 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
811 /* User specified a new rcvr mac. */
813 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
817 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
818 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
819 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
820 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
821 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
822 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
823 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
824 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
825 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
826 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
828 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
830 _voice_speed = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
831 _voice_pitch = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_pitch));
832 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
834 _filter_angle = gtk_range_get_value(GTK_RANGE(num_angle));
835 _filter_hdop = gtk_range_get_value(GTK_RANGE(num_hdop));
836 _filter_vdop = gtk_range_get_value(GTK_RANGE(num_vdop));
837 _filter_osm = gtk_range_get_value(GTK_RANGE(num_osm_dist));
838 _gps_filter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_gps_filter));
841 mapper_db_disconnect(&_db);
845 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
846 _mapper_db = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
847 mapper_db_connect(&_db, _mapper_db);
852 /* Sensitize menus based on whether we have a database conn. */
853 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
854 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
855 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
856 gtk_widget_set_sensitive(_menu_poi_item, _db != NULL);
858 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
867 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
868 gtk_widget_destroy(dialog);
870 gtk_widget_hide(dialog);
873 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);