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(GTK_COMBO_BOX(bdi.cmb[i]))
150 == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j]))) {
153 g_strdup_printf("%s:\n %s\n%s",
154 _("The following action is mapped to multiple keys"),
156 [gtk_combo_box_get_active
161 hildon_note_new_confirmation
162 (GTK_WINDOW(_window), buffer);
164 if (GTK_RESPONSE_OK !=
165 gtk_dialog_run(GTK_DIALOG(confirm)))
167 gtk_widget_destroy(confirm);
170 gtk_widget_destroy(confirm);
174 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
176 gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
180 gtk_widget_destroy(dialog);
182 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
186 typedef struct _ColorsDialogInfo ColorsDialogInfo;
187 struct _ColorsDialogInfo {
188 GtkWidget *col[COLORABLE_ENUM_COUNT];
192 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
195 printf("%s()\n", __PRETTY_FUNCTION__);
197 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
199 ("Reset all colors to their original defaults?"));
201 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
203 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
204 gtk_color_button_set_color(GTK_COLOR_BUTTON
206 &COLORABLE_DEFAULT[i]);
209 gtk_widget_destroy(confirm);
211 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
216 settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
221 GtkWidget *btn_defaults;
222 ColorsDialogInfo cdi;
223 printf("%s()\n", __PRETTY_FUNCTION__);
225 dialog = gtk_dialog_new_with_buttons(_("Colors"),
227 GTK_DIALOG_MODAL, GTK_STOCK_OK,
228 GTK_RESPONSE_ACCEPT, NULL);
230 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
231 btn_defaults = gtk_button_new_with_label(_("Reset...")));
232 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
233 G_CALLBACK(settings_dialog_colors_reset), &cdi);
235 gtk_dialog_add_button(GTK_DIALOG(dialog),
236 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
238 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
239 table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
242 gtk_table_attach(GTK_TABLE(table),
243 label = gtk_label_new(_("GPS")),
244 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
245 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
246 gtk_table_attach(GTK_TABLE(table),
247 cdi.col[COLORABLE_MARK] = gtk_color_button_new(),
248 1, 2, 0, 1, 0, 0, 2, 4);
249 gtk_color_button_set_color(GTK_COLOR_BUTTON
250 (cdi.col[COLORABLE_MARK]),
251 &_color[COLORABLE_MARK]);
252 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] =
253 gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
254 gtk_color_button_set_color(GTK_COLOR_BUTTON
255 (cdi.col[COLORABLE_MARK_VELOCITY]),
256 &_color[COLORABLE_MARK_VELOCITY]);
257 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] =
258 gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
259 gtk_color_button_set_color(GTK_COLOR_BUTTON
260 (cdi.col[COLORABLE_MARK_OLD]),
261 &_color[COLORABLE_MARK_OLD]);
264 gtk_table_attach(GTK_TABLE(table),
265 label = gtk_label_new(_("Track")),
266 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
267 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
268 gtk_table_attach(GTK_TABLE(table),
269 cdi.col[COLORABLE_TRACK] = gtk_color_button_new(),
270 1, 2, 1, 2, 0, 0, 2, 4);
271 gtk_color_button_set_color(GTK_COLOR_BUTTON
272 (cdi.col[COLORABLE_TRACK]),
273 &_color[COLORABLE_TRACK]);
274 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] =
275 gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
276 gtk_color_button_set_color(GTK_COLOR_BUTTON
277 (cdi.col[COLORABLE_TRACK_MARK]),
278 &_color[COLORABLE_TRACK_MARK]);
279 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] =
280 gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
281 gtk_color_button_set_color(GTK_COLOR_BUTTON
282 (cdi.col[COLORABLE_TRACK_BREAK]),
283 &_color[COLORABLE_TRACK_BREAK]);
286 gtk_table_attach(GTK_TABLE(table),
287 label = gtk_label_new(_("Route")),
288 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
289 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
290 gtk_table_attach(GTK_TABLE(table),
291 cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(),
292 1, 2, 2, 3, 0, 0, 2, 4);
293 gtk_color_button_set_color(GTK_COLOR_BUTTON
294 (cdi.col[COLORABLE_ROUTE]),
295 &_color[COLORABLE_ROUTE]);
296 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] =
297 gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
298 gtk_color_button_set_color(GTK_COLOR_BUTTON
299 (cdi.col[COLORABLE_ROUTE_WAY]),
300 &_color[COLORABLE_ROUTE_WAY]);
301 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] =
302 gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
303 gtk_color_button_set_color(GTK_COLOR_BUTTON
304 (cdi.col[COLORABLE_ROUTE_BREAK]),
305 &_color[COLORABLE_ROUTE_BREAK]);
308 gtk_table_attach(GTK_TABLE(table),
309 label = gtk_label_new(_("POI")),
310 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
311 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
312 gtk_table_attach(GTK_TABLE(table),
313 cdi.col[COLORABLE_POI] = gtk_color_button_new(),
314 1, 2, 3, 4, 0, 0, 2, 4);
315 gtk_color_button_set_color(GTK_COLOR_BUTTON
316 (cdi.col[COLORABLE_POI]),
317 &_color[COLORABLE_POI]);
319 gtk_widget_show_all(dialog);
321 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
322 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
323 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
324 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
325 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
326 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
327 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),&_color[COLORABLE_TRACK_BREAK]);
328 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),&_color[COLORABLE_ROUTE]);
329 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),&_color[COLORABLE_ROUTE_WAY]);
330 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),&_color[COLORABLE_ROUTE_BREAK]);
331 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]),&_color[COLORABLE_POI]);
336 gtk_widget_destroy(dialog);
338 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
343 * Bring up the Settings dialog. Return TRUE if and only if the recever
344 * information has changed (MAC or channel).
347 settings_dialog(void)
355 GtkWidget *txt_rcvr_mac;
356 GtkWidget *num_center_ratio;
357 GtkWidget *num_lead_ratio;
358 GtkWidget *num_announce_notice;
359 GtkWidget *chk_enable_voice;
360 GtkWidget *num_voice_speed;
361 GtkWidget *num_voice_pitch;
362 GtkWidget *lbl_voice_speed;
363 GtkWidget *lbl_voice_pitch;
364 GtkWidget *num_draw_width;
365 GtkWidget *chk_always_keep_on;
366 GtkWidget *cmb_units;
367 GtkWidget *cmb_degformat;
369 GtkWidget *btn_buttons;
370 GtkWidget *btn_colors;
372 GtkWidget *txt_mapper_db;
373 GtkWidget *btn_browsedb;
374 GtkWidget *num_poi_zoom;
375 GtkWidget *chk_speed_limit_on;
376 GtkWidget *num_speed;
377 GtkWidget *cmb_speed_location;
378 GtkWidget *cmb_info_font_size;
380 BrowseInfo browse_info = { 0, 0 };
381 ScanInfo scan_info = { 0 };
382 gboolean rcvr_changed = FALSE;
384 printf("%s()\n", __PRETTY_FUNCTION__);
386 dialog = gtk_dialog_new_with_buttons(_("Settings"),
388 GTK_DIALOG_MODAL, GTK_STOCK_OK,
389 GTK_RESPONSE_ACCEPT, NULL);
392 /* Enable the help button. */
393 ossohelp_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
395 #ifdef WITH_DEVICE_770
396 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
397 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
398 g_signal_connect(G_OBJECT(btn_buttons), "clicked", G_CALLBACK(settings_dialog_hardkeys), dialog);
401 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
402 btn_colors = gtk_button_new_with_label(_("Colors...")));
404 gtk_dialog_add_button(GTK_DIALOG(dialog),
405 GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
407 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
408 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
411 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
412 table = gtk_table_new(2, 3, FALSE),
413 label = gtk_label_new(_("GPS")));
415 /* Receiver MAC Address. */
416 gtk_table_attach(GTK_TABLE(table),
417 label = gtk_label_new(_("MAC")),
418 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
419 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
420 gtk_table_attach(GTK_TABLE(table),
421 hbox = gtk_hbox_new(FALSE, 4),
422 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
423 gtk_box_pack_start(GTK_BOX(hbox),
424 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
425 gtk_box_pack_start(GTK_BOX(hbox),
426 btn_scan = gtk_button_new_with_label(_("Scan...")),
430 gtk_table_attach(GTK_TABLE(table),
431 label = gtk_label_new(_
432 ("Note: You can enter a device path\n"
433 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
434 2, GTK_FILL, 0, 2, 4);
435 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
436 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
439 /* Auto-Center page. */
440 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
441 table = gtk_table_new(2, 2, FALSE),
442 label = gtk_label_new(_("Auto-Center")));
444 /* Auto-Center Sensitivity. */
445 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
446 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
447 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
448 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
449 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
450 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
451 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
454 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
455 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
456 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
458 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
459 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
460 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
461 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
463 /* Announcement page */
464 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
465 table = gtk_table_new(2, 3, FALSE),
466 label = gtk_label_new(_("Announce")));
468 /* Announcement Advance Notice. */
469 gtk_table_attach(GTK_TABLE(table),
470 label = gtk_label_new(_("Advance Notice")),
471 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
472 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
473 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(),
474 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
475 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
476 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
479 gtk_table_attach(GTK_TABLE(table),
480 chk_enable_voice = gtk_check_button_new_with_label(_("Enable Voice Synthesis")),
481 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
482 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
485 /* Voice Speed and Pitch. */
486 gtk_table_attach(GTK_TABLE(table),
487 hbox = gtk_hbox_new(FALSE, 12),
488 0, 2, 2, 3, 0, 0, 2, 6);
489 gtk_box_pack_start(GTK_BOX(hbox),
490 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
491 gtk_box_pack_start(GTK_BOX(hbox2),
492 lbl_voice_speed = gtk_label_new(_("Speed")),
494 gtk_box_pack_start(GTK_BOX(hbox2),
495 num_voice_speed = hildon_controlbar_new(),
497 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
498 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
500 gtk_box_pack_start(GTK_BOX(hbox),
501 hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
502 gtk_box_pack_start(GTK_BOX(hbox2),
503 lbl_voice_pitch = gtk_label_new(_("Pitch")),
505 gtk_box_pack_start(GTK_BOX(hbox2),
506 num_voice_pitch = hildon_controlbar_new(),
508 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
509 force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
511 /* Display settings page. */
512 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
513 table = gtk_table_new(2, 3, FALSE),
514 label = gtk_label_new(_("Display")));
517 gtk_table_attach(GTK_TABLE(table),
518 label = gtk_label_new(_("Line Width")),
519 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
520 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
521 gtk_table_attach(GTK_TABLE(table),
522 num_draw_width = hildon_controlbar_new(),
523 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
524 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
525 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
527 /* Keep Display On Only When Fullscreen. */
528 gtk_table_attach(GTK_TABLE(table),
530 gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
531 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
533 /* Information Font Size. */
534 gtk_table_attach(GTK_TABLE(table),
535 hbox = gtk_hbox_new(FALSE, 4),
536 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
537 gtk_box_pack_start(GTK_BOX(hbox),
538 label = gtk_label_new(_("Information Font Size")),
540 gtk_box_pack_start(GTK_BOX(hbox),
541 cmb_info_font_size = gtk_combo_box_new_text(),
543 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
544 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size),
548 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
549 table = gtk_table_new(2, 3, FALSE),
550 label = gtk_label_new(_("Units")));
553 gtk_table_attach(GTK_TABLE(table),
554 label = gtk_label_new(_("Units")),
555 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
556 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
557 gtk_table_attach(GTK_TABLE(table),
558 cmb_units = gtk_combo_box_new_text(),
559 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
560 for (i = 0; i < UNITS_ENUM_COUNT; i++)
561 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units),
565 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")),
566 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
567 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
568 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
569 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
570 gtk_container_add(GTK_CONTAINER(label),
571 cmb_degformat = gtk_combo_box_new_text());
572 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
573 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
576 gtk_table_attach(GTK_TABLE(table),
578 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
581 gtk_table_attach(GTK_TABLE(table),
582 hbox = gtk_hbox_new(FALSE, 4),
583 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
585 gtk_box_pack_start(GTK_BOX(hbox),
587 gtk_check_button_new_with_label(_("Speed Limit")),
590 gtk_box_pack_start(GTK_BOX(hbox),
591 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
593 gtk_container_add(GTK_CONTAINER(label),
594 num_speed = hildon_number_editor_new(0, 999));
596 gtk_box_pack_start(GTK_BOX(hbox),
597 label = gtk_label_new(_("Location")),
599 gtk_box_pack_start(GTK_BOX(hbox),
600 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
602 gtk_container_add(GTK_CONTAINER(label),
603 cmb_speed_location = gtk_combo_box_new_text());
604 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
605 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
606 SPEED_LOCATION_TEXT[i]);
609 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
610 table = gtk_table_new(2, 3, FALSE),
611 label = gtk_label_new(_("Database")));
614 gtk_table_attach(GTK_TABLE(table),
615 label = gtk_label_new(_("Database")),
616 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
617 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
618 gtk_table_attach(GTK_TABLE(table),
619 hbox = gtk_hbox_new(FALSE, 4),
620 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
621 gtk_box_pack_start(GTK_BOX(hbox),
622 txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
623 gtk_box_pack_start(GTK_BOX(hbox),
625 gtk_button_new_with_label(_("Browse...")), FALSE,
628 /* Show POI below zoom. */
629 gtk_table_attach(GTK_TABLE(table),
630 label = gtk_label_new(_("Show POI below zoom")),
631 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
632 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
633 gtk_table_attach(GTK_TABLE(table),
634 label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
635 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
636 gtk_container_add(GTK_CONTAINER(label),
637 num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
639 /* Connect signals. */
640 scan_info.settings_dialog = dialog;
641 scan_info.txt_rcvr_mac = txt_rcvr_mac;
642 g_signal_connect(G_OBJECT(btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
643 g_signal_connect(G_OBJECT(btn_colors), "clicked", G_CALLBACK(settings_dialog_colors), dialog);
645 browse_info.dialog = dialog;
646 browse_info.txt = txt_mapper_db;
647 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
649 /* Initialize fields. */
651 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
654 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
656 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom),
658 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio),
660 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio),
662 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
663 _announce_notice_ratio);
664 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
665 (gint) (_voice_speed * 3 + 0.5));
666 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
668 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width),
670 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
672 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
673 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
674 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on),
676 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
677 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
678 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
679 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
681 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
682 gtk_widget_show_all(dialog);
684 /* TODO: Uncomment the following hide function calls if moimart ever
685 * releases his dbus-based flite software. */
686 gtk_widget_hide(lbl_voice_speed);
687 gtk_widget_hide(num_voice_speed);
688 gtk_widget_hide(lbl_voice_pitch);
689 gtk_widget_hide(num_voice_pitch);
691 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
692 /* Set _rcvr_mac if necessary. */
693 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
694 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
699 gtk_widget_set_sensitive(GTK_WIDGET
700 (_menu_gps_details_item),
704 gtk_check_menu_item_set_active
705 (GTK_CHECK_MENU_ITEM(_menu_enable_gps_item),
708 _("No GPS Receiver MAC provided.\n"
709 "GPS will be disabled."));
711 gtk_widget_set_sensitive(GTK_WIDGET
712 (_menu_gps_details_item),
715 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
716 /* User specified a new rcvr mac. */
718 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
722 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
723 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
724 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
725 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
726 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
727 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
728 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
729 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
730 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
731 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
733 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
735 _voice_speed = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
736 _voice_pitch = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_voice_pitch));
737 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
741 mapper_db_disconnect(&_db);
745 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
746 _mapper_db = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
747 mapper_db_connect(&_db, _mapper_db);
752 /* Sensitize menus based on whether we have a database conn. */
753 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
754 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
755 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
756 gtk_widget_set_sensitive(_menu_poi_item, _db != NULL);
758 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
766 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
767 gtk_widget_destroy(dialog);
769 gtk_widget_hide(dialog);
772 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);