forked from len0rd/rockbox
Dave Chapman's browse subdirs too patch applied
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@455 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
551d8368aa
commit
ff2e651d29
1 changed files with 50 additions and 9 deletions
|
|
@ -34,8 +34,6 @@
|
||||||
#define TREE_MAX_ON_SCREEN 7
|
#define TREE_MAX_ON_SCREEN 7
|
||||||
#define TREE_MAX_LEN_DISPLAY 17 /* max length that fits on screen */
|
#define TREE_MAX_LEN_DISPLAY 17 /* max length that fits on screen */
|
||||||
|
|
||||||
int dircursor=0;
|
|
||||||
|
|
||||||
void browse_root(void) {
|
void browse_root(void) {
|
||||||
dirbrowse("/");
|
dirbrowse("/");
|
||||||
}
|
}
|
||||||
|
|
@ -52,6 +50,11 @@ struct entry {
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
|
||||||
|
bool is_dir(char* path) {
|
||||||
|
DIR* dir = opendir(path);
|
||||||
|
return(dir!=0);
|
||||||
|
}
|
||||||
|
|
||||||
int static
|
int static
|
||||||
showdir(char *path, struct entry *buffer, int start)
|
showdir(char *path, struct entry *buffer, int start)
|
||||||
{
|
{
|
||||||
|
|
@ -60,7 +63,7 @@ showdir(char *path, struct entry *buffer, int start)
|
||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
|
|
||||||
if(!dir)
|
if(!dir)
|
||||||
return 0; /* no entries */
|
return -1; /* not a directory */
|
||||||
|
|
||||||
i=start;
|
i=start;
|
||||||
while((entry = readdir(dir))) {
|
while((entry = readdir(dir))) {
|
||||||
|
|
@ -92,7 +95,6 @@ showdir(char *path, struct entry *buffer, int start)
|
||||||
if(++i >= TREE_MAX_ON_SCREEN)
|
if(++i >= TREE_MAX_ON_SCREEN)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i--; /* number of files on screen */
|
|
||||||
|
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
||||||
|
|
@ -105,14 +107,21 @@ bool dirbrowse(char *root)
|
||||||
{
|
{
|
||||||
struct entry buffer[TREE_MAX_ON_SCREEN];
|
struct entry buffer[TREE_MAX_ON_SCREEN];
|
||||||
int numentries;
|
int numentries;
|
||||||
|
char buf[255];
|
||||||
|
char currdir[255];
|
||||||
|
int dircursor=0;
|
||||||
|
int i;
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
lcd_clear_display();
|
lcd_clear_display();
|
||||||
|
|
||||||
lcd_puts(0,0, "[Browse]", 0);
|
lcd_puts(0,0, "[Browse]", 0);
|
||||||
|
memcpy(currdir,root,sizeof(currdir));
|
||||||
|
|
||||||
numentries = showdir(root, buffer, 0);
|
numentries = showdir(root, buffer, 0);
|
||||||
|
|
||||||
|
if (numentries == -1) return -1; /* root is not a directory */
|
||||||
|
|
||||||
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
||||||
|
|
||||||
lcd_update();
|
lcd_update();
|
||||||
|
|
@ -126,17 +135,49 @@ bool dirbrowse(char *root)
|
||||||
}
|
}
|
||||||
switch(key) {
|
switch(key) {
|
||||||
case BUTTON_OFF:
|
case BUTTON_OFF:
|
||||||
case BUTTON_LEFT:
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BUTTON_LEFT:
|
||||||
|
i=strlen(currdir);
|
||||||
|
if (i==1) {
|
||||||
|
return FALSE;
|
||||||
|
} else {
|
||||||
|
while (currdir[i-1]!='/') i--;
|
||||||
|
strcpy(buf,&currdir[i]);
|
||||||
|
if (i==1) currdir[i]=0;
|
||||||
|
else currdir[i-1]=0;
|
||||||
|
|
||||||
|
lcd_clear_display();
|
||||||
|
lcd_puts(0,0, "[Browse]", 0);
|
||||||
|
numentries = showdir(currdir, buffer, 0);
|
||||||
|
dircursor=0;
|
||||||
|
while ( (dircursor < TREE_MAX_ON_SCREEN) &&
|
||||||
|
(strcmp(buffer[dircursor].name,buf)!=0)) dircursor++;
|
||||||
|
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
||||||
|
lcd_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case BUTTON_RIGHT:
|
case BUTTON_RIGHT:
|
||||||
case BUTTON_PLAY:
|
case BUTTON_PLAY:
|
||||||
playtune(root, buffer[dircursor].name);
|
if ((currdir[0]=='/') && (currdir[1]==0)) {
|
||||||
|
sprintf(buf,"%s%s",currdir,buffer[dircursor].name);
|
||||||
|
} else {
|
||||||
|
sprintf(buf,"%s/%s",currdir,buffer[dircursor].name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir(buf)) {
|
||||||
|
memcpy(currdir,buf,sizeof(currdir));
|
||||||
|
dircursor=0;
|
||||||
|
} else {
|
||||||
|
playtune(currdir, buffer[dircursor].name);
|
||||||
|
}
|
||||||
|
|
||||||
lcd_clear_display();
|
lcd_clear_display();
|
||||||
lcd_puts(0,0, "[Browse]", 0);
|
lcd_puts(0,0, "[Browse]", 0);
|
||||||
numentries = showdir(root, buffer, 0);
|
numentries = showdir(currdir, buffer, 0);
|
||||||
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
||||||
lcd_update();
|
lcd_update();
|
||||||
break;
|
break;
|
||||||
|
|
@ -150,7 +191,7 @@ bool dirbrowse(char *root)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BUTTON_DOWN:
|
case BUTTON_DOWN:
|
||||||
if(dircursor < numentries) {
|
if(dircursor+1 < numentries) {
|
||||||
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, " ", 0);
|
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, " ", 0);
|
||||||
dircursor++;
|
dircursor++;
|
||||||
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
lcd_puts(0, LINE_Y+dircursor*LINE_HEIGTH, "-", 0);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue