diff options
author | Eric Linenberg <elinenbe@umich.edu> | 2002-08-06 18:11:00 +0000 |
---|---|---|
committer | Eric Linenberg <elinenbe@umich.edu> | 2002-08-06 18:11:00 +0000 |
commit | 9e91b95c7a1e0be8d9cb6c71be4b34ff0df53a5a (patch) | |
tree | 7e3f81d448ad3ecffbbc1a90852ccfa0dfae0333 /apps | |
parent | e4b8c04788dd71b69f7703345eb10e3f3bc52a6c (diff) |
added a speedup for browsing long directories
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1565 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/tree.c | 121 |
1 files changed, 116 insertions, 5 deletions
diff --git a/apps/tree.c b/apps/tree.c index 308ea9c649..54e0b75551 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -266,6 +266,8 @@ bool dirbrowse(char *root) int i; int rc; int button; + int browse_speed = 0; + memcpy(currdir,root,sizeof(currdir)); numentries = showdir(root, start); @@ -335,6 +337,7 @@ bool dirbrowse(char *root) #ifdef HAVE_RECORDER_KEYPAD case BUTTON_PLAY: #endif + browse_speed = 0; if ( !numentries ) break; if ((currdir[0]=='/') && (currdir[1]==0)) { @@ -386,11 +389,63 @@ bool dirbrowse(char *root) } restore = true; break; - - case TREE_PREV: + case TREE_PREV | BUTTON_REPEAT: - if(filesindir) - { + browse_speed++; /* increase the browse speed every time we get here */ + if(filesindir) { + if(dircursor) { + if (browse_speed < 7) { + /* moving the cursor up through a full screen */ + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + dircursor--; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + else { + /* if we have wrapped from the bottom we want to keep up the speed */ + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + dircursor=0; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + } + else { + if (start) { + /* leaving the cursor at top line and moving screen down */ + if (browse_speed >=7) + start = start - 7; + else + start--; + if (start<0) + start=0; + numentries = showdir(currdir, start); + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + else { + /* wrapping to the top in a directory that is not full */ + if (numentries < TREE_MAX_ON_SCREEN) { + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + dircursor = numentries - 1; + browse_speed=0; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + true); + } + else { + /* starting at the very bottom after a wrap */ + start = numentries - TREE_MAX_ON_SCREEN; + dircursor = TREE_MAX_ON_SCREEN - 1; + numentries = showdir(currdir, start); + put_cursorxy(0, CURSOR_Y + LINE_Y + + TREE_MAX_ON_SCREEN - 1, true); + } + } + } + } + break; + case TREE_PREV: + browse_speed = 0; + if(filesindir) { if(dircursor) { put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, false); dircursor--; @@ -422,9 +477,63 @@ bool dirbrowse(char *root) lcd_update(); } break; + case TREE_NEXT | BUTTON_REPEAT: + browse_speed++; /* increase the browse speed every time we get here */ + if(filesindir) + { + if (dircursor + start + 1 < numentries ) { + if(dircursor+1 < TREE_MAX_ON_SCREEN) { + if (browse_speed < 7) { + /* moving the cursor down through a full screen */ + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + dircursor++; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + else { + /* if we have wrapped from the bottom we want to keep up the speed */ + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + dircursor=7; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + + } + else { + /* leaving the cursor at bottom line and moving screen up */ + if (browse_speed >= TREE_MAX_ON_SCREEN-1) + /* make sure we do not go past the end of the directory */ + if (start + TREE_MAX_ON_SCREEN - 1 < numentries-TREE_MAX_ON_SCREEN) + start = start + TREE_MAX_ON_SCREEN -1; + else + start = numentries-TREE_MAX_ON_SCREEN; + else + start++; + numentries = showdir(currdir, start); + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + } + else { + /* restarting at the top when there is less than 7 files */ + if(numentries < TREE_MAX_ON_SCREEN) { + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, + false); + start = dircursor = browse_speed = 0; + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + else { + /* restarting at the top when the screen scrolls */ + start = dircursor = 0 ; + numentries = showdir(currdir, start); + put_cursorxy(0, CURSOR_Y + LINE_Y+dircursor, true); + } + } + lcd_update(); + } + break; case TREE_NEXT: - case TREE_NEXT | BUTTON_REPEAT: + browse_speed = 0; if(filesindir) { if (dircursor + start + 1 < numentries ) { @@ -458,6 +567,7 @@ bool dirbrowse(char *root) break; case TREE_MENU: { + browse_speed = 0; bool lastfilter = global_settings.mp3filter; bool lastsortcase = global_settings.sort_case; lcd_stop_scroll(); @@ -471,6 +581,7 @@ bool dirbrowse(char *root) } case BUTTON_ON: + browse_speed = 0; /* The mpeg thread may have stopped playing, so we'd better update our status */ if(!mpeg_is_playing()) |