diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-02-08 10:28:42 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-02-08 10:28:42 +0000 |
commit | fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab (patch) | |
tree | 996bf94f160d31eb8879295efb3b159ebdea0042 /apps/settings.c | |
parent | e645e2dcf2cc03c7e4c9a9d26ac93bbf82e8414b (diff) | |
download | rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.gz rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.zip |
Convert the sound menu to the new system
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12230 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/settings.c')
-rw-r--r-- | apps/settings.c | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/apps/settings.c b/apps/settings.c index 4d4a96c639..42a66ace8b 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -395,7 +395,7 @@ bool settings_load_config(const char* file, bool apply) | |||
395 | 395 | ||
396 | /** Writing to a config file and saving settings **/ | 396 | /** Writing to a config file and saving settings **/ |
397 | 397 | ||
398 | static bool cfg_int_to_string(int setting_id, int val, char* buf) | 398 | bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len) |
399 | { | 399 | { |
400 | const char* start = settings[setting_id].cfg_vals; | 400 | const char* start = settings[setting_id].cfg_vals; |
401 | char* end = NULL; | 401 | char* end = NULL; |
@@ -410,11 +410,12 @@ static bool cfg_int_to_string(int setting_id, int val, char* buf) | |||
410 | } | 410 | } |
411 | end = strchr(start,','); | 411 | end = strchr(start,','); |
412 | if (end == NULL) | 412 | if (end == NULL) |
413 | strcpy(buf,start); | 413 | strncpy(buf, start, buf_len); |
414 | else | 414 | else |
415 | { | 415 | { |
416 | strncpy(buf, start, end-start); | 416 | int len = (buf_len > (end-start))? end-start: buf_len; |
417 | buf[end-start] = '\0'; | 417 | strncpy(buf, start, len); |
418 | buf[len] = '\0'; | ||
418 | } | 419 | } |
419 | return true; | 420 | return true; |
420 | } | 421 | } |
@@ -496,12 +497,13 @@ static bool settings_write_config(char* filename, int options) | |||
496 | } | 497 | } |
497 | else | 498 | else |
498 | { | 499 | { |
499 | cfg_int_to_string(i,*(int*)settings[i].setting,value); | 500 | cfg_int_to_string(i, *(int*)settings[i].setting, |
501 | value, MAX_PATH); | ||
500 | } | 502 | } |
501 | break; | 503 | break; |
502 | case F_T_BOOL: | 504 | case F_T_BOOL: |
503 | cfg_int_to_string(i, | 505 | cfg_int_to_string(i, |
504 | *(bool*)settings[i].setting==false?0:1,value); | 506 | *(bool*)settings[i].setting==false?0:1, value, MAX_PATH); |
505 | break; | 507 | break; |
506 | case F_T_CHARPTR: | 508 | case F_T_CHARPTR: |
507 | case F_T_UCHARPTR: | 509 | case F_T_UCHARPTR: |
@@ -923,13 +925,17 @@ void settings_reset(void) { | |||
923 | } | 925 | } |
924 | 926 | ||
925 | /** Changing setting values **/ | 927 | /** Changing setting values **/ |
926 | const struct settings_list* find_setting(void* variable) | 928 | const struct settings_list* find_setting(void* variable, int *id) |
927 | { | 929 | { |
928 | int i; | 930 | int i; |
929 | for(i=0;i<nb_settings;i++) | 931 | for(i=0;i<nb_settings;i++) |
930 | { | 932 | { |
931 | if (settings[i].setting == variable) | 933 | if (settings[i].setting == variable) |
934 | { | ||
935 | if (id) | ||
936 | *id = i; | ||
932 | return &settings[i]; | 937 | return &settings[i]; |
938 | } | ||
933 | } | 939 | } |
934 | return NULL; | 940 | return NULL; |
935 | } | 941 | } |
@@ -939,7 +945,7 @@ void talk_setting(void *global_settings_variable) | |||
939 | const struct settings_list *setting; | 945 | const struct settings_list *setting; |
940 | if (global_settings.talk_menu == 0) | 946 | if (global_settings.talk_menu == 0) |
941 | return; | 947 | return; |
942 | setting = find_setting(global_settings_variable); | 948 | setting = find_setting(global_settings_variable, NULL); |
943 | if (setting == NULL) | 949 | if (setting == NULL) |
944 | return; | 950 | return; |
945 | if (setting->lang_id) | 951 | if (setting->lang_id) |
@@ -1173,6 +1179,37 @@ static bool do_set_setting(const unsigned char* string, void *variable, | |||
1173 | 1179 | ||
1174 | return false; | 1180 | return false; |
1175 | } | 1181 | } |
1182 | static const char *unit_strings[] = | ||
1183 | { | ||
1184 | [UNIT_INT] | ||
1185 | = "", | ||
1186 | [UNIT_MS] | ||
1187 | = "ms", | ||
1188 | [UNIT_SEC] | ||
1189 | = "s", | ||
1190 | [UNIT_MIN] | ||
1191 | = "min", | ||
1192 | [UNIT_HOUR] | ||
1193 | = "hr", | ||
1194 | [UNIT_KHZ] | ||
1195 | = "KHz", | ||
1196 | [UNIT_DB] | ||
1197 | = "dB", | ||
1198 | [UNIT_PERCENT] | ||
1199 | = "%", | ||
1200 | [UNIT_MAH] | ||
1201 | = "mAh", | ||
1202 | [UNIT_PIXEL] | ||
1203 | = "px", | ||
1204 | [UNIT_PER_SEC] | ||
1205 | = "per sec", | ||
1206 | [UNIT_HERTZ] | ||
1207 | = "Hz", | ||
1208 | [UNIT_MB] | ||
1209 | = "MB", | ||
1210 | [UNIT_KBIT] | ||
1211 | = "kb/s", | ||
1212 | }; | ||
1176 | bool set_int(const unsigned char* string, | 1213 | bool set_int(const unsigned char* string, |
1177 | const char* unit, | 1214 | const char* unit, |
1178 | int voice_unit, | 1215 | int voice_unit, |
@@ -1186,12 +1223,16 @@ bool set_int(const unsigned char* string, | |||
1186 | #if CONFIG_KEYPAD != PLAYER_PAD | 1223 | #if CONFIG_KEYPAD != PLAYER_PAD |
1187 | struct value_setting_data data = { | 1224 | struct value_setting_data data = { |
1188 | INT,max, step, voice_unit,unit,formatter,NULL }; | 1225 | INT,max, step, voice_unit,unit,formatter,NULL }; |
1226 | if (unit == NULL) | ||
1227 | data.unit = unit_strings[voice_unit]; | ||
1189 | return do_set_setting(string,variable,(max-min)/step + 1, | 1228 | return do_set_setting(string,variable,(max-min)/step + 1, |
1190 | (max-*variable)/step, &data,function); | 1229 | (max-*variable)/step, &data,function); |
1191 | #else | 1230 | #else |
1192 | int count = (max-min)/step + 1; | 1231 | int count = (max-min)/step + 1; |
1193 | struct value_setting_data data = { | 1232 | struct value_setting_data data = { |
1194 | INT,min, -step, voice_unit,unit,formatter,NULL }; | 1233 | INT,min, -step, voice_unit,unit,formatter,NULL }; |
1234 | if (unit == NULL) | ||
1235 | data.unit = unit_strings[voice_unit]; | ||
1195 | return do_set_setting(string,variable,count, | 1236 | return do_set_setting(string,variable,count, |
1196 | count - ((max-*variable)/step), &data,function); | 1237 | count - ((max-*variable)/step), &data,function); |
1197 | #endif | 1238 | #endif |