--- trunk/src/settings.c 2009/11/09 07:50:37 167 +++ trunk/src/settings.c 2009/11/09 10:49:51 168 @@ -20,16 +20,69 @@ #include "gpxview.h" #include +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) +#include +#endif + typedef struct { GtkWidget *cbox_gps; GtkWidget *loc; } settings_dialog_state_t; +/* ------------------------ special gui elements for fremantle ------------------ */ + +static GtkWidget *toggle_button_new_with_label(char *label) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_check_button_new_with_label(label); +#else + GtkWidget *cbut = gtk_toggle_button_new_with_label(label); + hildon_gtk_widget_set_theme_size(cbut, + (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH)); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(cbut), FALSE); + return cbut; +#endif +} + +static void toggle_button_set_active(GtkWidget *button, gboolean active) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); +} + +static gboolean toggle_button_get_active(GtkWidget *button) { + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); +} + +static GtkWidget *check_button_new_with_label(char *label) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_check_button_new_with_label(label); +#else + GtkWidget *cbut = + hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH); + gtk_button_set_label(GTK_BUTTON(cbut), label); + return cbut; +#endif +} + +static void check_button_set_active(GtkWidget *button, gboolean active) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), active); +#else + hildon_check_button_set_active(HILDON_CHECK_BUTTON(button), active); +#endif +} + +static gboolean check_button_get_active(GtkWidget *button) { +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); +#else + return hildon_check_button_get_active(HILDON_CHECK_BUTTON(button)); +#endif +} + /* Our usual callback function */ static void settings_update(GtkWidget *widget, gpointer data) { settings_dialog_state_t *hstate = (settings_dialog_state_t *)data; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hstate->cbox_gps))) + if(check_button_get_active(hstate->cbox_gps)) gtk_widget_set_sensitive(hstate->loc, FALSE); else gtk_widget_set_sensitive(hstate->loc, TRUE); @@ -469,9 +522,9 @@ gtk_container_add(GTK_CONTAINER(scrolled_window), context->view); gtk_box_pack_start_defaults(GTK_BOX(vbox), scrolled_window); #else - GtkWidget *pannable_area = hildon_pannable_area_new(); - gtk_container_add(GTK_CONTAINER(pannable_area), context->view); - gtk_box_pack_start_defaults(GTK_BOX(vbox), pannable_area); + /* fremantle doesn't use a pannable area here. instead the entire */ + /* settings are inside one big pannable area */ + gtk_box_pack_start_defaults(GTK_BOX(vbox), context->view); #endif /* ------- button box ------------ */ @@ -510,9 +563,20 @@ return vbox; } +static GtkWidget *title_new(char *title) { + GtkWidget *vbox = gtk_vbox_new(FALSE, 10); + gtk_box_pack_start_defaults(GTK_BOX(vbox), gtk_label_new("")); + GtkWidget *hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start_defaults(GTK_BOX(hbox), gtk_hseparator_new()); + gtk_box_pack_start_defaults(GTK_BOX(hbox), gtk_label_new(title)); + gtk_box_pack_start_defaults(GTK_BOX(hbox), gtk_hseparator_new()); + gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox); + return vbox; +} + void cb_menu_settings(GtkWidget *window, gpointer data) { appdata_t *appdata = (appdata_t *)data; - GtkWidget *table, *label, *hbox, *notebook; + GtkWidget *vbox, *label, *hbox, *ihbox; GtkWidget *cbox_imperial; settings_dialog_state_t hstate; @@ -528,21 +592,29 @@ #endif #if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) - gtk_window_set_default_size(GTK_WINDOW(dialog), 550, 300); + gtk_window_set_default_size(GTK_WINDOW(dialog), 550, 500); #endif - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), - notebook = gtk_notebook_new(), TRUE, TRUE, 0); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + /* in fremantle all settings reside in one pannable long list */ + GtkWidget *pannable_area = hildon_pannable_area_new(); + /* all elements are inside one long vbox */ + vbox = gtk_vbox_new(FALSE, 0); +#else + GtkWidget *notebook = gtk_notebook_new(); +#endif /* ------------------ the "home" widget ---------------------- */ - table = gtk_table_new(2, 2, FALSE); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + // gtk_box_pack_start_defaults(GTK_BOX(vbox), title_new(_("GPS"))); +#else + vbox = gtk_vbox_new(FALSE, 0); +#endif - hstate.cbox_gps = gtk_check_button_new_with_label(_("Enable GPS")); - gtk_table_attach(GTK_TABLE(table), - hstate.cbox_gps, 0, 2, 0, 1, GTK_FILL, 0, 2, 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hstate.cbox_gps), - appdata->use_gps); + hstate.cbox_gps = check_button_new_with_label(_("Enable GPS")); + check_button_set_active(hstate.cbox_gps, appdata->use_gps); + gtk_box_pack_start(GTK_BOX(vbox), hstate.cbox_gps, FALSE, FALSE, 0); location_context_t location_context; memset(&location_context, 0, sizeof(location_context_t)); @@ -550,112 +622,125 @@ location_context.settings_dialog = dialog; /* location widget */ - gtk_table_attach_defaults(GTK_TABLE(table), - hstate.loc = location_widget(&location_context), 0, 2, 1, 2); + gtk_box_pack_start(GTK_BOX(vbox), hstate.loc = location_widget(&location_context), + TRUE, TRUE, 0); settings_update(NULL, &hstate); - /* Connect the "clicked" signal of the button to our callback */ - gtk_signal_connect (GTK_OBJECT (hstate.cbox_gps), "clicked", + /* Connect the "toggled" signal of the button to our callback */ + gtk_signal_connect (GTK_OBJECT (hstate.cbox_gps), "toggled", GTK_SIGNAL_FUNC(settings_update), (gpointer)&hstate); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, gtk_label_new(_("GPS"))); +#endif /* ---------------- misc old main menu entries ----------------- */ - table = gtk_table_new(2, 2, FALSE); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + // gtk_box_pack_start_defaults(GTK_BOX(vbox), title_new(_("Misc"))); +#else + vbox = gtk_vbox_new(FALSE, 0); +#endif + + cbox_imperial = check_button_new_with_label(_("Imperial units")); + check_button_set_active(cbox_imperial, appdata->imperial); + gtk_box_pack_start(GTK_BOX(vbox), cbox_imperial, FALSE, FALSE, 0); - cbox_imperial = gtk_check_button_new_with_label( - _("Imperial units")); - gtk_table_attach(GTK_TABLE(table), - cbox_imperial, 0, 2, 0, 1, GTK_FILL, 0, 2, 0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_imperial), - appdata->imperial); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, gtk_label_new(_("Misc"))); +#endif /* ----------------- gpxlist settings ------------------- */ - table = gtk_table_new(1, 2, FALSE); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + gtk_box_pack_start_defaults(GTK_BOX(vbox), title_new(_("GPX list"))); +#else + vbox = gtk_vbox_new(FALSE, 0); +#endif hbox = gtk_hbox_new(FALSE,2); - gtk_box_pack_start_defaults(GTK_BOX(hbox), - label = gtk_label_new(_("Visible items:"))); + ihbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start_defaults(GTK_BOX(hbox), label = gtk_label_new(_("Visible items:"))); gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); - GtkWidget *cbox_fname = gtk_check_button_new_with_label(_("Filename")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_fname), - appdata->gpxlist_items & GPXLIST_ITEM_FILENAME); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_fname); - GtkWidget *cbox_date = gtk_check_button_new_with_label(_("Date")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_date), - appdata->gpxlist_items & GPXLIST_ITEM_DATE); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_date); - GtkWidget *cbox_num = gtk_check_button_new_with_label(_("# Caches")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_num), - appdata->gpxlist_items & GPXLIST_ITEM_CNUM); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_num); + GtkWidget *cbox_fname = toggle_button_new_with_label(_("Filename")); + toggle_button_set_active(cbox_fname, appdata->gpxlist_items & GPXLIST_ITEM_FILENAME); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_fname); + GtkWidget *cbox_date = toggle_button_new_with_label(_("Date")); + toggle_button_set_active(cbox_date, appdata->gpxlist_items & GPXLIST_ITEM_DATE); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_date); + GtkWidget *cbox_num = toggle_button_new_with_label(_("# Caches")); + toggle_button_set_active(cbox_num, appdata->gpxlist_items & GPXLIST_ITEM_CNUM); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_num); + gtk_box_pack_start_defaults(GTK_BOX(hbox), ihbox); - gtk_table_attach(GTK_TABLE(table), hbox, 0, 2, 0, 1, GTK_FILL, 0, 2, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, gtk_label_new(_("GPX list"))); +#endif /* ----------------- cachelist settings ------------------- */ - table = gtk_table_new(4, 2, FALSE); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + gtk_box_pack_start_defaults(GTK_BOX(vbox), title_new(_("Cache list"))); +#else + vbox = gtk_vbox_new(FALSE, 0); +#endif hbox = gtk_hbox_new(FALSE,2); - gtk_box_pack_start_defaults(GTK_BOX(hbox), - label = gtk_label_new(_("Visible items:"))); + ihbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start_defaults(GTK_BOX(hbox), label = gtk_label_new(_("Visible items:"))); gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f); - GtkWidget *cbox_wpt = gtk_check_button_new_with_label(_("Wpt")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_wpt), - appdata->cachelist_items & CACHELIST_ITEM_ID); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_wpt); - GtkWidget *cbox_size = gtk_check_button_new_with_label(_("Size")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_size), - appdata->cachelist_items & CACHELIST_ITEM_SIZE); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_size); - GtkWidget *cbox_rate = gtk_check_button_new_with_label(_("Rating")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_rate), - appdata->cachelist_items & CACHELIST_ITEM_RATING); - gtk_box_pack_start_defaults(GTK_BOX(hbox), cbox_rate); + GtkWidget *cbox_wpt = toggle_button_new_with_label(_("Wpt")); + toggle_button_set_active(cbox_wpt, appdata->cachelist_items & CACHELIST_ITEM_ID); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_wpt); + GtkWidget *cbox_size = toggle_button_new_with_label(_("Size")); + toggle_button_set_active(cbox_size, appdata->cachelist_items & CACHELIST_ITEM_SIZE); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_size); + GtkWidget *cbox_rate = toggle_button_new_with_label(_("Rating")); + toggle_button_set_active(cbox_rate, appdata->cachelist_items & CACHELIST_ITEM_RATING); + gtk_box_pack_start_defaults(GTK_BOX(ihbox), cbox_rate); + gtk_box_pack_start_defaults(GTK_BOX(hbox), ihbox); - gtk_table_attach(GTK_TABLE(table), hbox, 0, 2, 0, 1, GTK_FILL, 0, 2, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); GtkWidget *cbox_cachelist_hidef = - gtk_check_button_new_with_label(_("Hide caches marked \"found\"")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_cachelist_hidef), - appdata->cachelist_hide_found); - gtk_table_attach(GTK_TABLE(table), cbox_cachelist_hidef, - 0, 2, 1, 2, GTK_FILL, 0, 2, 0); + check_button_new_with_label(_("Hide caches marked \"found\"")); + check_button_set_active(cbox_cachelist_hidef, appdata->cachelist_hide_found); + gtk_box_pack_start(GTK_BOX(vbox), cbox_cachelist_hidef, FALSE, FALSE, 0); #ifdef USE_MAEMO GtkWidget *cbox_cachelist_dss = - gtk_check_button_new_with_label(_("Disable screen saver")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_cachelist_dss), - appdata->cachelist_disable_screensaver); - gtk_table_attach(GTK_TABLE(table), cbox_cachelist_dss, - 0, 2, 2, 3, GTK_FILL, 0, 2, 0); + check_button_new_with_label(_("Disable screen saver")); + check_button_set_active(cbox_cachelist_dss, appdata->cachelist_disable_screensaver); + + gtk_box_pack_start(GTK_BOX(vbox), cbox_cachelist_dss, FALSE, FALSE, 0); #endif GtkWidget *cbox_update = - gtk_check_button_new_with_label(_("Update every 30 sec")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_update), - appdata->cachelist_update); - gtk_table_attach(GTK_TABLE(table), cbox_update, - 0, 2, 3, 4, GTK_FILL, 0, 2, 0); + check_button_new_with_label(_("Update every 30 sec")); + check_button_set_active(cbox_update, appdata->cachelist_update); + gtk_box_pack_start(GTK_BOX(vbox), cbox_update, FALSE, FALSE, 0); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, gtk_label_new(_("Cache list"))); +#endif /* ----------------- cache settings ------------------- */ - table = gtk_table_new(2, 3, FALSE); +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + gtk_box_pack_start_defaults(GTK_BOX(vbox), title_new(_("Cache"))); +#else + vbox = gtk_vbox_new(FALSE, 0); +#endif hbox = gtk_hbox_new(FALSE,2); gtk_box_pack_start_defaults(GTK_BOX(hbox), @@ -670,70 +755,73 @@ gtk_box_pack_start_defaults(GTK_BOX(hbox), scale); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Max")), FALSE, FALSE,0); - gtk_table_attach(GTK_TABLE(table), hbox, 0, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - GtkWidget *cbox_gcvote = gtk_check_button_new_with_label( - _("Use GCVote service")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_gcvote), - !appdata->disable_gcvote); - gtk_table_attach(GTK_TABLE(table), cbox_gcvote, 0, 2, 1, 2, GTK_FILL, 0, 2, 0); + GtkWidget *cbox_gcvote = check_button_new_with_label(_("Use GCVote service")); + check_button_set_active(cbox_gcvote, !appdata->disable_gcvote); + gtk_box_pack_start(GTK_BOX(vbox), cbox_gcvote, FALSE, FALSE, 0); #ifdef USE_MAEMO - GtkWidget *cbox_goto_dss = gtk_check_button_new_with_label( + GtkWidget *cbox_goto_dss = check_button_new_with_label( _("Disable screen saver in \"goto\" view")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbox_goto_dss), - appdata->goto_disable_screensaver); - gtk_table_attach(GTK_TABLE(table), cbox_goto_dss, 0, 2, 2, 3, GTK_FILL, 0, 2, 0); + check_button_set_active(cbox_goto_dss, appdata->goto_disable_screensaver); + gtk_box_pack_start(GTK_BOX(vbox), cbox_goto_dss, FALSE, FALSE, 0); #endif - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, +#if !defined(USE_MAEMO) || (MAEMO_VERSION_MAJOR < 5) + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, gtk_label_new(_("Cache"))); - +#endif /* -------------------------------------------------------- */ +#if defined(USE_MAEMO) && (MAEMO_VERSION_MAJOR >= 5) + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannable_area), vbox); + gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), pannable_area); +#else + gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook); +#endif + gtk_widget_show_all(dialog); if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog))) { gboolean prev_cachelist_hide_found = appdata->cachelist_hide_found; - appdata->use_gps = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(hstate.cbox_gps)); - appdata->imperial = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_imperial)); + appdata->use_gps = + check_button_get_active(hstate.cbox_gps); + appdata->imperial = + check_button_get_active(cbox_imperial); appdata->compass_damping = 0.5 + gtk_range_get_value(GTK_RANGE(scale)); appdata->gpxlist_items = GPXLIST_ITEM_VALID; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_fname))) + if(toggle_button_get_active(cbox_fname)) appdata->gpxlist_items |= GPXLIST_ITEM_FILENAME; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_date))) + if(toggle_button_get_active(cbox_date)) appdata->gpxlist_items |= GPXLIST_ITEM_DATE; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_num))) + if(toggle_button_get_active(cbox_num)) appdata->gpxlist_items |= GPXLIST_ITEM_CNUM; appdata->cachelist_items = CACHELIST_ITEM_VALID; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_wpt))) + if(toggle_button_get_active(cbox_wpt)) appdata->cachelist_items |= CACHELIST_ITEM_ID; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_size))) + if(toggle_button_get_active(cbox_size)) appdata->cachelist_items |= CACHELIST_ITEM_SIZE; - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cbox_rate))) + if(toggle_button_get_active(cbox_rate)) appdata->cachelist_items |= CACHELIST_ITEM_RATING; - appdata->cachelist_hide_found = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_cachelist_hidef)); + appdata->cachelist_hide_found = + check_button_get_active(cbox_cachelist_hidef); #ifdef USE_MAEMO - appdata->goto_disable_screensaver = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_goto_dss)); - appdata->cachelist_disable_screensaver = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_cachelist_dss)); + appdata->goto_disable_screensaver = + check_button_get_active(cbox_goto_dss); + appdata->cachelist_disable_screensaver = + check_button_get_active(cbox_cachelist_dss); #endif - appdata->cachelist_update = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_update)); + appdata->cachelist_update = check_button_get_active(cbox_update); - appdata->disable_gcvote = !gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cbox_gcvote)); + appdata->disable_gcvote = !check_button_get_active(cbox_gcvote); /* build some additional flags that are used to decide whether a */ /* redraw is necessary */