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"
32 #include "settings-gui.h"
33 #include "config-gconf.h"
34 #include "hildon-wrappers.h"
38 typedef struct _KeysDialogInfo KeysDialogInfo;
39 struct _KeysDialogInfo {
40 GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
43 typedef struct _ColorsDialogInfo ColorsDialogInfo;
44 struct _ColorsDialogInfo {
45 GtkWidget *col[COLORABLE_ENUM_COUNT];
48 typedef struct _GpsDialogInfo GpsDialogInfo;
49 struct _GpsDialogInfo {
50 GtkWidget *cmb_gps_type;
51 GtkWidget *txt_rcvr_mac;
52 GtkWidget *spn_rcvr_port;
60 #define UPDATE_GC(gc) gdk_gc_set_line_attributes(gc, _draw_width, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
67 for (i=0; i < COLORABLE_ENUM_COUNT; i++) {
68 gdk_color_alloc(gtk_widget_get_colormap(_map_widget),&_color[i]);
70 g_object_unref(_gc[i]);
71 _gc[i]=gdk_gc_new(map_pixmap_get());
72 gdk_gc_set_foreground(_gc[i], &_color[i]);
73 gdk_gc_set_line_attributes(_gc[i], _draw_width, GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
79 settings_dialog_browse_forfile(GtkWidget * widget, BrowseInfo * browse_info)
84 dialog=GTK_WIDGET(hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),GTK_FILE_CHOOSER_ACTION_OPEN));
86 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
87 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), gtk_entry_get_text(GTK_ENTRY(browse_info->txt)));
89 res=gtk_dialog_run(GTK_DIALOG(dialog));
90 if (res==GTK_RESPONSE_OK || res==GTK_RESPONSE_ACCEPT) {
91 gchar *filename=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
92 gtk_entry_set_text(GTK_ENTRY(browse_info->txt), filename);
96 gtk_widget_destroy(dialog);
102 settings_dialog_hardkeys_reset(GtkWidget *widget, KeysDialogInfo *cdi)
106 confirm=hildon_note_new_confirmation(GTK_WINDOW(_window), _("Reset all hardware keys to their original defaults?"));
108 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
110 for (i=0; i < CUSTOM_KEY_ENUM_COUNT; i++)
111 gtk_combo_box_set_active(GTK_COMBO_BOX(cdi->cmb[i]), CUSTOM_KEY_DEFAULT[i]);
113 gtk_widget_destroy(confirm);
118 settings_dialog_hardkeys(void)
125 GtkWidget *btn_defaults;
127 dialog=gtk_dialog_new_with_buttons(_("Hardware Keys"), GTK_WINDOW(_window), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
129 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_defaults=gtk_button_new_with_label(_("Reset...")));
130 g_signal_connect(G_OBJECT(btn_defaults), "clicked", G_CALLBACK(settings_dialog_hardkeys_reset), &bdi);
132 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
133 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table=gtk_table_new(2, 9, FALSE), TRUE, TRUE, 0);
135 for (i=0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
137 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(""), 0, 1, i, i + 1, GTK_FILL, 0, 2, 1);
138 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
140 gtk_label_set_markup(GTK_LABEL(label), CUSTOM_KEY_ICON[i]);
142 gtk_table_attach(GTK_TABLE(table), bdi.cmb[i]=gtk_combo_box_new_text(), 1, 2, i, i + 1, GTK_FILL, 0, 2, 1);
143 for (j=0; j < CUSTOM_ACTION_ENUM_COUNT; j++)
144 gtk_combo_box_append_text(GTK_COMBO_BOX(bdi.cmb[i]), CUSTOM_ACTION_TEXT[j]);
145 gtk_combo_box_set_active(GTK_COMBO_BOX(bdi.cmb[i]), _action[i]);
148 gtk_widget_show_all(dialog);
151 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
152 /* Check for duplicates. */
153 for (i=0; i < CUSTOM_KEY_ENUM_COUNT; i++) {
155 for (j=i + 1; j < CUSTOM_KEY_ENUM_COUNT; j++) {
156 if (gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i])) == gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[j]))) {
158 gchar *buffer=g_strdup_printf("%s:\n %s\n%s", _("The following action is mapped to multiple keys"),
159 CUSTOM_ACTION_TEXT[gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]))], _("Continue?"));
160 confirm=hildon_note_new_confirmation(GTK_WINDOW(_window), buffer);
162 if (GTK_RESPONSE_OK != gtk_dialog_run(GTK_DIALOG(confirm)))
164 gtk_widget_destroy(confirm);
167 gtk_widget_destroy(confirm);
171 for (i=0; i < CUSTOM_KEY_ENUM_COUNT; i++)
172 _action[i]=gtk_combo_box_get_active(GTK_COMBO_BOX(bdi.cmb[i]));
176 gtk_widget_destroy(dialog);
182 settings_dialog_colors_reset(GtkWidget *widget, ColorsDialogInfo *cdi)
186 confirm=hildon_note_new_confirmation(GTK_WINDOW(_window), _("Reset all colors to their original defaults?"));
188 if (GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(confirm))) {
190 for (i=0; i < COLORABLE_ENUM_COUNT; i++) {
191 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi->col[i]), &COLORABLE_DEFAULT[i]);
194 gtk_widget_destroy(confirm);
200 settings_dialog_colors(void)
205 GtkWidget *btn_defaults;
206 ColorsDialogInfo cdi;
208 dialog=gtk_dialog_new_with_buttons(_("Colors"), GTK_WINDOW(_window), GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
210 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), btn_defaults=gtk_button_new_with_label(_("Reset...")));
211 g_signal_connect(G_OBJECT(btn_defaults), "clicked", G_CALLBACK(settings_dialog_colors_reset), &cdi);
213 gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
214 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table=gtk_table_new(4, 3, TRUE), TRUE, TRUE, 0);
217 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("GPS")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
218 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
219 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK]=gtk_color_button_new(), 1, 2, 0, 1, 0, 0, 2, 4);
220 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
221 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_VELOCITY]=gtk_color_button_new(), 2, 3, 0, 1, 0, 0, 2, 4);
222 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
223 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_MARK_OLD]=gtk_color_button_new(), 3, 4, 0, 1, 0, 0, 2, 4);
224 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
227 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Track")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
228 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
229 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK]=gtk_color_button_new(), 1, 2, 1, 2, 0, 0, 2, 4);
230 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
231 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_MARK]=gtk_color_button_new(), 2, 3, 1, 2, 0, 0, 2, 4);
232 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
233 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_TRACK_BREAK]=gtk_color_button_new(), 3, 4, 1, 2, 0, 0, 2, 4);
234 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]), &_color[COLORABLE_TRACK_BREAK]);
237 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Route")), 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
238 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
239 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE]=gtk_color_button_new(), 1, 2, 2, 3, 0, 0, 2, 4);
240 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]), &_color[COLORABLE_ROUTE]);
241 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_WAY]=gtk_color_button_new(), 2, 3, 2, 3, 0, 0, 2, 4);
242 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]), &_color[COLORABLE_ROUTE_WAY]);
243 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_ROUTE_BREAK]=gtk_color_button_new(), 3, 4, 2, 3, 0, 0, 2, 4);
244 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]), &_color[COLORABLE_ROUTE_BREAK]);
247 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("POI")), 0, 1, 3, 4, GTK_FILL, 0, 2, 4);
248 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
249 gtk_table_attach(GTK_TABLE(table), cdi.col[COLORABLE_POI]=gtk_color_button_new(), 1, 2, 3, 4, 0, 0, 2, 4);
250 gtk_color_button_set_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]), &_color[COLORABLE_POI]);
252 gtk_widget_show_all(dialog);
253 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
254 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK]), &_color[COLORABLE_MARK]);
255 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_VELOCITY]), &_color[COLORABLE_MARK_VELOCITY]);
256 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_MARK_OLD]), &_color[COLORABLE_MARK_OLD]);
257 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK]), &_color[COLORABLE_TRACK]);
258 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_MARK]), &_color[COLORABLE_TRACK_MARK]);
259 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_TRACK_BREAK]),&_color[COLORABLE_TRACK_BREAK]);
260 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE]),&_color[COLORABLE_ROUTE]);
261 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_WAY]),&_color[COLORABLE_ROUTE_WAY]);
262 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_ROUTE_BREAK]),&_color[COLORABLE_ROUTE_BREAK]);
263 gtk_color_button_get_color(GTK_COLOR_BUTTON(cdi.col[COLORABLE_POI]),&_color[COLORABLE_POI]);
267 gtk_widget_destroy(dialog);
273 gtk_widget_hideshow(GtkWidget *widget, gboolean show)
277 gtk_widget_show(widget);
279 gtk_widget_hide(widget);
283 gps_type_changed_cb(GtkWidget *widget, gpointer data)
285 GpsDialogInfo *gdi=(GpsDialogInfo *)data;
286 gboolean scan, port, address;
287 GpsIOSourceType type;
290 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(gdi->cmb_gps_type), &gdi->iter)==FALSE)
293 gtk_tree_model_get(GTK_TREE_MODEL(gdi->store), &gdi->iter, 0, &type, 2, &scan, 3, &address, 4, &port, 5, &dport, -1);
294 g_debug("GPS: %d", type);
296 gtk_widget_hideshow(gdi->btn_scan, scan);
297 gtk_widget_hideshow(gdi->txt_rcvr_mac, address);
298 gtk_widget_hideshow(gdi->spn_rcvr_port, port);
299 if (port && dport!=0 && (guint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(gdi->spn_rcvr_port))==0)
300 gtk_spin_button_set_value(GTK_SPIN_BUTTON(gdi->spn_rcvr_port), (guint)dport);
306 settings_dialog_gps(Gps *gps)
313 GtkCellRenderer *renderer;
315 ScanInfo scan_info={ 0 };
316 gboolean rcvr_changed=TRUE, settype=FALSE;
320 /* Don't allow configuring GPS if it's connected */
321 if (gps->io.conn!=RCVR_OFF) {
322 popup_error(_window, "Disable GPS before re-configuring.");
326 dialog=gtk_dialog_new_with_buttons(_("GPS Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL,
327 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
328 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS_GPS);
330 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook=gtk_notebook_new(), TRUE, TRUE, 0);
333 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox=gtk_vbox_new(FALSE, 4), label=gtk_label_new(_("GPS")));
336 hbox=gtk_hbox_new(FALSE, 3);
337 gtk_box_pack_start(GTK_BOX(hbox), label=gtk_label_new(_("GPS Type")), TRUE, TRUE, 0);
338 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
340 gdi.cmb_gps_type=gtk_combo_box_new_with_model(
341 GTK_TREE_MODEL(gtk_list_store_new(6, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT)));
343 gtk_box_pack_start(GTK_BOX(hbox), gdi.cmb_gps_type, TRUE, FALSE, 0);
344 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
347 renderer=gtk_cell_renderer_text_new();
348 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gdi.cmb_gps_type), renderer, TRUE);
349 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gdi.cmb_gps_type), renderer, "text", 1, NULL);
351 /* Receiver MAC/File/IP Address. */
352 hbox=gtk_hbox_new(FALSE, 3);
353 gtk_box_pack_start(GTK_BOX(hbox), label=gtk_label_new(_("Address: (MAC/IP/Device)")), TRUE, TRUE, 0);
354 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
355 gtk_box_pack_start(GTK_BOX(hbox), gdi.txt_rcvr_mac=gtk_entry_new(), TRUE, TRUE, 0);
356 gtk_box_pack_start(GTK_BOX(hbox), gdi.spn_rcvr_port=gtk_spin_button_new_with_range(0, 65535, 1), TRUE, TRUE, 0);
357 gtk_box_pack_start(GTK_BOX(hbox), gdi.btn_scan=gtk_button_new_with_label(_("Scan...")), FALSE, FALSE, 0);
358 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
360 /* Set up the view for the combo box. */
361 gdi.store=GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(gdi.cmb_gps_type)));
362 gtk_list_store_clear(gdi.store);
363 gpstypes=gps_get_supported_types();
364 while (gpstypes->type!=0) {
365 gtk_list_store_append(gdi.store, &gdi.iter);
366 gtk_list_store_set(gdi.store, &gdi.iter,
370 3, gpstypes->address,
372 5, gpstypes->port_def,
374 if (gps->io.type==gpstypes->type) {
377 } else if (settype==FALSE && gps->io.type==GPS_IO_SIMULATION) {
384 /* Connect signals. */
385 scan_info.settings_dialog=dialog;
386 scan_info.txt_rcvr_mac=gdi.txt_rcvr_mac;
388 g_signal_connect(G_OBJECT(gdi.btn_scan), "clicked", G_CALLBACK(scan_bluetooth), &scan_info);
389 g_signal_connect(G_OBJECT(gdi.cmb_gps_type), "changed", G_CALLBACK(gps_type_changed_cb), &gdi);
391 gtk_entry_set_text(GTK_ENTRY(gdi.txt_rcvr_mac), gps->io.address ? gps->io.address : "");
392 gtk_spin_button_set_value(GTK_SPIN_BUTTON(gdi.spn_rcvr_port), gps->io.port);
394 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, -1);
395 gtk_widget_show_all(dialog);
398 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(gdi.store), &gdi.active);
399 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(gdi.cmb_gps_type), &gdi.active);
401 while (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
402 /* Set _rcvr_mac if necessary. */
403 if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(gdi.cmb_gps_type), &gdi.iter)==TRUE) {
404 gtk_tree_model_get(GTK_TREE_MODEL(gdi.store), &gdi.iter, 0, &(gps->io.type), -1);
405 g_debug("GPS: %d", gps->io.type);
407 popup_error(dialog, "Please select GPS type");
411 if (!*gtk_entry_get_text(GTK_ENTRY(gdi.txt_rcvr_mac))) {
412 /* User specified no rcvr mac - set _rcvr_mac to NULL. */
413 if (gps->io.address) {
414 g_free(gps->io.address);
415 gps->io.address=NULL;
417 set_action_sensitive("gps_details", FALSE);
419 gps->io.type=GPS_IO_SIMULATION;
420 if (gps->io.type!=GPS_IO_SIMULATION) {
421 set_action_activate("gps_details", FALSE);
422 popup_error(dialog, _("No GPS Receiver MAC provided.\nGPS will be disabled."));
424 set_action_sensitive("gps_details", FALSE);
426 } else if (!gps->io.address || strcmp(gps->io.address, gtk_entry_get_text(GTK_ENTRY(gdi.txt_rcvr_mac)))) {
427 /* User specified a new rcvr mac. */
428 g_free(gps->io.address);
429 gps->io.address=g_strdup(gtk_entry_get_text(GTK_ENTRY(gdi.txt_rcvr_mac)));
430 gps->io.port=(guint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(gdi.spn_rcvr_port));
437 gtk_widget_destroy(dialog);
442 settings_dialog_osm(void)
449 GtkWidget *txt_mapper_db;
450 GtkWidget *btn_browsedb;
452 BrowseInfo browse_info={ 0, 0 };
454 dialog=gtk_dialog_new_with_buttons(_("OSM Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL,
455 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
456 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS_OSM);
458 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook=gtk_notebook_new(), TRUE, TRUE, 0);
461 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Database")));
464 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Database")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
465 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
466 gtk_table_attach(GTK_TABLE(table), hbox=gtk_hbox_new(FALSE, 4), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
467 gtk_box_pack_start(GTK_BOX(hbox), txt_mapper_db=gtk_entry_new(), TRUE, TRUE, 0);
468 gtk_box_pack_start(GTK_BOX(hbox), btn_browsedb=gtk_button_new_with_label(_("Browse...")), FALSE, FALSE, 0);
470 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Advanced")));
473 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Sensitivity")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
474 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
475 gtk_table_attach(GTK_TABLE(table), num_sens=hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
476 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_sens), 1, 10);
477 force_min_visible_bars(HILDON_CONTROLBAR(num_sens), 1);
479 gtk_entry_set_text(GTK_ENTRY(txt_mapper_db), _mapper_db ? _mapper_db : "");
480 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_sens), _map_location_sens);
482 browse_info.dialog=dialog;
483 browse_info.txt=txt_mapper_db;
484 g_signal_connect(G_OBJECT(btn_browsedb), "clicked", G_CALLBACK(settings_dialog_browse_forfile), &browse_info);
486 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
487 gtk_widget_show_all(dialog);
489 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
497 if (strlen(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)))>0) {
498 _mapper_db=g_strdup(gtk_entry_get_text(GTK_ENTRY(txt_mapper_db)));
499 db_connect(&_db, _mapper_db);
506 _map_location_sens=hildon_controlbar_get_value(HILDON_CONTROLBAR(num_sens));
509 gtk_widget_destroy(dialog);
511 /* Sensitize menus based on whether we have a database conn. */
512 gtk_widget_set_sensitive(_cmenu_loc_add_poi, _db != NULL);
513 gtk_widget_set_sensitive(_cmenu_way_add_poi, _db != NULL);
514 gtk_widget_set_sensitive(_cmenu_poi, _db != NULL);
520 * Bring up the Settings dialog.
532 GtkWidget *num_center_ratio;
533 GtkWidget *num_lead_ratio;
534 GtkWidget *num_announce_notice;
535 GtkWidget *chk_enable_voice;
536 GtkWidget *num_voice_speed;
537 GtkWidget *num_voice_pitch;
538 GtkWidget *lbl_voice_speed;
539 GtkWidget *lbl_voice_pitch;
540 GtkWidget *num_draw_width;
541 GtkWidget *chk_always_keep_on;
542 GtkWidget *cmb_units;
543 GtkWidget *cmb_degformat;
544 GtkWidget *btn_buttons;
545 GtkWidget *num_poi_zoom;
546 GtkWidget *chk_speed_on;
547 GtkWidget *num_speed;
548 GtkWidget *cmb_info_font_size;
550 GtkWidget *announce_destination;
551 GtkWidget *announce_overspeed;
552 GtkWidget *announce_waypoints;
555 dialog=gtk_dialog_new_with_buttons(_("Settings"), GTK_WINDOW(_window), GTK_DIALOG_MODAL,
556 GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
557 help_dialog_help_enable(GTK_DIALOG(dialog), HELP_ID_SETTINGS);
559 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook=gtk_notebook_new(), TRUE, TRUE, 0);
561 /* Auto-Center page. */
562 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 2, FALSE), label=gtk_label_new(_("Auto-Center")));
564 /* Auto-Center Sensitivity. */
565 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Sensitivity")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
566 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
567 gtk_table_attach(GTK_TABLE(table), num_center_ratio=hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
568 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_center_ratio), 1, 10);
569 force_min_visible_bars(HILDON_CONTROLBAR(num_center_ratio), 1);
572 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Lead Amount")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
573 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
575 gtk_table_attach(GTK_TABLE(table), num_lead_ratio=hildon_controlbar_new(), 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
576 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_lead_ratio), 1, 10);
577 force_min_visible_bars(HILDON_CONTROLBAR(num_lead_ratio), 1);
579 /* Announcement page */
580 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Announce")));
582 /* Announcement Advance Notice. */
583 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Advance Notice")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
584 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
585 gtk_table_attach(GTK_TABLE(table), num_announce_notice=hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
586 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_announce_notice), 1, 20);
587 force_min_visible_bars(HILDON_CONTROLBAR(num_announce_notice), 1);
589 gtk_table_attach(GTK_TABLE(table), vbox=gtk_vbox_new(FALSE, 4), 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 6);
590 gtk_box_pack_start(GTK_BOX(vbox), announce_waypoints=gtk_check_button_new_with_label(_("Enable waypoint announcements")), TRUE, TRUE, 4);
591 gtk_box_pack_start(GTK_BOX(vbox), announce_destination=gtk_check_button_new_with_label(_("Enable destination announcements")), TRUE, TRUE, 4);
592 gtk_box_pack_start(GTK_BOX(vbox), announce_overspeed=gtk_check_button_new_with_label(_("Enable overspeed announcements")), TRUE, TRUE, 4);
595 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Voice")));
598 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);
599 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice), _enable_voice);
601 /* Voice Speed and Pitch. */
602 gtk_table_attach(GTK_TABLE(table), hbox=gtk_hbox_new(FALSE, 4), 0, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 6);
603 gtk_box_pack_start(GTK_BOX(hbox), hbox2=gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
604 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_speed=gtk_label_new(_("Speed (words/minute)")), TRUE, TRUE, 0);
605 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_speed=hildon_number_editor_new(80, 370), TRUE, TRUE, 0);
606 gtk_box_pack_start(GTK_BOX(hbox), hbox2=gtk_hbox_new(FALSE, 4), TRUE, TRUE, 4);
607 gtk_box_pack_start(GTK_BOX(hbox2), lbl_voice_pitch=gtk_label_new(_("Pitch")), TRUE, TRUE, 0);
608 gtk_box_pack_start(GTK_BOX(hbox2), num_voice_pitch=hildon_number_editor_new(1, 99), TRUE, TRUE, 0);
611 gtk_widget_set_sensitive(chk_enable_voice, FALSE);
612 gtk_widget_set_sensitive(num_voice_speed, FALSE);
613 gtk_widget_set_sensitive(num_voice_pitch, FALSE);
616 /* Display settings page. */
617 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Display")));
620 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Line Width")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
621 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
622 gtk_table_attach(GTK_TABLE(table), num_draw_width=hildon_controlbar_new(), 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
623 hildon_controlbar_set_range(HILDON_CONTROLBAR(num_draw_width), 1, 20);
624 force_min_visible_bars(HILDON_CONTROLBAR(num_draw_width), 1);
626 /* Keep Display On Only When Fullscreen. */
627 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);
629 /* Information Font Size. */
630 gtk_table_attach(GTK_TABLE(table), hbox=gtk_hbox_new(FALSE, 4), 0, 2, 2, 3, GTK_FILL, 0, 2, 4);
631 gtk_box_pack_start(GTK_BOX(hbox), label=gtk_label_new(_("Information Font Size")), FALSE, FALSE, 0);
632 gtk_box_pack_start(GTK_BOX(hbox), cmb_info_font_size=gtk_combo_box_new_text(), FALSE, FALSE, 0);
633 for (i=0; i < INFO_FONT_ENUM_COUNT; i++)
634 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_info_font_size), INFO_FONT_TEXT[i]);
637 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("Units")));
640 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Units")), 0, 1, 0, 1, GTK_FILL, 0, 2, 4);
641 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
642 gtk_table_attach(GTK_TABLE(table), cmb_units=gtk_combo_box_new_text(), 1, 2, 0, 1, GTK_FILL, 0, 2, 4);
643 for (i=0; i < UNITS_ENUM_COUNT; i++)
644 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_units), UNITS_TEXT[i]);
647 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Degrees Format")), 0, 1, 1, 2, GTK_FILL, 0, 2, 4);
648 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
649 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);
650 gtk_container_add(GTK_CONTAINER(label), cmb_degformat=gtk_combo_box_new_text());
651 for (i=0; i < DEG_FORMAT_ENUM_COUNT; i++)
652 gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat), DEG_FORMAT_TEXT[i]);
653 gtk_table_attach(GTK_TABLE(table), gtk_label_new(""), 2, 3, 0, 2, GTK_FILL | GTK_EXPAND, 0, 2, 4);
656 gtk_table_attach(GTK_TABLE(table), hbox=gtk_hbox_new(FALSE, 4), 0, 3, 2, 3, GTK_FILL, 0, 2, 4);
657 gtk_box_pack_start(GTK_BOX(hbox), chk_speed_on=gtk_check_button_new_with_label(_("Display Speed")), FALSE, FALSE, 0);
658 gtk_box_pack_start(GTK_BOX(hbox), label=gtk_alignment_new(0.f, 0.5f, 0.f, 0.f), FALSE, FALSE, 0);
659 gtk_container_add(GTK_CONTAINER(label), num_speed=hildon_number_editor_new(0, 999));
661 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table=gtk_table_new(2, 3, FALSE), label=gtk_label_new(_("POIs")));
663 /* Show POI below zoom. */
664 gtk_table_attach(GTK_TABLE(table), label=gtk_label_new(_("Show POI below zoom")), 0, 1, 2, 3, GTK_FILL, 0, 2, 4);
665 gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
666 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);
667 gtk_container_add(GTK_CONTAINER(label), num_poi_zoom=hildon_number_editor_new(0, MAX_ZOOM));
669 /* Initialize fields. */
670 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_poi_zoom), _poi_zoom);
671 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_center_ratio), _center_ratio);
672 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_lead_ratio), _lead_ratio);
673 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice), _announce_notice_ratio);
674 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_speed), _voice_speed);
675 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_voice_pitch), _voice_pitch);
676 hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_width), _draw_width);
677 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on), !_always_keep_on);
678 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_units), _units);
679 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_degformat), _degformat);
680 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_speed_on), _speed_on);
681 hildon_number_editor_set_range(HILDON_NUMBER_EDITOR(num_speed), 1, 300);
682 hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_speed), _speed_limit);
683 gtk_combo_box_set_active(GTK_COMBO_BOX(cmb_info_font_size), _info_font_size);
685 gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 300);
686 gtk_widget_show_all(dialog);
688 if (GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) {
689 _center_ratio=hildon_controlbar_get_value(HILDON_CONTROLBAR(num_center_ratio));
690 _lead_ratio=hildon_controlbar_get_value(HILDON_CONTROLBAR(num_lead_ratio));
691 _draw_width=hildon_controlbar_get_value(HILDON_CONTROLBAR(num_draw_width));
692 _always_keep_on=!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_always_keep_on));
693 _units=gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_units));
694 _degformat=gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_degformat));
695 _speed_on=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_speed_on));
696 _speed_limit=hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_speed));
697 _info_font_size=gtk_combo_box_get_active(GTK_COMBO_BOX(cmb_info_font_size));
698 _announce_notice_ratio=hildon_controlbar_get_value(HILDON_CONTROLBAR(num_announce_notice));
699 _voice_speed=hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_speed));
700 _voice_pitch=hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_voice_pitch));
701 _enable_voice=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_enable_voice));
702 _poi_zoom=hildon_number_editor_get_value(HILDON_NUMBER_EDITOR(num_poi_zoom));
704 speak_set_parameters(_voice_speed, _voice_pitch);
710 /* Destroying causes a crash (!?!?!??!) huh? in hildon (770?) only, plain gtk is ok...*/
711 gtk_widget_destroy(dialog);
713 gtk_widget_hide(dialog);