diff options
Diffstat (limited to 'apps/settings_list.c')
-rw-r--r-- | apps/settings_list.c | 353 |
1 files changed, 246 insertions, 107 deletions
diff --git a/apps/settings_list.c b/apps/settings_list.c index afab6dce5b..6f6425a693 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -40,6 +40,8 @@ #include "powermgmt.h" #include "kernel.h" #include "open_plugin.h" +#include "misc.h" +#include "playback.h" #ifdef HAVE_REMOTE_LCD #include "lcd-remote.h" #endif @@ -60,7 +62,9 @@ #endif #ifdef HAVE_HOTKEY #include "onplay.h" +#include "misc.h" /* current activity */ #endif +#include "playlist.h" #include "voice_thread.h" @@ -162,24 +166,18 @@ unit is the UNIT_ define to display/talk. the first one saves a string to the config file, the second one saves the variable value to the config file */ -#define INT_SETTING_W_CFGVALS(flags, var, lang_id, default, name, cfg_vals, \ - unit, min, max, step, formatter, get_talk_id, cb) \ - {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \ - lang_id, INT(default), name, cfg_vals, \ - {.int_setting = (struct int_setting[]){ \ - {cb, unit, min, max, step, formatter, get_talk_id}}}} #define INT_SETTING(flags, var, lang_id, default, name, \ unit, min, max, step, formatter, get_talk_id, cb) \ {flags|F_INT_SETTING|F_T_INT, &global_settings.var, \ lang_id, INT(default), name, NULL, \ {.int_setting = (struct int_setting[]){ \ - {cb, unit, min, max, step, formatter, get_talk_id}}}} + {cb, unit, step, min, max, formatter, get_talk_id}}}} #define INT_SETTING_NOWRAP(flags, var, lang_id, default, name, \ unit, min, max, step, formatter, get_talk_id, cb) \ {flags|F_INT_SETTING|F_T_INT|F_NO_WRAP, &global_settings.var, \ lang_id, INT(default), name, NULL, \ {.int_setting = (struct int_setting[]){ \ - {cb, unit, min, max, step, formatter, get_talk_id}}}} + {cb, unit, step, min, max, formatter, get_talk_id}}}} #define TABLE_SETTING(flags, var, lang_id, default, name, cfg_vals, \ unit, formatter, get_talk_id, cb, count, ...) \ @@ -240,8 +238,10 @@ static const char graphic_numeric[] = "graphic,numeric"; #define DEFAULT_FONTNAME "08-Rockfont" #elif LCD_HEIGHT <= 220 #define DEFAULT_FONT_HEIGHT 12 -#elif LCD_HEIGHT <= 320 +#elif LCD_HEIGHT <= 240 #define DEFAULT_FONT_HEIGHT 15 +#elif LCD_HEIGHT <= 320 + #define DEFAULT_FONT_HEIGHT 18 #elif defined(SHANLING_Q1) /* 16pt font looks pretty aliased & ugly */ #define DEFAULT_FONT_HEIGHT 18 @@ -351,13 +351,44 @@ static const char graphic_numeric[] = "graphic,numeric"; # endif #endif +#ifdef AUDIOHW_HAVE_POWER_MODE +# ifndef TARGET_DEFAULT_DAC_POWER_MODE +# define TARGET_DEFAULT_DAC_POWER_MODE SOUND_HIGH_POWER +# endif +#endif + +/* + * Total buffer size due to this setting = max files in dir * 52 bytes + * Keep this in mind when selecting the maximum - if the maximum is too + * high it's possible rockbox could hit OOM and become unusable until + * the config file is deleted manually. + * + * Note the FAT32 limit is 65534 files per directory, but this limit + * also applies to the database browser so it makes sense to support + * larger maximums. + */ +#if MEMORYSIZE >= 16 +# define MAX_FILES_IN_DIR_DEFAULT 5000 +# define MAX_FILES_IN_DIR_MAX 100000 +# define MAX_FILES_IN_DIR_STEP 1000 +#elif MEMORYSIZE >= 8 +# define MAX_FILES_IN_DIR_DEFAULT 5000 +# define MAX_FILES_IN_DIR_MAX 40000 +# define MAX_FILES_IN_DIR_STEP 500 +#else +/* historical defaults, only for 2 MiB targets these days */ +# define MAX_FILES_IN_DIR_DEFAULT 1000 +# define MAX_FILES_IN_DIR_MAX 10000 +# define MAX_FILES_IN_DIR_STEP 50 +#endif + #if LCD_DEPTH > 1 static const char* list_pad_formatter(char *buffer, size_t buffer_size, int val, const char *unit) { switch (val) { - case -1: return str(LANG_AUTOMATIC); + case -1: return str(LANG_AUTO); case 0: return str(LANG_OFF); default: break; } @@ -369,7 +400,7 @@ static int32_t list_pad_getlang(int value, int unit) { switch (value) { - case -1: return LANG_AUTOMATIC; + case -1: return LANG_AUTO; case 0: return LANG_OFF; default: return TALK_ID(value, unit); } @@ -589,53 +620,89 @@ static void eq_set_default(void* setting, void* defaultval) memcpy(setting, defaultval, sizeof(struct eq_band_setting)); } -#ifdef HAVE_QUICKSCREEN -static int find_setting_by_name(char*name) +#ifdef HAVE_PLAY_FREQ +static const char* formatter_freq_unit_0_is_auto(char *buffer, size_t buffer_size, + int value, const char *unit) +{ + if (value == 0) + return str(LANG_AUTO); + else + return db_format(buffer, buffer_size, value / 100, unit); +} + +static int32_t getlang_freq_unit_0_is_auto(int value, int unit) { - int i = 0; - const struct settings_list *setting; - if (!strcmp(name, "-")) - return -1; - while (i<nb_settings) + if (value == 0) + return LANG_AUTO; + else + return talk_value_decimal(value, unit, 3, false); +} + +static void playback_frequency_callback(int sample_rate_hz) +{ + audio_set_playback_frequency(sample_rate_hz); +} +#endif /* HAVE_PLAY_FREQ */ + +/* perform shuffle/unshuffle of the current playlist based on the boolean provided */ +static void shuffle_playlist_callback(bool shuffle) +{ + struct playlist_info *playlist = playlist_get_current(); + if (playlist->started) { - setting = &settings[i]; - if (setting->cfg_name && !strcmp(setting->cfg_name, name)) + if ((audio_status() & AUDIO_STATUS_PLAY) == AUDIO_STATUS_PLAY) { - return i; + replaygain_update(); + if (shuffle) + { + playlist_randomise(playlist, current_tick, true); + } + else + { + playlist_sort(playlist, true); + } } - i++; } - return -1; } -static void qs_load_from_cfg(void* var, char*value) -{ - *(int*)var = find_setting_by_name(value); -} -static char* qs_write_to_cfg(void* setting, char*buf, int buf_len) + +static void repeat_mode_callback(int repeat) { - int index = *(int*)setting; - if (index < 0 || index >= nb_settings) + if ((audio_status() & AUDIO_STATUS_PLAY) == AUDIO_STATUS_PLAY) { - strlcpy(buf, "-", buf_len); - return buf; + audio_flush_and_reload_tracks(); } - const struct settings_list *var = &settings[index]; - strlcpy(buf, var->cfg_name, buf_len); + (void)repeat; +} + +#ifdef HAVE_QUICKSCREEN +static void qs_load_from_cfg(void *var, char *value) +{ + const struct settings_list **item = var; + + if (*value == '-') + *item = NULL; + else + *item = find_setting_by_cfgname(value); +} + +static char* qs_write_to_cfg(void *var, char *buf, int buf_len) +{ + const struct settings_list *setting = *(const struct settings_list **)var; + + strmemccpy(buf, setting ? setting->cfg_name : "-", buf_len); return buf; } -static bool qs_is_changed(void* setting, void* defaultval) + +static bool qs_is_changed(void* var, void* defaultval) { - int i = *(int*)setting; - if (i < 0 || i >= nb_settings) - return false; - const struct settings_list *var = &settings[i]; - return var != find_setting(defaultval, NULL); + const struct settings_list *defaultsetting = find_setting(defaultval); + + return var != defaultsetting; } -static void qs_set_default(void* setting, void* defaultval) + +static void qs_set_default(void* var, void* defaultval) { - if (defaultval == NULL) - *(int*)setting = -1; - find_setting(defaultval, (int*)setting); + *(const struct settings_list **)var = find_setting(defaultval); } #endif #ifdef HAVE_TOUCHSCREEN @@ -695,8 +762,11 @@ static void tsc_set_default(void* setting, void* defaultval) #ifdef HAVE_HOTKEY static void hotkey_callback(int var) { - if (get_hotkey_lang_id(var) == LANG_OPEN_PLUGIN) - open_plugin_browse(ID2P(LANG_HOTKEY_WPS)); + if (get_current_activity() != ACTIVITY_QUICKSCREEN) + { + if (get_hotkey(var)->action == HOTKEY_PLUGIN) + open_plugin_browse(ID2P(LANG_HOTKEY_WPS)); + } } static const char* hotkey_formatter(char* buffer, size_t buffer_size, int value, const char* unit) @@ -704,12 +774,12 @@ static const char* hotkey_formatter(char* buffer, size_t buffer_size, int value, (void)buffer; (void)buffer_size; (void)unit; - return str(get_hotkey_lang_id(value)); + return str(get_hotkey(value)->lang_id); } static int32_t hotkey_getlang(int value, int unit) { (void)unit; - return get_hotkey_lang_id(value); + return get_hotkey(value)->lang_id; } #endif /* HAVE_HOTKEY */ @@ -877,23 +947,26 @@ const struct settings_list settings[] = { #endif #ifdef AUDIOHW_HAVE_POWER_MODE - CHOICE_SETTING(F_SOUNDSETTING, power_mode, LANG_DAC_POWER_MODE, 0, + CHOICE_SETTING(F_SOUNDSETTING, power_mode, LANG_DAC_POWER_MODE, + TARGET_DEFAULT_DAC_POWER_MODE, "dac_power_mode", "high,low", sound_set_power_mode, 2, ID2P(LANG_DAC_POWER_HIGH), ID2P(LANG_DAC_POWER_LOW)), #endif /* playback */ - OFFON_SETTING(0, playlist_shuffle, LANG_SHUFFLE, false, "shuffle", NULL), + OFFON_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, playlist_shuffle, + LANG_SHUFFLE, false, "shuffle", shuffle_playlist_callback), + SYSTEM_SETTING(NVRAM(4), resume_index, -1), SYSTEM_SETTING(NVRAM(4), resume_crc32, -1), SYSTEM_SETTING(NVRAM(4), resume_elapsed, -1), SYSTEM_SETTING(NVRAM(4), resume_offset, -1), - CHOICE_SETTING(0, repeat_mode, LANG_REPEAT, REPEAT_OFF, "repeat", - "off,all,one,shuffle" + CHOICE_SETTING(F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, repeat_mode, + LANG_REPEAT, REPEAT_OFF, "repeat", "off,all,one,shuffle" #ifdef AB_REPEAT_ENABLE ",ab" #endif - , NULL, + , repeat_mode_callback, #ifdef AB_REPEAT_ENABLE 5, #else @@ -906,28 +979,41 @@ const struct settings_list settings[] = { #endif ), /* CHOICE_SETTING( repeat_mode ) */ #ifdef HAVE_PLAY_FREQ - STRINGCHOICE_SETTING(0, play_frequency, LANG_FREQUENCY, 0, + TABLE_SETTING(F_SOUNDSETTING|F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED, + play_frequency, LANG_FREQUENCY, 0, "playback frequency", "auto", + UNIT_KHZ, formatter_freq_unit_0_is_auto, + getlang_freq_unit_0_is_auto, + playback_frequency_callback, #if HAVE_PLAY_FREQ >= 192 - "playback frequency", "auto,44.1 kHz,48 kHz,88.2 kHz,96 kHz,176.4 kHz,192 kHz", NULL, 7, - LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ), TALK_ID_DECIMAL(882, 1, UNIT_KHZ), TALK_ID(96, UNIT_KHZ), TALK_ID_DECIMAL(1764, 1, UNIT_KHZ), TALK_ID(192, UNIT_KHZ)), + 7,0,SAMPR_44,SAMPR_48,SAMPR_88,SAMPR_96,SAMPR_176,SAMPR_192), #elif HAVE_PLAY_FREQ >= 96 - "playback frequency", "auto,44.1 kHz,48 kHz,88.2 kHz,96 kHz", NULL, 5, - LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ), TALK_ID_DECIMAL(882, 1, UNIT_KHZ), TALK_ID(96, UNIT_KHZ)), + 5,0,SAMPR_44,SAMPR_48,SAMPR_88,SAMPR_96), #elif HAVE_PLAY_FREQ >= 48 - "playback frequency", "auto,44.1 kHz,48 kHz", NULL, 3, - LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ)), + 3,0,SAMPR_44,SAMPR_48), #else #error "HAVE_PLAY_FREQ < 48???" #endif #endif /* HAVE_PLAY_FREQ */ + +#ifdef HAVE_ALBUMART + CHOICE_SETTING(0, album_art, LANG_ALBUM_ART, 1, + "album art", "off,prefer embedded,prefer image file", + NULL, 3, + ID2P(LANG_OFF), + ID2P(LANG_PREFER_EMBEDDED), + ID2P(LANG_PREFER_IMAGE_FILE)), +#endif + /* LCD */ #ifdef HAVE_LCD_CONTRAST /* its easier to leave this one un-macro()ed for the time being */ { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.contrast, LANG_CONTRAST, FUNCTYPE(lcd_default_contrast), "contrast", NULL , { .int_setting = (struct int_setting[]) { - { lcd_set_contrast, UNIT_INT, MIN_CONTRAST_SETTING, - MAX_CONTRAST_SETTING, 1, NULL, NULL }}}}, + { .option_callback = lcd_set_contrast, + .unit = UNIT_INT, .step = 1, + .min = MIN_CONTRAST_SETTING, .max = MAX_CONTRAST_SETTING, + .formatter = NULL, .get_talk_id = NULL }}}}, #endif #ifdef HAVE_BACKLIGHT TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, @@ -1027,30 +1113,33 @@ const struct settings_list settings[] = { "max files in playlist", UNIT_INT, 1000, 32000, 1000, NULL, NULL, NULL), INT_SETTING(F_BANFROMQS, max_files_in_dir, LANG_MAX_FILES_IN_DIR, -#if MEMORYSIZE > 1 - 1000, -#else - 200, + MAX_FILES_IN_DIR_DEFAULT, "max files in dir", UNIT_INT, + MAX_FILES_IN_DIR_STEP /* min */, MAX_FILES_IN_DIR_MAX, + MAX_FILES_IN_DIR_STEP, + NULL, NULL, NULL), +#ifdef HAVE_PERCEPTUAL_VOLUME + CHOICE_SETTING(0, volume_adjust_mode, LANG_VOLUME_ADJUST_MODE, + VOLUME_ADJUST_DIRECT, "volume adjustment mode", + "direct,perceptual", NULL, 2, + ID2P(LANG_DIRECT), ID2P(LANG_PERCEPTUAL)), + INT_SETTING_NOWRAP(0, volume_adjust_norm_steps, LANG_VOLUME_ADJUST_NORM_STEPS, + 50, "perceptual volume step count", UNIT_INT, + MIN_NORM_VOLUME_STEPS, MAX_NORM_VOLUME_STEPS, 5, + NULL, NULL, NULL), #endif - "max files in dir", UNIT_INT, 50, 10000, 50, - NULL, NULL, NULL), /* use this setting for user code even if there's no exchangable battery * support enabled */ -#if BATTERY_CAPACITY_DEFAULT > 0 -/* define min/max/inc for this file if there's only one battery */ -#ifndef BATTERY_CAPACITY_MIN -#define BATTERY_CAPACITY_MIN BATTERY_CAPACITY_DEFAULT -#define BATTERY_CAPACITY_MAX BATTERY_CAPACITY_DEFAULT -#define BATTERY_CAPACITY_INC 0 -#endif +#if BATTERY_CAPACITY_INC > 0 #if defined(IPOD_VIDEO) && !defined(SIMULATOR) /* its easier to leave this one un-macro()ed for the time being */ { F_T_INT|F_DEF_ISFUNC|F_INT_SETTING, &global_settings.battery_capacity, LANG_BATTERY_CAPACITY, FUNCTYPE(battery_default_capacity), "battery capacity", NULL , { .int_setting = (struct int_setting[]) { - { set_battery_capacity, UNIT_MAH, BATTERY_CAPACITY_MIN, - BATTERY_CAPACITY_MAX, BATTERY_CAPACITY_INC, NULL, NULL }}}}, + { .option_callback = set_battery_capacity, + .unit = UNIT_MAH, .step = BATTERY_CAPACITY_INC, + .min = BATTERY_CAPACITY_MIN, .max = BATTERY_CAPACITY_MAX, + .formatter = NULL, .get_talk_id = NULL }}}}, #else /* IPOD_VIDEO */ INT_SETTING(0, battery_capacity, LANG_BATTERY_CAPACITY, BATTERY_CAPACITY_DEFAULT, "battery capacity", UNIT_MAH, @@ -1081,9 +1170,12 @@ const struct settings_list settings[] = { #endif /* tuner */ #if CONFIG_TUNER - OFFON_SETTING(0,fm_force_mono, LANG_FM_MONO_MODE, + OFFON_SETTING(0, fm_force_mono, LANG_FM_MONO_MODE, false, "force fm mono", toggle_mono_mode), - SYSTEM_SETTING(NVRAM(4),last_frequency,0), + SYSTEM_SETTING(NVRAM(4), last_frequency, 0), +#endif +#if defined(HAVE_RDS_CAP) && defined(CONFIG_RTC) + OFFON_SETTING(0, sync_rds_time, LANG_FM_SYNC_RDS_TIME, false, "sync_rds_time", NULL), #endif #if BATTERY_TYPES_COUNT > 1 @@ -1211,17 +1303,24 @@ const struct settings_list settings[] = { lcd_remote_bidir_scroll), #endif OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW, - false, "Screen Scrolls Out Of View", - gui_list_screen_scroll_out_of_view), + false, "Screen Scrolls Out Of View", NULL), INT_SETTING(F_PADTITLE, scroll_step, LANG_SCROLL_STEP, 6, "scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step), INT_SETTING(F_PADTITLE, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, 16, - "screen scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, - gui_list_screen_scroll_step), + "screen scroll step", UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, NULL), OFFON_SETTING(0,scroll_paginated,LANG_SCROLL_PAGINATED, false,"scroll paginated",NULL), OFFON_SETTING(0,list_wraparound,LANG_LIST_WRAPAROUND, true,"list wraparound",NULL), + CHOICE_SETTING(0, list_order, LANG_LIST_ORDER, +#if defined(HAVE_SCROLLWHEEL) && !defined(FIIO_M3K) + 1, +#else + 0, +#endif + /* values are defined by the enum in option_select.h */ + "list order", "descending,ascending", + NULL, 2, ID2P(LANG_DESCENDING), ID2P(LANG_ASCENDING)), #ifdef HAVE_LCD_COLOR {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1, @@ -1240,7 +1339,18 @@ const struct settings_list settings[] = { #endif /* more playback */ OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL), - OFFON_SETTING(0,single_mode,LANG_SINGLE_MODE,false,"single mode",NULL), + CHOICE_SETTING(0, single_mode, LANG_SINGLE_MODE, 0, + "single mode", + "off,track,album,album artist,artist,composer,work,genre", + NULL, 8, + ID2P(LANG_OFF), + ID2P(LANG_TRACK), + ID2P(LANG_ID3_ALBUM), + ID2P(LANG_ID3_ALBUMARTIST), + ID2P(LANG_ID3_ARTIST), + ID2P(LANG_ID3_COMPOSER), + ID2P(LANG_ID3_GROUPING), + ID2P(LANG_ID3_GENRE)), OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL), OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL), INT_SETTING(F_TIME_SETTING, ff_rewind_min_step, LANG_FFRW_STEP, 1, @@ -1434,7 +1544,7 @@ const struct settings_list settings[] = { LANG_FREQUENCY,INT(REC_FREQ_DEFAULT), "rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED}, {F_T_INT|F_RECSETTING,&global_settings.rec_format, - LANG_RECORDING_FORMAT,INT(REC_FORMAT_DEFAULT), + LANG_FORMAT,INT(REC_FORMAT_DEFAULT), "rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED}, /** Encoder settings start - keep these together **/ /* aiff_enc */ @@ -1512,6 +1622,8 @@ const struct settings_list settings[] = { "gather runtime data", NULL), TEXT_SETTING(0, tagcache_scan_paths, "database scan paths", DEFAULT_TAGCACHE_SCAN_PATHS, NULL, NULL), + TEXT_SETTING(0, tagcache_db_path, "database path", + ROCKBOX_DIR, NULL, NULL), #endif /* replay gain */ @@ -1719,12 +1831,14 @@ const struct settings_list settings[] = { ID2P(LANG_CODEPAGE_JAPANESE), ID2P(LANG_CODEPAGE_SIMPLIFIED), ID2P(LANG_CODEPAGE_KOREAN), ID2P(LANG_CODEPAGE_TRADITIONAL), ID2P(LANG_CODEPAGE_UTF8)), + OFFON_SETTING(0, warnon_erase_dynplaylist, LANG_WARN_ERASEDYNPLAYLIST_MENU, true, "warn when erasing dynamic playlist",NULL), - - OFFON_SETTING(0, show_shuffled_adding_options, LANG_SHOW_SHUFFLED_ADDING_OPTIONS, true, + OFFON_SETTING(0, keep_current_track_on_replace_playlist, LANG_KEEP_CURRENT_TRACK_ON_REPLACE, + true, "keep current track when replacing playlist",NULL), + OFFON_SETTING(0, show_shuffled_adding_options, LANG_SHOW_SHUFFLED_ADDING_OPTIONS, false, "show shuffled adding options", NULL), - CHOICE_SETTING(0, show_queue_options, LANG_SHOW_QUEUE_OPTIONS, 1, + CHOICE_SETTING(0, show_queue_options, LANG_SHOW_QUEUE_OPTIONS, 0, "show queue options", "off,on,in submenu", NULL, 3, ID2P(LANG_SET_BOOL_NO), @@ -1732,12 +1846,16 @@ const struct settings_list settings[] = { ID2P(LANG_IN_SUBMENU)), #ifdef HAVE_BACKLIGHT -#ifdef HAS_BUTTON_HOLD - CHOICE_SETTING(0, backlight_on_button_hold, LANG_BACKLIGHT_ON_BUTTON_HOLD, - 1, "backlight on button hold", "normal,off,on", + CHOICE_SETTING(0, backlight_on_button_hold, + LANG_BACKLIGHT_ON_BUTTON_HOLD, +#ifdef HAS_BUTTON_HOLD + 1, +#else + 0, +#endif + "backlight on button hold", "normal,off,on", backlight_set_on_button_hold, 3, ID2P(LANG_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)), -#endif #ifdef HAVE_LCD_SLEEP_SETTING TABLE_SETTING_LIST(F_TIME_SETTING | F_ALLOW_ARBITRARY_VALS, @@ -1798,8 +1916,6 @@ const struct settings_list settings[] = { ID2P(LANG_FM_ITALY), ID2P(LANG_FM_OTHER)), #endif - OFFON_SETTING(F_BANFROMQS, audioscrobbler, LANG_AUDIOSCROBBLER, false, - "Last.fm Logging", NULL), #if CONFIG_TUNER TEXT_SETTING(0, fmr_file, "fmr", "-", FMPRESET_PATH "/", ".fmr"), @@ -1962,6 +2078,10 @@ const struct settings_list settings[] = { "sleeptimer on startup", NULL), OFFON_SETTING(0, keypress_restarts_sleeptimer, LANG_KEYPRESS_RESTARTS_SLEEP_TIMER, false, "keypress restarts sleeptimer", set_keypress_restarts_sleep_timer), + + OFFON_SETTING(0, show_shutdown_message, LANG_SHOW_SHUTDOWN_MESSAGE, true, + "show shutdown message", NULL), + #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING /* If specific values are set for touchpad sensitivity setting we use those */ #if (defined(MAX_TOUCHPAD_SENSITIVITY_SETTING) \ @@ -2023,7 +2143,7 @@ const struct settings_list settings[] = { tsc_is_changed, tsc_set_default), #endif OFFON_SETTING(0, prevent_skip, LANG_PREVENT_SKIPPING, false, "prevent track skip", NULL), - + OFFON_SETTING(0, rewind_across_tracks, LANG_REWIND_ACROSS_TRACKS, false, "rewind across tracks", NULL), #ifdef HAVE_PITCHCONTROL OFFON_SETTING(0, pitch_mode_semitone, LANG_SEMITONE, false, "Semitone pitch change", NULL), @@ -2067,18 +2187,31 @@ const struct settings_list settings[] = { #endif #ifdef HAVE_HOTKEY - TABLE_SETTING(F_ALLOW_ARBITRARY_VALS | F_CB_ON_SELECT_ONLY, hotkey_wps, + TABLE_SETTING(F_CB_ON_SELECT_ONLY, hotkey_wps, LANG_HOTKEY_WPS, HOTKEY_VIEW_PLAYLIST, "hotkey wps", - "off,view playlist,show track info,pitchscreen,open with,delete,bookmark,plugin" - ,UNIT_INT, hotkey_formatter, hotkey_getlang, hotkey_callback,8, HOTKEY_OFF, + "off,view playlist,show track info,pitchscreen,open with,delete,bookmark,plugin,bookmark list" + ,UNIT_INT, hotkey_formatter, hotkey_getlang, hotkey_callback,9, HOTKEY_OFF, HOTKEY_VIEW_PLAYLIST, HOTKEY_SHOW_TRACK_INFO, HOTKEY_PITCHSCREEN, - HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_BOOKMARK, HOTKEY_PLUGIN), - TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, hotkey_tree, + HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_BOOKMARK, HOTKEY_PLUGIN, HOTKEY_BOOKMARK_LIST), + TABLE_SETTING(0, hotkey_tree, LANG_HOTKEY_FILE_BROWSER, HOTKEY_OFF, "hotkey tree", - "off,open with,delete,insert,insert shuffled", - UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, 5, HOTKEY_OFF, - HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_INSERT, HOTKEY_INSERT_SHUFFLED), +#ifdef HAVE_TAGCACHE + "off,properties,pictureflow,open with,delete,insert,insert shuffled", +#else + "off,properties,open with,delete,insert,insert shuffled", +#endif + UNIT_INT, hotkey_formatter, hotkey_getlang, NULL, +#ifdef HAVE_TAGCACHE + 7, +#else + 6, #endif + HOTKEY_OFF,HOTKEY_PROPERTIES, +#ifdef HAVE_TAGCACHE + HOTKEY_PICTUREFLOW, +#endif + HOTKEY_OPEN_WITH, HOTKEY_DELETE, HOTKEY_INSERT, HOTKEY_INSERT_SHUFFLED), +#endif /* HAVE_HOTKEY */ INT_SETTING(F_TIME_SETTING, resume_rewind, LANG_RESUME_REWIND, 0, "resume rewind", UNIT_SEC, 0, 60, 5, @@ -2110,19 +2243,18 @@ const struct settings_list settings[] = { LANG_USB_MODE, USBMODE_DEFAULT, "usb mode", - "ask,mass storage,charge" + "mass storage,charge" #if defined(DX50) || defined(DX90) ",adb" #endif , #if defined(DX50) || defined(DX90) ibasso_set_usb_mode, - 4, + 3, #else usb_set_mode, - 3, + 2, #endif - ID2P(LANG_ASK), ID2P(LANG_USB_MODE_MASS_STORAGE), ID2P(LANG_USB_MODE_CHARGE) #if defined(DX50) || defined(DX90) @@ -2130,6 +2262,13 @@ const struct settings_list settings[] = { #endif ), #endif +#if defined(BUTTON_REC) || \ + (CONFIG_KEYPAD == GIGABEAT_PAD) || \ + (CONFIG_KEYPAD == IPOD_4G_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H10_PAD) + OFFON_SETTING(0, clear_settings_on_hold, LANG_CLEAR_SETTINGS_ON_HOLD, + true, "clear settings on hold", NULL), +#endif }; const int nb_settings = sizeof(settings)/sizeof(*settings); |