summaryrefslogtreecommitdiffstats
path: root/apps/settings_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/settings_list.c')
-rw-r--r--apps/settings_list.c353
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);