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>
25 #include "hildon-mapper.h"
31 #include "mapper-types.h"
33 #include "ui-common.h"
37 #include "hildon-wrappers.h"
40 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
44 printf("%s()\n", __PRETTY_FUNCTION__);
47 GTK_WIDGET(hildon_file_chooser_dialog_new
48 (GTK_WINDOW(browse_info->dialog),
49 GTK_FILE_CHOOSER_ACTION_OPEN));
51 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
52 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
53 gtk_entry_get_text(GTK_ENTRY
57 res=gtk_dialog_run(GTK_DIALOG(dialog));
58 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
60 gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
61 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
65 gtk_widget_destroy(dialog);
67 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
71 typedef struct _KeysDialogInfo KeysDialogInfo;
72 struct _KeysDialogInfo {
73 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
77 settings_dialog_hardkeys_reset(GtkWidget * widget, KeysDialogInfo * cdi)
80 printf("%s()\n", __PRETTY_FUNCTION__);
82 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
83 _("Reset all hardware keys to their original defaults?"));
85 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
87 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
88 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
89 CUSTOM_KEY_DEFAULT[i]);
91 gtk_widget_destroy(confirm);
93 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
98 settings_dialog_hardkeys(GtkWidget * widget, GtkWidget * parent)
105 GtkWidget *btn_defaults;
106 printf("%s()\n", __PRETTY_FUNCTION__);
108 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
110 GTK_DIALOG_MODAL, GTK_STOCK_OK,
111 GTK_RESPONSE_ACCEPT, NULL);
113 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
114 btn_defaults = gtk_button_new_with_label(_("Reset...")));
115 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
116 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
118 gtk_dialog_add_button(GTK_DIALOG(dialog), 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__);
220 settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
225 GtkWidget *btn_defaults;
226 ColorsDialogInfo cdi;
227 printf("%s()\n", __PRETTY_FUNCTION__);
229 dialog = gtk_dialog_new_with_buttons(_("Colors"),
231 GTK_DIALOG_MODAL, GTK_STOCK_OK,
232 GTK_RESPONSE_ACCEPT, NULL);
234 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
235 btn_defaults = gtk_button_new_with_label(_("Reset...")));
236 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
237 G_CALLBACK(settings_dialog_colors_reset), &cdi);
239 gtk_dialog_add_button(GTK_DIALOG(dialog),
240 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
242 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
243 table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
246 gtk_table_attach(GTK_TABLE(table),
247 label = gtk_label_new(_("GPS")),
248 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
249 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
250 gtk_table_attach(GTK_TABLE(table),
251 cdi.col[COLORABLE_MARK] = gtk_color_button_new(),
252 1, 2, 0, 1, 0, 0, 2, 4);
253 gtk_color_button_set_color(GTK_COLOR_BUTTON
254 (cdi.col[COLORABLE_MARK]),
255 &_color[COLORABLE_MARK]);
256 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] =
257 gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
258 gtk_color_button_set_color(GTK_COLOR_BUTTON
259 (cdi.col[COLORABLE_MARK_VELOCITY]),
260 &_color[COLORABLE_MARK_VELOCITY]);
261 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] =
262 gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
263 gtk_color_button_set_color(GTK_COLOR_BUTTON
264 (cdi.col[COLORABLE_MARK_OLD]),
265 &_color[COLORABLE_MARK_OLD]);
268 gtk_table_attach(GTK_TABLE(table),
269 label = gtk_label_new(_("Track")),
270 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
271 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
272 gtk_table_attach(GTK_TABLE(table),
273 cdi.col[COLORABLE_TRACK] = gtk_color_button_new(),
274 1, 2, 1, 2, 0, 0, 2, 4);
275 gtk_color_button_set_color(GTK_COLOR_BUTTON
276 (cdi.col[COLORABLE_TRACK]),
277 &_color[COLORABLE_TRACK]);
278 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] =
279 gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
280 gtk_color_button_set_color(GTK_COLOR_BUTTON
281 (cdi.col[COLORABLE_TRACK_MARK]),
282 &_color[COLORABLE_TRACK_MARK]);
283 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] =
284 gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
285 gtk_color_button_set_color(GTK_COLOR_BUTTON
286 (cdi.col[COLORABLE_TRACK_BREAK]),
287 &_color[COLORABLE_TRACK_BREAK]);
290 gtk_table_attach(GTK_TABLE(table),
291 label = gtk_label_new(_("Route")),
292 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
293 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
294 gtk_table_attach(GTK_TABLE(table),
295 cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(),
296 1, 2, 2, 3, 0, 0, 2, 4);
297 gtk_color_button_set_color(GTK_COLOR_BUTTON
298 (cdi.col[COLORABLE_ROUTE]),
299 &_color[COLORABLE_ROUTE]);
300 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] =
301 gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
302 gtk_color_button_set_color(GTK_COLOR_BUTTON
303 (cdi.col[COLORABLE_ROUTE_WAY]),
304 &_color[COLORABLE_ROUTE_WAY]);
305 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] =
306 gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
307 gtk_color_button_set_color(GTK_COLOR_BUTTON
308 (cdi.col[COLORABLE_ROUTE_BREAK]),
309 &_color[COLORABLE_ROUTE_BREAK]);
312 gtk_table_attach(GTK_TABLE(table),
313 label = gtk_label_new(_("POI")),
314 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
315 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
316 gtk_table_attach(GTK_TABLE(table),
317 cdi.col[COLORABLE_POI] = gtk_color_button_new(),
318 1, 2, 3, 4, 0, 0, 2, 4);
319 gtk_color_button_set_color(GTK_COLOR_BUTTON
320 (cdi.col[COLORABLE_POI]),
321 &_color[COLORABLE_POI]);
323 gtk_widget_show_all(dialog);
325 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
328 gtk_color_button_get_color(GTK_COLOR_BUTTON
329 (cdi.col[COLORABLE_MARK]),color);
330 _color[COLORABLE_MARK] = *color;
332 gtk_color_button_get_color(GTK_COLOR_BUTTON
333 (cdi.col[COLORABLE_MARK_VELOCITY]) ,color);
334 _color[COLORABLE_MARK_VELOCITY] = *color;
336 gtk_color_button_get_color(GTK_COLOR_BUTTON
337 (cdi.col[COLORABLE_MARK_OLD]),color);
338 _color[COLORABLE_MARK_OLD] = *color;
340 gtk_color_button_get_color(GTK_COLOR_BUTTON
341 (cdi.col[COLORABLE_TRACK]),color);
342 _color[COLORABLE_TRACK] = *color;
344 gtk_color_button_get_color(GTK_COLOR_BUTTON
345 (cdi.col[COLORABLE_TRACK_MARK]),color);
346 _color[COLORABLE_TRACK_MARK] = *color;
348 gtk_color_button_get_color(GTK_COLOR_BUTTON
349 (cdi.col[COLORABLE_TRACK_BREAK]),color);
350 _color[COLORABLE_TRACK_BREAK] = *color;
352 gtk_color_button_get_color(GTK_COLOR_BUTTON
353 (cdi.col[COLORABLE_ROUTE]),color);
354 _color[COLORABLE_ROUTE] = *color;
356 gtk_color_button_get_color(GTK_COLOR_BUTTON
357 (cdi.col[COLORABLE_ROUTE_WAY]),color);
358 _color[COLORABLE_ROUTE_WAY] = *color;
360 gtk_color_button_get_color(GTK_COLOR_BUTTON
361 (cdi.col[COLORABLE_ROUTE_BREAK]),color);
362 _color[COLORABLE_ROUTE_BREAK] = *color;
364 gtk_color_button_get_color(GTK_COLOR_BUTTON
365 (cdi.col[COLORABLE_POI]),color);
366 _color[COLORABLE_POI] = *color;
372 gtk_widget_destroy(dialog);
374 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
379 * Bring up the Settings dialog. Return TRUE if and only if the recever
380 * information has changed (MAC or channel).
383 settings_dialog(void)
391 GtkWidget *txt_rcvr_mac;
392 GtkWidget *num_center_ratio;
393 GtkWidget *num_lead_ratio;
394 GtkWidget *num_announce_notice;
395 GtkWidget *chk_enable_voice;
396 GtkWidget *num_voice_speed;
397 GtkWidget *num_voice_pitch;
398 GtkWidget *lbl_voice_speed;
399 GtkWidget *lbl_voice_pitch;
400 GtkWidget *num_draw_width;
401 GtkWidget *chk_always_keep_on;
402 GtkWidget *cmb_units;
403 GtkWidget *cmb_degformat;
405 GtkWidget *btn_buttons;
406 GtkWidget *btn_colors;
408 GtkWidget *txt_mapper_db;
409 GtkWidget *btn_browsedb;
410 GtkWidget *num_poi_zoom;
411 GtkWidget *chk_speed_limit_on;
412 GtkWidget *num_speed;
413 GtkWidget *cmb_speed_location;
414 GtkWidget *cmb_info_font_size;
416 GtkWidget *chk_gps_filter;
417 GtkWidget *num_angle;
420 GtkWidget *num_osm_dist;
422 BrowseInfo browse_info = { 0, 0 };
423 ScanInfo scan_info = { 0 };
424 gboolean rcvr_changed = FALSE;
426 printf("%s()\n", __PRETTY_FUNCTION__);
428 dialog = gtk_dialog_new_with_buttons(_("Settings"),
430 GTK_DIALOG_MODAL, GTK_STOCK_OK,
431 GTK_RESPONSE_ACCEPT, NULL);
434 /* Enable the help button. */
435 ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
437 #ifdef WITH_DEVICE_770
438 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
439 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
440 g_signal_connect(G_OBJECT(btn_buttons), "clicked", G_CALLBACK(settings_dialog_hardkeys), dialog);
443 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
444 btn_colors = gtk_button_new_with_label(_("Colors...")));
446 gtk_dialog_add_button(GTK_DIALOG(dialog),
447 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
449 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
450 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
453 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
454 table = gtk_table_new(2, 3, FALSE),
455 label = gtk_label_new(_("GPS")));
457 /* Receiver MAC Address. */
458 gtk_table_attach(GTK_TABLE(table),
459 label = gtk_label_new(_("MAC")),
460 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
461 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
462 gtk_table_attach(GTK_TABLE(table),
463 hbox = gtk_hbox_new(FALSE, 4),
464 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
465 gtk_box_pack_start(GTK_BOX(hbox),
466 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
467 gtk_box_pack_start(GTK_BOX(hbox),
468 btn_scan = gtk_button_new_with_label(_("Scan...")),
472 gtk_table_attach(GTK_TABLE(table),
473 label = gtk_label_new(_
474 ("Note: You can enter a device path\n"
475 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
476 2, GTK_FILL, 0, 2, 4);
477 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
478 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
480 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
481 table = gtk_table_new(2, 5, FALSE),
482 label = gtk_label_new(_("Filter")));
484 gtk_table_attach(GTK_TABLE(table),
485 chk_gps_filter = gtk_check_button_new_with_label(_("Enable GPS track filter")),
486 0, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
487 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_gps_filter), _gps_filter);
489 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Horizontal")),
490 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
491 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
492 gtk_table_attach(GTK_TABLE(table), num_hdop = gtk_hscale_new_with_range(0, 200, 0.1),
493 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
495 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Vertical")),
496 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
497 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
498 gtk_table_attach(GTK_TABLE(table), num_vdop = gtk_hscale_new_with_range(0, 200, 0.1),
499 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
501 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Angle")),
502 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
503 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
504 gtk_table_attach(GTK_TABLE(table), num_angle = gtk_hscale_new_with_range(0, 45, 0.5),
505 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 2, 4);
507 /* Distance to OSM data */
508 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Distance to OSM Data")),
509 0, 1, 4, 5, GTK_FILL, 0, 2, 4);
510 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
511 gtk_table_attach(GTK_TABLE(table), num_osm_dist = gtk_hscale_new_with_range(0, 5000, 50),
512 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 2, 4);
514 /* Auto-Center page. */
515 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
516 table = gtk_table_new(2, 2, FALSE),
517 label = gtk_label_new(_("Auto-Center")));
519 /* Auto-Center Sensitivity. */
520 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
521 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
522 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
523 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
524 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
525 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
526 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
529 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
530 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
531 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
533 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
534 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
535 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
536 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
538 /* Announcement page */
539 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
540 table = gtk_table_new(2, 3, FALSE),
541 label = gtk_label_new(_("Announce")));
543 /* Announcement Advance Notice. */
544 gtk_table_attach(GTK_TABLE(table),
545 label = gtk_label_new(_("Advance Notice")),
546 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
547 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
548 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(),
549 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
550 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
551 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
554 gtk_table_attach(GTK_TABLE(table),
556 gtk_check_button_new_with_label(_
557 ("Enable Voice Synthesis (requires flite)")),
558 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
559 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
562 /* Voice Speed and Pitch. */
563 gtk_table_attach(GTK_TABLE(table),
564 hbox = gtk_hbox_new(FALSE, 12),
565 0, 2, 2, 3, 0, 0, 2, 6);
566 gtk_box_pack_start(GTK_BOX(hbox),
567 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
568 gtk_box_pack_start(GTK_BOX(hbox2),
569 lbl_voice_speed = gtk_label_new(_("Speed")),
571 gtk_box_pack_start(GTK_BOX(hbox2),
572 num_voice_speed = hildon_controlbar_new(),
574 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
575 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
577 gtk_box_pack_start(GTK_BOX(hbox),
578 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
579 gtk_box_pack_start(GTK_BOX(hbox2),
580 lbl_voice_pitch = gtk_label_new(_("Pitch")),
582 gtk_box_pack_start(GTK_BOX(hbox2),
583 num_voice_pitch = hildon_controlbar_new(),
585 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
586 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
588 /* Display settings page. */
589 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
590 table = gtk_table_new(2, 3, FALSE),
591 label = gtk_label_new(_("Display")));
594 gtk_table_attach(GTK_TABLE(table),
595 label = gtk_label_new(_("Line Width")),
596 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
597 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
598 gtk_table_attach(GTK_TABLE(table),
599 num_draw_width = hildon_controlbar_new(),
600 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
601 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
602 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
604 /* Keep Display On Only When Fullscreen. */
605 gtk_table_attach(GTK_TABLE(table),
607 gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
608 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
610 /* Information Font Size. */
611 gtk_table_attach(GTK_TABLE(table),
612 hbox = gtk_hbox_new(FALSE, 4),
613 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
614 gtk_box_pack_start(GTK_BOX(hbox),
615 label = gtk_label_new(_("Information Font Size")),
617 gtk_box_pack_start(GTK_BOX(hbox),
618 cmb_info_font_size = gtk_combo_box_new_text(),
620 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
621 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
625 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
626 table = gtk_table_new(2, 3, FALSE),
627 label = gtk_label_new(_("Units")));
630 gtk_table_attach(GTK_TABLE(table),
631 label = gtk_label_new(_("Units")),
632 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
633 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
634 gtk_table_attach(GTK_TABLE(table),
635 cmb_units = gtk_combo_box_new_text(),
636 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
637 for (i = 0; i < UNITS_ENUM_COUNT; i++)
638 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units),
642 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")),
643 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
644 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
645 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
646 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
647 gtk_container_add(GTK_CONTAINER(label),
648 cmb_degformat = gtk_combo_box_new_text());
649 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
650 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
653 gtk_table_attach(GTK_TABLE(table),
655 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
658 gtk_table_attach(GTK_TABLE(table),
659 hbox = gtk_hbox_new(FALSE, 4),
660 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
662 gtk_box_pack_start(GTK_BOX(hbox),
664 gtk_check_button_new_with_label(_("Speed Limit")),
667 gtk_box_pack_start(GTK_BOX(hbox),
668 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
670 gtk_container_add(GTK_CONTAINER(label),
671 num_speed = hildon_number_editor_new(0, 999));
673 gtk_box_pack_start(GTK_BOX(hbox),
674 label = gtk_label_new(_("Location")),
676 gtk_box_pack_start(GTK_BOX(hbox),
677 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
679 gtk_container_add(GTK_CONTAINER(label),
680 cmb_speed_location = gtk_combo_box_new_text());
681 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
682 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
683 SPEED_LOCATION_TEXT[i]);
686 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
687 table = gtk_table_new(2, 3, FALSE),
688 label = gtk_label_new(_("Database")));
691 gtk_table_attach(GTK_TABLE(table),
692 label = gtk_label_new(_("Database")),
693 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
694 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
695 gtk_table_attach(GTK_TABLE(table),
696 hbox = gtk_hbox_new(FALSE, 4),
697 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
698 gtk_box_pack_start(GTK_BOX(hbox),
699 txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
700 gtk_box_pack_start(GTK_BOX(hbox),
702 gtk_button_new_with_label(_("Browse...")), FALSE,
705 /* Show POI below zoom. */
706 gtk_table_attach(GTK_TABLE(table),
707 label = gtk_label_new(_("Show POI below zoom")),
708 0, 1, 2, 3, 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 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
712 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
713 gtk_container_add(GTK_CONTAINER(label),
714 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
716 /* Connect signals. */
717 scan_info.settings_dialog = dialog;
718 scan_info.txt_rcvr_mac = txt_rcvr_mac;
719 g_signal_connect(G_OBJECT(btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
720 g_signal_connect(G_OBJECT(btn_colors), "clicked", G_CALLBACK(settings_dialog_colors), dialog);
722 browse_info.dialog = dialog;
723 browse_info.txt = txt_mapper_db;
724 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
726 /* Initialize fields. */
728 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
731 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
733 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
735 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
737 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
739 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
740 _announce_notice_ratio);
741 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
742 (gint) (_voice_speed * 3 + 0.5));
743 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
745 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
747 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
749 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
750 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
751 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
753 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
754 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
755 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
756 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
758 gtk_range_set_value(num_hdop, _filter_hdop);
759 gtk_range_set_value(num_vdop, _filter_vdop);
760 gtk_range_set_value(num_angle, _filter_angle);
761 gtk_range_set_value(num_osm_dist, _filter_osm);
763 gtk_widget_show_all(dialog);
765 /* TODO: Uncomment the following hide function calls if moimart ever
766 * releases his dbus-based flite software. */
767 gtk_widget_hide(lbl_voice_speed);
768 gtk_widget_hide(num_voice_speed);
769 gtk_widget_hide(lbl_voice_pitch);
770 gtk_widget_hide(num_voice_pitch);
772 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
773 /* Set _rcvr_mac if necessary. */
774 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
775 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
780 gtk_widget_set_sensitive(GTK_WIDGET
781 (_menu_gps_details_item),
785 gtk_check_menu_item_set_active
786 (GTK_CHECK_MENU_ITEM(_menu_enable_gps_item),
789 _("No GPS Receiver MAC provided.\n"
790 "GPS will be disabled."));
792 gtk_widget_set_sensitive(GTK_WIDGET
793 (_menu_gps_details_item),
796 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
797 /* User specified a new rcvr mac. */
799 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
803 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
804 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
805 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
806 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
807 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
808 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
809 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
810 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
811 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
812 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
814 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
816 _voice_speed = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
817 _voice_pitch = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_pitch));
818 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
820 _filter_angle = gtk_range_get_value(GTK_RANGE(num_angle));
821 _filter_hdop = gtk_range_get_value(GTK_RANGE(num_hdop));
822 _filter_vdop = gtk_range_get_value(GTK_RANGE(num_vdop));
823 _filter_osm = gtk_range_get_value(GTK_RANGE(num_osm_dist));
824 _gps_filter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_gps_filter));
827 mapper_db_disconnect(&_db);
831 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
832 _mapper_db = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
833 mapper_db_connect(&_db, _mapper_db);
838 /* Sensitize menus based on whether we have a database conn. */
839 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
840 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
841 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
842 gtk_widget_set_sensitive(_menu_poi_item, _db != NULL);
844 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
853 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
854 gtk_widget_destroy(dialog);
856 gtk_widget_hide(dialog);
859 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);