12 #include <glib/gstdio.h>
19 #include "hildon-mapper.h"
25 #include "mapper-types.h"
27 #include "ui-common.h"
30 #include "bluetooth-scan.h"
31 #include "hildon-wrappers.h"
34 #include "settings-gui.h"
36 typedef struct _KeysDialogInfo KeysDialogInfo;
37 struct _KeysDialogInfo {
38 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
41 #define UPDATE_GC(gc) gdk_gc_set_line_attributes(gc, _draw_width, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
48 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
49 gdk_color_alloc(gtk_widget_get_colormap(_map_widget),&_color[i]);
51 g_object_unref(_gc[i]);
52 _gc[i] = gdk_gc_new(_map_pixmap);
53 gdk_gc_set_foreground(_gc[i], &_color[i]);
54 gdk_gc_set_line_attributes(_gc[i], _draw_width, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
60 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
65 dialog = GTK_WIDGET(hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),GTK_FILE_CHOOSER_ACTION_OPEN));
67 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
68 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
70 res=gtk_dialog_run(GTK_DIALOG(dialog));
71 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
72 gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
73 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
77 gtk_widget_destroy(dialog);
83 settings_dialog_hardkeys_reset(GtkWidget * widget, KeysDialogInfo * cdi)
87 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window), _("Reset all hardware keys to their original defaults?"));
89 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
91 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
92 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]), CUSTOM_KEY_DEFAULT[i]);
94 gtk_widget_destroy(confirm);
99 settings_dialog_hardkeys(GtkWidget * widget, GtkWidget * parent)
106 GtkWidget *btn_defaults;
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), btn_defaults = gtk_button_new_with_label(_("Reset...")));
114 g_signal_connect(G_OBJECT(btn_defaults), "clicked", G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
116 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
117 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table = gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
119 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
121 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(""), 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
122 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
124 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
126 gtk_table_attach(GTK_TABLE(table), bdi.cmb[i] = gtk_combo_box_new_text(), 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
127 for (j = 0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
128 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]), CUSTOM_ACTION_TEXT[j]);
129 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
132 gtk_widget_show_all(dialog);
135 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
136 /* Check for duplicates. */
137 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
139 for (j = i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
140 if (gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i])) == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j]))) {
142 gchar *buffer = g_strdup_printf("%s:\n %s\n%s", _("The following action is mapped to multiple keys"),
143 CUSTOM_ACTION_TEXT[gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))], _("Continue?"));
144 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window), buffer);
146 if (GTK_RESPONSE_OK != gtk_dialog_run(GTK_DIALOG(confirm)))
148 gtk_widget_destroy(confirm);
151 gtk_widget_destroy(confirm);
155 for (i = 0; i < CUSTOM_KEY_ENUM_COUNT; i++)
156 _action[i] = gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
160 gtk_widget_destroy(dialog);
165 typedef struct _ColorsDialogInfo ColorsDialogInfo;
166 struct _ColorsDialogInfo {
167 GtkWidget *col[COLORABLE_ENUM_COUNT];
171 settings_dialog_colors_reset(GtkWidget * widget, ColorsDialogInfo * cdi)
175 confirm = hildon_note_new_confirmation(GTK_WINDOW(_window),
176 _("Reset all colors to their original defaults?"));
178 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
180 for (i = 0; i < COLORABLE_ENUM_COUNT; i++) {
181 gtk_color_button_set_color(GTK_COLOR_BUTTON
182 (cdi->col[i]), &COLORABLE_DEFAULT[i]);
185 gtk_widget_destroy(confirm);
191 settings_dialog_colors(GtkWidget * widget, GtkWidget * parent)
196 GtkWidget *btn_defaults;
197 ColorsDialogInfo cdi;
199 dialog = gtk_dialog_new_with_buttons(_("Colors"), GTK_WINDOW(parent), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
201 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_defaults = gtk_button_new_with_label(_("Reset...")));
202 g_signal_connect(G_OBJECT(btn_defaults), "clicked", G_CALLBACK(settings_dialog_colors_reset), &cdi);
204 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
205 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table = gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
208 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("GPS")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
209 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
210 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK] = gtk_color_button_new(), 1, 2, 0, 1, 0, 0, 2, 4);
211 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
212 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY] = gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
213 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
214 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD] = gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
215 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
218 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Track")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
219 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
220 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK] = gtk_color_button_new(), 1, 2, 1, 2, 0, 0, 2, 4);
221 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
222 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK] = gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
223 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
224 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK] = gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
225 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]), &_color[COLORABLE_TRACK_BREAK]);
228 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Route")), 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
229 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
230 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE] = gtk_color_button_new(), 1, 2, 2, 3, 0, 0, 2, 4);
231 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]), &_color[COLORABLE_ROUTE]);
232 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY] = gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
233 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]), &_color[COLORABLE_ROUTE_WAY]);
234 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK] = gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
235 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]), &_color[COLORABLE_ROUTE_BREAK]);
238 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("POI")), 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
239 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
240 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_POI] = gtk_color_button_new(), 1, 2, 3, 4, 0, 0, 2, 4);
241 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]), &_color[COLORABLE_POI]);
243 gtk_widget_show_all(dialog);
244 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
245 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
246 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
247 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
248 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
249 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
250 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),&_color[COLORABLE_TRACK_BREAK]);
251 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),&_color[COLORABLE_ROUTE]);
252 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),&_color[COLORABLE_ROUTE_WAY]);
253 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),&_color[COLORABLE_ROUTE_BREAK]);
254 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]),&_color[COLORABLE_POI]);
258 gtk_widget_destroy(dialog);
264 settings_dialog_gps(void)
271 GtkWidget *txt_rcvr_mac;
273 ScanInfo scan_info = { 0 };
274 gboolean rcvr_changed=TRUE;
276 dialog = gtk_dialog_new_with_buttons(_("GPS Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL,
277 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
278 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS_GPS);
280 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook = gtk_notebook_new(), TRUE, TRUE, 0);
283 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("GPS")));
285 /* Receiver MAC Address. */
286 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("MAC")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
287 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
288 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
289 gtk_box_pack_start(GTK_BOX(hbox), txt_rcvr_mac = gtk_entry_new(), TRUE, TRUE, 0);
290 gtk_box_pack_start(GTK_BOX(hbox), btn_scan = gtk_button_new_with_label(_("Scan...")), FALSE, FALSE, 0);
293 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Note: You can enter a device path\n""(e.g. \"/dev/rfcomm0\").")), 0, 2, 1, 2, GTK_FILL, 0, 2, 4);
294 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
295 gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
297 /* Connect signals. */
298 scan_info.settings_dialog = dialog;
299 scan_info.txt_rcvr_mac = txt_rcvr_mac;
300 g_signal_connect(G_OBJECT(btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
301 gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _gps->io.address ? _gps->io.address : "");
303 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
304 gtk_widget_show_all(dialog);
306 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
307 /* Set _rcvr_mac if necessary. */
308 if (!*gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac))) {
309 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
310 if (_gps->io.address) {
311 g_free(_gps->io.address);
312 _gps->io.address=NULL;
314 set_action_sensitive("gps_details", FALSE);
317 set_action_activate("gps_details", FALSE);
318 popup_error(dialog, _("No GPS Receiver MAC provided.\nGPS will be disabled."));
320 set_action_sensitive("gps_details", FALSE);
322 } else if (!_gps->io.address || strcmp(_gps->io.address, gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)))) {
323 /* User specified a new rcvr mac. */
324 g_free(_gps->io.address);
325 _gps->io.address=g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_rcvr_mac)));
329 /* Sensitize menus based on whether we have a database conn. */
330 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
331 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
332 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
336 gtk_widget_destroy(dialog);
341 settings_dialog_osm(void)
348 GtkWidget *txt_mapper_db;
349 GtkWidget *btn_browsedb;
350 BrowseInfo browse_info = { 0, 0 };
352 dialog = gtk_dialog_new_with_buttons(_("OSM Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL,
353 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
354 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS_OSM);
356 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook = gtk_notebook_new(), TRUE, TRUE, 0);
359 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Database")));
362 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Database")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
363 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
364 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
365 gtk_box_pack_start(GTK_BOX(hbox), txt_mapper_db = gtk_entry_new(), TRUE, TRUE, 0);
366 gtk_box_pack_start(GTK_BOX(hbox), btn_browsedb = gtk_button_new_with_label(_("Browse...")), FALSE, FALSE, 0);
368 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db ? _mapper_db : "");
370 browse_info.dialog = dialog;
371 browse_info.txt = txt_mapper_db;
372 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
374 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
375 gtk_widget_show_all(dialog);
377 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
385 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))>0) {
386 _mapper_db=g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
387 db_connect(&_db, _mapper_db);
393 /* Sensitize menus based on whether we have a database conn. */
394 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
395 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
396 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
400 gtk_widget_destroy(dialog);
405 * Bring up the Settings dialog. Return TRUE if and only if the recever
406 * information has changed (MAC or channel).
409 settings_dialog(void)
417 GtkWidget *num_center_ratio;
418 GtkWidget *num_lead_ratio;
419 GtkWidget *num_announce_notice;
420 GtkWidget *chk_enable_voice;
421 GtkWidget *num_voice_speed;
422 GtkWidget *num_voice_pitch;
423 GtkWidget *lbl_voice_speed;
424 GtkWidget *lbl_voice_pitch;
425 GtkWidget *num_draw_width;
426 GtkWidget *chk_always_keep_on;
427 GtkWidget *cmb_units;
428 GtkWidget *cmb_degformat;
429 GtkWidget *btn_buttons;
430 GtkWidget *btn_colors;
431 GtkWidget *num_poi_zoom;
432 GtkWidget *chk_speed_on;
433 GtkWidget *num_speed;
434 GtkWidget *cmb_info_font_size;
437 dialog = gtk_dialog_new_with_buttons(_("Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
438 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS);
440 #ifdef WITH_DEVICE_770
441 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_buttons = gtk_button_new_with_label(_("Hardware Keys...")));
442 g_signal_connect(G_OBJECT(btn_buttons), "clicked", G_CALLBACK(settings_dialog_hardkeys), dialog);
445 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_colors = gtk_button_new_with_label(_("Colors...")));
446 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
447 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook = gtk_notebook_new(), TRUE, TRUE, 0);
449 /* Auto-Center page. */
450 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 2, FALSE), label = gtk_label_new(_("Auto-Center")));
452 /* Auto-Center Sensitivity. */
453 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Sensitivity")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
454 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
455 gtk_table_attach(GTK_TABLE(table), num_center_ratio = hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
456 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
457 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
460 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Lead Amount")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
461 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
463 gtk_table_attach(GTK_TABLE(table), num_lead_ratio = hildon_controlbar_new(), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
464 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
465 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
467 /* Announcement page */
468 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Announce")));
470 /* Announcement Advance Notice. */
471 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Advance Notice")), 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(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
474 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
475 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
478 gtk_table_attach(GTK_TABLE(table), chk_enable_voice = gtk_check_button_new_with_label(_("Enable Voice Synthesis")), 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
479 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice), _enable_voice);
481 /* Voice Speed and Pitch. */
482 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 12), 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 6);
483 gtk_box_pack_start(GTK_BOX(hbox), hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
484 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_speed = gtk_label_new(_("Speed (words/minute)")), TRUE, TRUE, 0);
485 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_speed = hildon_number_editor_new(80, 370), TRUE, TRUE, 0);
486 gtk_box_pack_start(GTK_BOX(hbox), hbox2 = gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
487 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_pitch = gtk_label_new(_("Pitch")), TRUE, TRUE, 0);
488 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_pitch = hildon_number_editor_new(1, 99), TRUE, TRUE, 0);
490 /* Display settings page. */
491 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Display")));
494 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Line Width")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
495 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
496 gtk_table_attach(GTK_TABLE(table), num_draw_width = hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
497 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
498 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
500 /* Keep Display On Only When Fullscreen. */
501 gtk_table_attach(GTK_TABLE(table), chk_always_keep_on = gtk_check_button_new_with_label(_("Keep Display On Only in Fullscreen Mode")), 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
503 /* Information Font Size. */
504 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
505 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_label_new(_("Information Font Size")), FALSE, FALSE, 0);
506 gtk_box_pack_start(GTK_BOX(hbox), cmb_info_font_size = gtk_combo_box_new_text(), FALSE, FALSE, 0);
507 for (i = 0; i < INFO_FONT_ENUM_COUNT; i++)
508 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size), INFO_FONT_TEXT[i]);
511 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("Units")));
514 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Units")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
515 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
516 gtk_table_attach(GTK_TABLE(table), cmb_units = gtk_combo_box_new_text(), 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
517 for (i = 0; i < UNITS_ENUM_COUNT; i++)
518 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units), UNITS_TEXT[i]);
521 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Degrees Format")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
522 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
523 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);
524 gtk_container_add(GTK_CONTAINER(label), cmb_degformat = gtk_combo_box_new_text());
525 for (i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
526 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat), DEG_FORMAT_TEXT[i]);
527 gtk_table_attach(GTK_TABLE(table), gtk_label_new(""), 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
530 gtk_table_attach(GTK_TABLE(table), hbox = gtk_hbox_new(FALSE, 4), 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
531 gtk_box_pack_start(GTK_BOX(hbox), chk_speed_on = gtk_check_button_new_with_label(_("Display Speed")), FALSE, FALSE, 0);
532 gtk_box_pack_start(GTK_BOX(hbox), label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), FALSE, FALSE, 0);
533 gtk_container_add(GTK_CONTAINER(label), num_speed = hildon_number_editor_new(0, 999));
535 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table = gtk_table_new(2, 3, FALSE), label = gtk_label_new(_("POIs")));
536 /* Show POI below zoom. */
537 gtk_table_attach(GTK_TABLE(table), label = gtk_label_new(_("Show POI below zoom")), 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
538 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
539 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);
540 gtk_container_add(GTK_CONTAINER(label), num_poi_zoom = hildon_number_editor_new(0, MAX_ZOOM));
542 g_signal_connect(G_OBJECT(btn_colors), "clicked", G_CALLBACK(settings_dialog_colors), dialog);
544 /* Initialize fields. */
545 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom), _poi_zoom);
546 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio), _center_ratio);
547 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio), _lead_ratio);
548 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice), _announce_notice_ratio);
549 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_speed), _voice_speed);
550 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_pitch), _voice_pitch);
551 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width), _draw_width);
552 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on), !_always_keep_on);
553 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
554 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
555 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_on), _speed_on);
556 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
557 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
558 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
560 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
561 gtk_widget_show_all(dialog);
563 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
564 _center_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
565 _lead_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
566 _draw_width = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
567 _always_keep_on = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
568 _units = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
569 _degformat = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
570 _speed_on = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_on));
571 _speed_limit = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
572 _info_font_size = gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
573 _announce_notice_ratio = hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
574 _voice_speed = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_speed));
575 _voice_pitch = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_pitch));
576 _enable_voice = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
577 _poi_zoom = hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
579 speak_set_parameters(_voice_speed, _voice_pitch);
585 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
586 gtk_widget_destroy(dialog);
588 gtk_widget_hide(dialog);