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"
41 #define UPDATE_GC(gc) \
42 gdk_gc_set_line_attributes(gc, _draw_width, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
47 printf("%s()\n", __PRETTY_FUNCTION__);
49 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
50 gdk_color_alloc(gtk_widget_get_colormap(_map_widget),
53 g_object_unref(_gc[i]);
54 _gc[i] = gdk_gc_new(_map_pixmap);
55 gdk_gc_set_foreground(_gc[i], &_color[i]);
56 gdk_gc_set_line_attributes(_gc[i],
57 _draw_width, GDK_LINE_SOLID,
58 GDK_CAP_ROUND, GDK_JOIN_ROUND);
61 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
65 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
69 printf("%s()\n", __PRETTY_FUNCTION__);
71 dialog = GTK_WIDGET(hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),
72 GTK_FILE_CHOOSER_ACTION_OPEN));
74 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
75 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
76 gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
78 res=gtk_dialog_run(GTK_DIALOG(dialog));
79 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
80 gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
81 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
85 gtk_widget_destroy(dialog);
87 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
91 typedef struct _KeysDialogInfo KeysDialogInfo;
92 struct _KeysDialogInfo {
93 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
97 settings_dialog_hardkeys_reset(GtkWidget * widget, KeysDialogInfo * cdi)
100 printf("%s()\n", __PRETTY_FUNCTION__);
102 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
103 _("Reset all hardware keys to their original defaults?"));
105 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
107 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
108 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]),
109 CUSTOM_KEY_DEFAULT[i]);
111 gtk_widget_destroy(confirm);
113 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
118 settings_dialog_hardkeys(GtkWidget * widget, GtkWidget * parent)
125 GtkWidget *btn_defaults;
126 printf("%s()\n", __PRETTY_FUNCTION__);
128 dialog = gtk_dialog_new_with_buttons(_("Hardware Keys"),
130 GTK_DIALOG_MODAL, GTK_STOCK_OK,
131 GTK_RESPONSE_ACCEPT, NULL);
133 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
134 btn_defaults = gtk_button_new_with_label(_("Reset...")));
135 g_signal_connect(G_OBJECT(btn_defaults), "clicked",
136 G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
138 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
140 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
141 table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
143 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
145 gtk_table_attach(GTK_TABLE(table),
146 label = gtk_label_new(""),
147 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
148 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
150 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
152 gtk_table_attach(GTK_TABLE(table),
153 bdi.cmb[i] = gtk_combo_box_new_text(),
154 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
155 for (j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
156 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]),
157 CUSTOM_ACTION_TEXT[j]);
158 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
161 gtk_widget_show_all(dialog);
164 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
165 /* Check for duplicates. */
166 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
168 for (j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
169 if (gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))
170 == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j]))) {
173 g_strdup_printf("%s:\n %s\n%s",
174 _("The following action is mapped to multiple keys"),
176 [gtk_combo_box_get_active
181 hildon_note_new_confirmation
182 (GTK_WINDOW(_window), buffer);
184 if (GTK_RESPONSE_OK !=
185 gtk_dialog_run(GTK_DIALOG(confirm)))
187 gtk_widget_destroy(confirm);
190 gtk_widget_destroy(confirm);
194 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
196 gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
200 gtk_widget_destroy(dialog);
202 vprintf("%s(): return\n", __PRETTY_FUNCTION__);
206 typedef struct _ColorsDialogInfo ColorsDialogInfo;
207 struct _ColorsDialogInfo {
208 GtkWidget *col[COLORABLE_ENUM_COUNT];
212 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
215 printf("%s()\n", __PRETTY_FUNCTION__);
217 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 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
341 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
342 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
343 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
344 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
345 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
346 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),&_color[COLORABLE_TRACK_BREAK]);
347 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),&_color[COLORABLE_ROUTE]);
348 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),&_color[COLORABLE_ROUTE_WAY]);
349 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),&_color[COLORABLE_ROUTE_BREAK]);
350 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]),&_color[COLORABLE_POI]);
355 gtk_widget_destroy(dialog);
357 vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
362 * Bring up the Settings dialog. Return TRUE if and only if the recever
363 * information has changed (MAC or channel).
366 settings_dialog(void)
374 GtkWidget *txt_rcvr_mac;
375 GtkWidget *num_center_ratio;
376 GtkWidget *num_lead_ratio;
377 GtkWidget *num_announce_notice;
378 GtkWidget *chk_enable_voice;
379 GtkWidget *num_voice_speed;
380 GtkWidget *num_voice_pitch;
381 GtkWidget *lbl_voice_speed;
382 GtkWidget *lbl_voice_pitch;
383 GtkWidget *num_draw_width;
384 GtkWidget *chk_always_keep_on;
385 GtkWidget *cmb_units;
386 GtkWidget *cmb_degformat;
388 GtkWidget *btn_buttons;
389 GtkWidget *btn_colors;
391 GtkWidget *txt_mapper_db;
392 GtkWidget *btn_browsedb;
393 GtkWidget *num_poi_zoom;
394 GtkWidget *chk_speed_limit_on;
395 GtkWidget *num_speed;
396 GtkWidget *cmb_speed_location;
397 GtkWidget *cmb_info_font_size;
399 BrowseInfo browse_info = { 0, 0 };
400 ScanInfo scan_info = { 0 };
401 gboolean rcvr_changed = FALSE;
403 printf("%s()\n", __PRETTY_FUNCTION__);
405 dialog = gtk_dialog_new_with_buttons(_("Settings"),
407 GTK_DIALOG_MODAL, GTK_STOCK_OK,
408 GTK_RESPONSE_ACCEPT, NULL);
410 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS);
412 #ifdef WITH_DEVICE_770
413 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
414 btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
415 g_signal_connect(G_OBJECT(btn_buttons), "clicked", G_CALLBACK(settings_dialog_hardkeys), dialog);
418 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
419 btn_colors = gtk_button_new_with_label(_("Colors...")));
421 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
423 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
424 notebook = gtk_notebook_new(), TRUE, TRUE, 0);
427 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
428 table = gtk_table_new(2, 3, FALSE),
429 label = gtk_label_new(_("GPS")));
431 /* Receiver MAC Address. */
432 gtk_table_attach(GTK_TABLE(table),
433 label = gtk_label_new(_("MAC")),
434 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
435 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
436 gtk_table_attach(GTK_TABLE(table),
437 hbox = gtk_hbox_new(FALSE, 4),
438 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
439 gtk_box_pack_start(GTK_BOX(hbox),
440 txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
441 gtk_box_pack_start(GTK_BOX(hbox),
442 btn_scan = gtk_button_new_with_label(_("Scan...")),
446 gtk_table_attach(GTK_TABLE(table),
447 label = gtk_label_new(_
448 ("Note: You can enter a device path\n"
449 "(e.g. \"/dev/rfcomm0\").")), 0, 2, 1,
450 2, GTK_FILL, 0, 2, 4);
451 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
452 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
455 /* Auto-Center page. */
456 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
457 table = gtk_table_new(2, 2, FALSE),
458 label = gtk_label_new(_("Auto-Center")));
460 /* Auto-Center Sensitivity. */
461 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")),
462 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
463 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
464 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(),
465 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
466 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
467 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
470 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")),
471 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
472 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
474 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(),
475 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
476 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
477 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
479 /* Announcement page */
480 gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
481 table = gtk_table_new(2, 3, FALSE),
482 label = gtk_label_new(_("Announce")));
484 /* Announcement Advance Notice. */
485 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Advance Notice")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
486 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
487 gtk_table_attach(GTK_TABLE(table), num_announce_notice = hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
488 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
489 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
492 gtk_table_attach(GTK_TABLE(table),
493 chk_enable_voice = gtk_check_button_new_with_label(_("Enable Voice Synthesis")),
494 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
495 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice), _enable_voice);
497 /* Voice Speed and Pitch. */
498 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 12), 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 6);
499 gtk_box_pack_start(GTK_BOX(hbox), hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
500 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_speed = gtk_label_new(_("Speed (words/minute)")), TRUE, TRUE, 0);
501 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_speed = hildon_number_editor_new(80, 370), TRUE, TRUE, 0);
503 gtk_box_pack_start(GTK_BOX(hbox), hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
504 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_pitch = gtk_label_new(_("Pitch")), TRUE, TRUE, 0);
505 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_pitch = hildon_number_editor_new(1, 99), TRUE, TRUE, 0);
507 /* Display settings page. */
508 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Display")));
511 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Line Width")), 0, 1, 0, 1, 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_draw_width = hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
514 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
515 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
517 /* Keep Display On Only When Fullscreen. */
518 gtk_table_attach(GTK_TABLE(table),
519 chk_always_keep_on = gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")),
520 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
522 /* Information Font Size. */
523 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
524 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_label_new(_("Information Font Size")), FALSE, FALSE, 0);
525 gtk_box_pack_start(GTK_BOX(hbox), cmb_info_font_size = gtk_combo_box_new_text(), FALSE, FALSE, 0);
526 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
527 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size), INFO_FONT_TEXT[i]);
530 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Units")));
533 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Units")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
534 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
535 gtk_table_attach(GTK_TABLE(table), cmb_units = gtk_combo_box_new_text(), 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
536 for (i = 0; i < UNITS_ENUM_COUNT; i++)
537 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units), UNITS_TEXT[i]);
540 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
541 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
542 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), 1, 2, 1, 2, GTK_FILL, 0, 2, 4);
543 gtk_container_add(GTK_CONTAINER(label), cmb_degformat = gtk_combo_box_new_text());
544 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
545 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat), DEG_FORMAT_TEXT[i]);
547 gtk_table_attach(GTK_TABLE(table), gtk_label_new(""), 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
550 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
552 gtk_box_pack_start(GTK_BOX(hbox), chk_speed_limit_on = gtk_check_button_new_with_label(_("Speed Limit")), FALSE, FALSE, 0);
554 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), FALSE, FALSE, 0);
555 gtk_container_add(GTK_CONTAINER(label), num_speed = hildon_number_editor_new(0, 999));
557 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_label_new(_("Location")), FALSE, FALSE, 0);
558 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), FALSE, FALSE, 0);
559 gtk_container_add(GTK_CONTAINER(label), cmb_speed_location = gtk_combo_box_new_text());
560 for (i = 0; i < SPEED_LOCATION_ENUM_COUNT; i++)
561 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_speed_location),
562 SPEED_LOCATION_TEXT[i]);
565 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Database")));
568 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Database")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
569 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
570 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
571 gtk_box_pack_start(GTK_BOX(hbox), txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
572 gtk_box_pack_start(GTK_BOX(hbox), btn_browsedb = gtk_button_new_with_label(_("Browse...")), FALSE, FALSE, 0);
574 /* Show POI below zoom. */
575 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Show POI below zoom")), 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
576 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
577 gtk_table_attach(GTK_TABLE(table), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
578 gtk_container_add(GTK_CONTAINER(label), num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
580 /* Connect signals. */
581 scan_info.settings_dialog = dialog;
582 scan_info.txt_rcvr_mac = txt_rcvr_mac;
583 g_signal_connect(G_OBJECT(btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
584 g_signal_connect(G_OBJECT(btn_colors), "clicked", G_CALLBACK(settings_dialog_colors), dialog);
586 browse_info.dialog = dialog;
587 browse_info.txt = txt_mapper_db;
588 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
590 /* Initialize fields. */
592 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
595 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db);
597 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom), _poi_zoom);
598 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio), _center_ratio);
599 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio), _lead_ratio);
600 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice), _announce_notice_ratio);
601 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_speed), _voice_speed);
602 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_pitch), _voice_pitch);
603 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width), _draw_width);
604 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on), !_always_keep_on);
605 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
606 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
607 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on), _speed_limit_on);
608 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
609 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
610 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_speed_location), _speed_location);
611 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
613 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
614 gtk_widget_show_all(dialog);
616 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
617 /* Set _rcvr_mac if necessary. */
618 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
619 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
624 set_action_sensitive("gps_details", FALSE);
627 set_action_activate("gps_details", FALSE);
628 popup_error(dialog, _("No GPS Receiver MAC provided.\nGPS will be disabled."));
630 set_action_sensitive("gps_details", FALSE);
632 } else if (!_rcvr_mac || strcmp(_rcvr_mac, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
633 /* User specified a new rcvr mac. */
635 _rcvr_mac = g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
639 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
640 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
641 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
642 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
643 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
644 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
645 _speed_limit_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_limit_on));
646 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
647 _speed_location = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_speed_location));
648 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
650 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
652 _voice_speed = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_speed));
653 _voice_pitch = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_pitch));
654 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
656 speak_set_parameters(_voice_speed, _voice_pitch);
665 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))) {
666 _mapper_db=g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
667 db_connect(&_db, _mapper_db);
674 /* Sensitize menus based on whether we have a database conn. */
675 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
676 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
677 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
679 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
687 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
688 gtk_widget_destroy(dialog);
690 gtk_widget_hide(dialog);
693 vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);