diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/lang/english.lang | 30 | ||||
-rw-r--r-- | apps/screens.c | 27 | ||||
-rw-r--r-- | apps/settings.c | 13 | ||||
-rw-r--r-- | apps/settings.h | 9 | ||||
-rw-r--r-- | apps/settings_menu.c | 19 | ||||
-rw-r--r-- | apps/tree.c | 44 |
6 files changed, 86 insertions, 56 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 657e40e247..bc9328e154 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -173,17 +173,17 @@ new: id: LANG_HIDDEN desc: in settings_menu -eng: "Hidden Files" +eng: "" new: id: LANG_HIDDEN_SHOW desc: in settings_menu -eng: "Show" +eng: "" new: id: LANG_HIDDEN_HIDE desc: in settings_menu -eng: "Hide" +eng: "" new: id: LANG_CONTRAST @@ -203,7 +203,7 @@ new: id: LANG_MP3FILTER desc: in settings_menu -eng: "Music Filter" +eng: "" new: id: LANG_SORT_CASE @@ -586,7 +586,7 @@ new: id: LANG_DIR_FILTER desc: in wps F2 pressed -eng: "Dir filter: %s" +eng: "" new: id: LANG_F3_STATUS @@ -804,3 +804,23 @@ id: LANG_LANGUAGE_LOADED desc: shown when a language has been loaded from the dir browser eng: "new language" new: + +id: LANG_FILTER +desc: setting name for dir filter +eng: "Show files" +new: + +id: LANG_FILTER_MUSIC +desc: show only music-related files +eng: "Music" +new: + +id: LANG_FILTER_SUPPORTED +desc: show all file types supported by Rockbox +eng: "Supported" +new: + +id: LANG_FILTER_ALL +desc: show all files +eng: "All" +new: diff --git a/apps/screens.c b/apps/screens.c index 29888ff358..00106df8ba 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -167,6 +167,8 @@ bool f2_screen(void) lcd_stop_scroll(); while (!exit) { + char* ptr=NULL; + lcd_clear_display(); lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_SHUFFLE)); @@ -177,12 +179,25 @@ bool f2_screen(void) lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); - snprintf(buf, sizeof buf, str(LANG_DIR_FILTER), - global_settings.mp3filter ? str(LANG_ON) : str(LANG_OFF)); + switch ( global_settings.dirfilter ) { + case SHOW_ALL: + ptr = str(LANG_FILTER_ALL); + break; + + case SHOW_SUPPORTED: + ptr = str(LANG_FILTER_SUPPORTED); + break; + + case SHOW_MUSIC: + ptr = str(LANG_FILTER_MUSIC); + break; + } - /* Get the string width and height */ + snprintf(buf, sizeof buf, "%s:", str(LANG_FILTER)); lcd_getstringsize(buf,&w,&h); - lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, buf); + lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); + lcd_getstringsize(ptr,&w,&h); + lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); @@ -203,7 +218,9 @@ bool f2_screen(void) case BUTTON_DOWN: case BUTTON_F2 | BUTTON_DOWN: - global_settings.mp3filter = !global_settings.mp3filter; + global_settings.dirfilter++; + if ( global_settings.dirfilter >= NUM_FILTER_MODES ) + global_settings.dirfilter = 0; used = true; break; diff --git a/apps/settings.c b/apps/settings.c index 673bca70d1..e488be30da 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -71,7 +71,7 @@ offset abs 0x0b 0x1f <backlight byte> 0x0c 0x20 <poweroff timer byte> 0x0d 0x21 <resume settings byte> -0x0e 0x22 <shuffle,mp3filter,sort_case,discharge,statusbar,show_hidden, +0x0e 0x22 <shuffle,dirfilter,sort_case,discharge,statusbar,show_hidden, scroll bar> 0x0f 0x23 <scroll speed> 0x10 0x24 <ff/rewind min step, acceleration rate> @@ -267,11 +267,11 @@ int settings_save( void ) config_block[0xe] = (unsigned char) ((global_settings.playlist_shuffle & 1) | - ((global_settings.mp3filter & 1) << 1) | + ((global_settings.dirfilter & 1) << 1) | ((global_settings.sort_case & 1) << 2) | ((global_settings.discharge & 1) << 3) | ((global_settings.statusbar & 1) << 4) | - ((global_settings.show_hidden_files & 1) << 5) | + ((global_settings.dirfilter & 2) << 4) | ((global_settings.scrollbar & 1) << 6)); config_block[0xf] = (unsigned char)(global_settings.scroll_speed << 3); @@ -361,11 +361,11 @@ void settings_load(void) global_settings.resume = config_block[0xd]; if (config_block[0xe] != 0xFF) { global_settings.playlist_shuffle = config_block[0xe] & 1; - global_settings.mp3filter = (config_block[0xe] >> 1) & 1; + global_settings.dirfilter = (config_block[0xe] >> 1) & 1; global_settings.sort_case = (config_block[0xe] >> 2) & 1; global_settings.discharge = (config_block[0xe] >> 3) & 1; global_settings.statusbar = (config_block[0xe] >> 4) & 1; - global_settings.show_hidden_files = (config_block[0xe] >> 5) & 1; + global_settings.dirfilter |= ((config_block[0xe] >> 5) & 1) << 1; global_settings.scrollbar = (config_block[0xe] >> 6) & 1; /* Don't use the last bit, it must be unused to detect an uninitialized entry */ @@ -594,7 +594,7 @@ void settings_reset(void) { global_settings.contrast = DEFAULT_CONTRAST_SETTING; global_settings.poweroff = DEFAULT_POWEROFF_SETTING; global_settings.backlight = DEFAULT_BACKLIGHT_SETTING; - global_settings.mp3filter = true; + global_settings.dirfilter = SHOW_MUSIC; global_settings.sort_case = false; global_settings.statusbar = true; global_settings.scrollbar = true; @@ -603,7 +603,6 @@ void settings_reset(void) { global_settings.discharge = 0; global_settings.total_uptime = 0; global_settings.scroll_speed = 8; - global_settings.show_hidden_files = false; global_settings.ff_rewind_min_step = DEFAULT_FF_REWIND_MIN_STEP; global_settings.ff_rewind_accel = DEFAULT_FF_REWIND_ACCEL_SETTING; global_settings.resume_index = -1; diff --git a/apps/settings.h b/apps/settings.h index 1539d6d2e3..048c673539 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -77,7 +77,7 @@ struct user_settings /* misc options */ int loop_playlist; /* do we return to top of playlist at end? */ - bool mp3filter; /* only display mp3/m3u files and dirs in directory? */ + int dirfilter; /* 0=display all, 1=only supported, 2=only music */ bool sort_case; /* dir sort order: 0=case insensitive, 1=sensitive */ int scroll_speed; /* long texts scrolling speed: 1-30 */ bool playlist_shuffle; @@ -92,10 +92,6 @@ struct user_settings /* show scroll bar */ bool scrollbar; /* 0=hide, 1=show */ - /* Hidden and dotfile settings */ - bool show_hidden_files; /* 1=show dotfiles/hidden, - 0=hide dotfiles/hidden */ - /* goto current song when exiting WPS */ bool browse_current; /* 1=goto current song, 0=goto previous location */ @@ -148,4 +144,7 @@ extern char rockboxdir[]; #define DEFAULT_FF_REWIND_MIN_STEP FF_REWIND_1000 #define DEFAULT_FF_REWIND_ACCEL_SETTING 3 +/* dir filter options */ +enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, NUM_FILTER_MODES }; + #endif /* __SETTINGS_H__ */ diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 41afc72468..8aba4bc2f2 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c @@ -38,14 +38,6 @@ #include "ata.h" #include "lang.h" -static bool show_hidden_files(void) -{ - return set_bool_options( str(LANG_HIDDEN), - &global_settings.show_hidden_files, - str(LANG_HIDDEN_SHOW), - str(LANG_HIDDEN_HIDE) ); -} - static bool contrast(void) { return set_int( str(LANG_CONTRAST), "", &global_settings.contrast, @@ -64,9 +56,13 @@ static bool play_selected(void) return set_bool( str(LANG_PLAY_SELECTED), &global_settings.play_selected ); } -static bool mp3_filter(void) +static bool dir_filter(void) { - return set_bool( str(LANG_MP3FILTER), &global_settings.mp3filter ); + char* names[] = { str(LANG_FILTER_ALL), + str(LANG_FILTER_SUPPORTED), + str(LANG_FILTER_MUSIC) }; + return set_option( str(LANG_FILTER), &global_settings.dirfilter, + names, 3, NULL ); } static bool sort_case(void) @@ -298,8 +294,7 @@ static bool fileview_settings_menu(void) struct menu_items items[] = { { str(LANG_CASE_MENU), sort_case }, - { str(LANG_MP3FILTER), mp3_filter }, - { str(LANG_HIDDEN), show_hidden_files }, + { str(LANG_FILTER), dir_filter }, { str(LANG_FOLLOW), browse_current }, }; diff --git a/apps/tree.c b/apps/tree.c index 3aba7fa3b4..d433787e4b 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -235,8 +235,8 @@ static int showdir(char *path, int start) continue; } - /* Skip dotfiles if set to skip them */ - if (!global_settings.show_hidden_files && + /* filter out dotfiles and hidden files */ + if (global_settings.dirfilter != SHOW_ALL && ((entry->d_name[0]=='.') || (entry->attribute & ATTR_HIDDEN))) { i--; @@ -269,15 +269,22 @@ static int showdir(char *path, int start) dptr->attr |= TREE_ATTR_MOD; } - /* filter non-mp3 or m3u files */ - if ( global_settings.mp3filter && + /* filter out non-music files */ + if ( global_settings.dirfilter == SHOW_MUSIC && (!(dptr->attr & (ATTR_DIRECTORY|TREE_ATTR_MPA|TREE_ATTR_M3U))) ) { i--; continue; } - if(len > NAME_BUFFER_SIZE - name_buffer_length - 1) { + /* filter out non-supported files */ + if ( global_settings.dirfilter == SHOW_SUPPORTED && + (!(dptr->attr & TREE_ATTR_MASK)) ) { + i--; + continue; + } + + if (len > NAME_BUFFER_SIZE - name_buffer_length - 1) { /* Tell the world that we ran out of buffer space */ dir_buffer_full = true; break; @@ -407,8 +414,8 @@ static int showdir(char *path, int start) #endif } - /* if MP3 filter is on, cut off the extension */ - if (global_settings.mp3filter && + /* if music filter is on, cut off the extension */ + if (global_settings.dirfilter == SHOW_MUSIC && (dircache[i].attr & (TREE_ATTR_M3U|TREE_ATTR_MPA))) { char temp = dircache[i].name[len-4]; @@ -587,9 +594,8 @@ bool dirbrowse(char *root) int button; int tree_max_on_screen; bool reload_root = false; - bool lastfilter = global_settings.mp3filter; + int lastfilter = global_settings.dirfilter; bool lastsortcase = global_settings.sort_case; - bool lastshowhidden = global_settings.show_hidden_files; #ifdef HAVE_LCD_BITMAP int fw, fh; lcd_getstringsize("A", &fw, &fh); @@ -927,9 +933,8 @@ bool dirbrowse(char *root) /* do we need to rescan dir? */ if (reload_root || - lastfilter != global_settings.mp3filter || - lastsortcase != global_settings.sort_case || - lastshowhidden != global_settings.show_hidden_files) + lastfilter != global_settings.dirfilter || + lastsortcase != global_settings.sort_case) { if ( reload_root ) { strcpy(currdir, "/"); @@ -939,9 +944,8 @@ bool dirbrowse(char *root) dircursor = 0; dirstart = 0; lastdir[0] = 0; - lastfilter = global_settings.mp3filter; + lastfilter = global_settings.dirfilter; lastsortcase = global_settings.sort_case; - lastshowhidden = global_settings.show_hidden_files; restore = true; } @@ -964,25 +968,21 @@ bool dirbrowse(char *root) if(lasti!=i || restore) { lasti=i; lcd_stop_scroll(); - if (global_settings.mp3filter && - (dircache[i].attr & - (TREE_ATTR_M3U|TREE_ATTR_MPA))) + if (global_settings.dirfilter == SHOW_MUSIC && + (dircache[i].attr & (TREE_ATTR_M3U|TREE_ATTR_MPA))) { int len = strlen(dircache[i].name); char temp = dircache[i].name[len-4]; dircache[i].name[len-4] = 0; - lcd_puts_scroll(LINE_X, dircursor, - dircache[i].name); + lcd_puts_scroll(LINE_X, dircursor, dircache[i].name); dircache[i].name[len-4] = temp; } else - lcd_puts_scroll(LINE_X, dircursor, - dircache[i].name); + lcd_puts_scroll(LINE_X, dircursor, dircache[i].name); } } status_draw(); lcd_update(); - } return false; |