forked from len0rd/rockbox
Added ON+PLAY in dir browser for file actions: Rename, Delete and Queue.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3096 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
43d6d28e20
commit
caebdd4f00
2 changed files with 213 additions and 81 deletions
|
@ -1247,3 +1247,42 @@ desc: Visual confirmation of changing a setting
|
||||||
eng: "OK"
|
eng: "OK"
|
||||||
new:
|
new:
|
||||||
|
|
||||||
|
id: LANG_PLAYER_ONPLAY_1
|
||||||
|
desc: Line #1 of player ON+PLAY screen
|
||||||
|
eng: "\x81 Queue"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_PLAYER_ONPLAY_2
|
||||||
|
desc: Line #2 of player ON+PLAY screen
|
||||||
|
eng: "- Ren + Del"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_QUEUE
|
||||||
|
desc: The verb/action Queue
|
||||||
|
eng: "Queue"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_DELETE
|
||||||
|
desc: The verb/action Delete
|
||||||
|
eng: "Delete"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_REALLY_DELETE
|
||||||
|
desc: Really Delete?
|
||||||
|
eng: "Delete?"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_DELETED
|
||||||
|
desc: A file has beed deleted
|
||||||
|
eng: "Deleted"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_RENAME
|
||||||
|
desc: The verb/action Rename
|
||||||
|
eng: "Rename"
|
||||||
|
new:
|
||||||
|
|
||||||
|
id: LANG_FAILED
|
||||||
|
desc: Something failed. To be appended after above actions
|
||||||
|
eng: "failed"
|
||||||
|
new:
|
||||||
|
|
253
apps/tree.c
253
apps/tree.c
|
@ -49,6 +49,7 @@
|
||||||
#include "viewer.h"
|
#include "viewer.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "screens.h"
|
#include "screens.h"
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#include "widgets.h"
|
#include "widgets.h"
|
||||||
|
@ -73,6 +74,7 @@ static int cursorpos[MAX_DIR_LEVELS];
|
||||||
static char lastdir[MAX_PATH];
|
static char lastdir[MAX_PATH];
|
||||||
static char lastfile[MAX_PATH];
|
static char lastfile[MAX_PATH];
|
||||||
static char currdir[MAX_PATH];
|
static char currdir[MAX_PATH];
|
||||||
|
static bool reload_dir = false;
|
||||||
|
|
||||||
void browse_root(void)
|
void browse_root(void)
|
||||||
{
|
{
|
||||||
|
@ -203,7 +205,7 @@ static int showdir(char *path, int start)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* new dir? cache it */
|
/* new dir? cache it */
|
||||||
if (strncmp(path,lastdir,sizeof(lastdir))) {
|
if (strncmp(path,lastdir,sizeof(lastdir)) || reload_dir) {
|
||||||
DIR *dir = opendir(path);
|
DIR *dir = opendir(path);
|
||||||
if(!dir)
|
if(!dir)
|
||||||
return -1; /* not a directory */
|
return -1; /* not a directory */
|
||||||
|
@ -455,36 +457,6 @@ static int showdir(char *path, int start)
|
||||||
return filesindir;
|
return filesindir;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void show_queue_display(int queue_count, char *filename)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
|
||||||
lcd_double_height(false);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
|
||||||
lcd_setmargins(0,0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lcd_clear_display();
|
|
||||||
if (queue_count > 0)
|
|
||||||
{
|
|
||||||
char s[32];
|
|
||||||
|
|
||||||
snprintf(s, sizeof(s), str(LANG_QUEUE_QUEUED), filename);
|
|
||||||
lcd_puts(0,0,s);
|
|
||||||
|
|
||||||
snprintf(s, sizeof(s), str(LANG_QUEUE_TOTAL), queue_count);
|
|
||||||
lcd_puts(0,1,s);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lcd_puts(0,0,str(LANG_QUEUE_FULL));
|
|
||||||
}
|
|
||||||
lcd_update();
|
|
||||||
sleep(HZ);
|
|
||||||
lcd_clear_display();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ask_resume(void)
|
bool ask_resume(void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LCD_CHARCELLS
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
@ -649,8 +621,144 @@ void set_current_file(char *path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
static int onplay_screen(char* dir, char* file)
|
||||||
bool pageupdown(int* ds, int* dc, int numentries, int tree_max_on_screen )
|
{
|
||||||
|
bool exit = false;
|
||||||
|
bool used = false;
|
||||||
|
bool playing = mpeg_status() & MPEG_STATUS_PLAY;
|
||||||
|
char buf[MAX_PATH];
|
||||||
|
|
||||||
|
if ((dir[0]=='/') && (dir[1]==0))
|
||||||
|
snprintf(buf, sizeof buf, "%s%s", dir, file);
|
||||||
|
else
|
||||||
|
snprintf(buf, sizeof buf, "%s/%s", dir, file);
|
||||||
|
|
||||||
|
lcd_stop_scroll();
|
||||||
|
lcd_clear_display();
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
{
|
||||||
|
int w,h;
|
||||||
|
char* ptr;
|
||||||
|
|
||||||
|
lcd_setfont(FONT_SYSFIXED);
|
||||||
|
|
||||||
|
if (playing) {
|
||||||
|
ptr = str(LANG_QUEUE);
|
||||||
|
lcd_getstringsize(ptr,&w,&h);
|
||||||
|
lcd_putsxy((LCD_WIDTH-w)/2, h*2, ptr);
|
||||||
|
lcd_bitmap(bitmap_icons_7x8[Icon_Play],
|
||||||
|
LCD_WIDTH/2 - 3, LCD_HEIGHT/2 - 4, 7, 8, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = str(LANG_DELETE);
|
||||||
|
lcd_getstringsize(ptr,&w,&h);
|
||||||
|
lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h/2, ptr);
|
||||||
|
lcd_bitmap(bitmap_icons_7x8[Icon_FastForward],
|
||||||
|
LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true);
|
||||||
|
|
||||||
|
lcd_putsxy(0, LCD_HEIGHT/2 - h/2, str(LANG_RENAME));
|
||||||
|
lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
|
||||||
|
LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
lcd_puts(0,0,str(LANG_PLAYER_ONPLAY_1));
|
||||||
|
lcd_puts(0,1,str(LANG_PLAYER_ONPLAY_2));
|
||||||
|
#endif
|
||||||
|
lcd_update();
|
||||||
|
|
||||||
|
|
||||||
|
while (!exit) {
|
||||||
|
switch (button_get(true)) {
|
||||||
|
case BUTTON_LEFT:
|
||||||
|
case BUTTON_ON | BUTTON_LEFT: {
|
||||||
|
char newname[MAX_PATH];
|
||||||
|
char* ptr = strrchr(buf, '/') + 1;
|
||||||
|
int pathlen = (ptr - buf);
|
||||||
|
strncpy(newname, buf, sizeof newname);
|
||||||
|
if (!kbd_input(newname + pathlen, (sizeof newname)-pathlen)) {
|
||||||
|
if (rename(buf, newname) < 0) {
|
||||||
|
lcd_clear_display();
|
||||||
|
lcd_puts(0,0,str(LANG_RENAME));
|
||||||
|
lcd_puts(0,1,str(LANG_FAILED));
|
||||||
|
lcd_update();
|
||||||
|
sleep(HZ*2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
reload_dir = true;
|
||||||
|
}
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BUTTON_RIGHT:
|
||||||
|
case BUTTON_ON | BUTTON_RIGHT:
|
||||||
|
lcd_clear_display();
|
||||||
|
#ifdef HAVE_LCD_CHARCELLS
|
||||||
|
lcd_puts(0,0,file);
|
||||||
|
lcd_puts(0,1,str(LANG_REALLY_DELETE));
|
||||||
|
#else
|
||||||
|
lcd_puts(0,0,str(LANG_REALLY_DELETE));
|
||||||
|
lcd_puts(0,1,file);
|
||||||
|
lcd_puts(0,3,str(LANG_RESUME_CONFIRM_RECORDER));
|
||||||
|
lcd_puts(0,4,str(LANG_RESUME_CANCEL_RECORDER));
|
||||||
|
#endif
|
||||||
|
lcd_update();
|
||||||
|
while (!exit) {
|
||||||
|
int btn = button_get(true);
|
||||||
|
switch (btn) {
|
||||||
|
case BUTTON_PLAY:
|
||||||
|
case BUTTON_PLAY | BUTTON_REL:
|
||||||
|
if (!remove(buf)) {
|
||||||
|
reload_dir = true;
|
||||||
|
lcd_clear_display();
|
||||||
|
lcd_puts(0,0,file);
|
||||||
|
lcd_puts(0,1,str(LANG_DELETED));
|
||||||
|
lcd_update();
|
||||||
|
sleep(HZ);
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* ignore button releases */
|
||||||
|
if (!(btn & BUTTON_REL))
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BUTTON_PLAY:
|
||||||
|
case BUTTON_ON | BUTTON_PLAY: {
|
||||||
|
if (playing)
|
||||||
|
queue_add(buf);
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BUTTON_ON | BUTTON_REL:
|
||||||
|
used = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BUTTON_ON:
|
||||||
|
if (used)
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BUTTON_OFF:
|
||||||
|
exit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LCD_BITMAP
|
||||||
|
lcd_setfont(FONT_UI);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool handle_on(int* ds, int* dc, int numentries, int tree_max_on_screen)
|
||||||
{
|
{
|
||||||
bool exit = false;
|
bool exit = false;
|
||||||
bool used = false;
|
bool used = false;
|
||||||
|
@ -660,9 +768,9 @@ bool pageupdown(int* ds, int* dc, int numentries, int tree_max_on_screen )
|
||||||
|
|
||||||
while (!exit) {
|
while (!exit) {
|
||||||
switch (button_get(true)) {
|
switch (button_get(true)) {
|
||||||
case BUTTON_UP:
|
case TREE_PREV:
|
||||||
case BUTTON_ON | BUTTON_UP:
|
case BUTTON_ON | TREE_PREV:
|
||||||
case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT:
|
case BUTTON_ON | TREE_PREV | BUTTON_REPEAT:
|
||||||
used = true;
|
used = true;
|
||||||
if ( dirstart ) {
|
if ( dirstart ) {
|
||||||
dirstart -= tree_max_on_screen;
|
dirstart -= tree_max_on_screen;
|
||||||
|
@ -673,9 +781,9 @@ bool pageupdown(int* ds, int* dc, int numentries, int tree_max_on_screen )
|
||||||
dircursor = 0;
|
dircursor = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_DOWN:
|
case TREE_NEXT:
|
||||||
case BUTTON_ON | BUTTON_DOWN:
|
case BUTTON_ON | TREE_NEXT:
|
||||||
case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:
|
case BUTTON_ON | TREE_NEXT | BUTTON_REPEAT:
|
||||||
used = true;
|
used = true;
|
||||||
if ( dirstart < numentries - tree_max_on_screen ) {
|
if ( dirstart < numentries - tree_max_on_screen ) {
|
||||||
dirstart += tree_max_on_screen;
|
dirstart += tree_max_on_screen;
|
||||||
|
@ -687,17 +795,21 @@ bool pageupdown(int* ds, int* dc, int numentries, int tree_max_on_screen )
|
||||||
dircursor = numentries - dirstart - 1;
|
dircursor = numentries - dirstart - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef SIMULATOR
|
|
||||||
case BUTTON_ON:
|
case BUTTON_PLAY:
|
||||||
#else
|
case BUTTON_ON | BUTTON_PLAY:
|
||||||
|
onplay_screen(currdir, dircache[dircursor+dirstart].name);
|
||||||
|
exit = true;
|
||||||
|
used = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case BUTTON_ON | BUTTON_REL:
|
case BUTTON_ON | BUTTON_REL:
|
||||||
case BUTTON_ON | BUTTON_UP | BUTTON_REL:
|
case BUTTON_ON | TREE_PREV | BUTTON_REL:
|
||||||
case BUTTON_ON | BUTTON_DOWN | BUTTON_REL:
|
case BUTTON_ON | TREE_NEXT | BUTTON_REL:
|
||||||
#endif
|
|
||||||
exit = true;
|
exit = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( used ) {
|
if ( used && !exit ) {
|
||||||
showdir(currdir, dirstart);
|
showdir(currdir, dirstart);
|
||||||
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
|
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
|
||||||
lcd_update();
|
lcd_update();
|
||||||
|
@ -708,7 +820,6 @@ bool pageupdown(int* ds, int* dc, int numentries, int tree_max_on_screen )
|
||||||
|
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static void storefile(char* filename, char* setting, int maxlen)
|
static void storefile(char* filename, char* setting, int maxlen)
|
||||||
{
|
{
|
||||||
|
@ -814,10 +925,10 @@ bool dirbrowse(char *root)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case TREE_ENTER | BUTTON_REL:
|
case TREE_ENTER:
|
||||||
case TREE_ENTER | BUTTON_REPEAT:
|
case TREE_ENTER | BUTTON_REPEAT:
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
#ifdef HAVE_RECORDER_KEYPAD
|
||||||
case BUTTON_PLAY | BUTTON_REL:
|
case BUTTON_PLAY:
|
||||||
case BUTTON_PLAY | BUTTON_REPEAT:
|
case BUTTON_PLAY | BUTTON_REPEAT:
|
||||||
#endif
|
#endif
|
||||||
if ( !numentries )
|
if ( !numentries )
|
||||||
|
@ -838,7 +949,6 @@ bool dirbrowse(char *root)
|
||||||
dircursor=0;
|
dircursor=0;
|
||||||
dirstart=0;
|
dirstart=0;
|
||||||
} else {
|
} else {
|
||||||
static int repeat_count = 0;
|
|
||||||
int seed = current_tick;
|
int seed = current_tick;
|
||||||
bool play = false;
|
bool play = false;
|
||||||
int start_index=0;
|
int start_index=0;
|
||||||
|
@ -857,34 +967,18 @@ bool dirbrowse(char *root)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TREE_ATTR_MPA:
|
case TREE_ATTR_MPA:
|
||||||
if (button & BUTTON_REPEAT &&
|
if ( global_settings.resume )
|
||||||
mpeg_status() & MPEG_STATUS_PLAY)
|
strncpy(global_settings.resume_file,
|
||||||
{
|
currdir, MAX_PATH);
|
||||||
int queue_count = queue_add(buf);
|
start_index =
|
||||||
show_queue_display(queue_count,
|
build_playlist(dircursor+dirstart);
|
||||||
file->name);
|
|
||||||
|
|
||||||
while( !(button_get(true) & BUTTON_REL) ) ;
|
|
||||||
|
|
||||||
repeat_count = 0;
|
|
||||||
restore = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
repeat_count = 0;
|
|
||||||
if ( global_settings.resume )
|
|
||||||
strncpy(global_settings.resume_file,
|
|
||||||
currdir, MAX_PATH);
|
|
||||||
start_index =
|
|
||||||
build_playlist(dircursor+dirstart);
|
|
||||||
|
|
||||||
/* it is important that we get back the index
|
/* it is important that we get back the index
|
||||||
in the (shuffled) list and store that */
|
in the (shuffled) list and store that */
|
||||||
start_index = play_list(currdir, NULL,
|
start_index = play_list(currdir, NULL,
|
||||||
start_index, false,
|
start_index, false,
|
||||||
0, seed, 0, 0, -1);
|
0, seed, 0, 0, -1);
|
||||||
play = true;
|
play = true;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* wps config file */
|
/* wps config file */
|
||||||
|
@ -1073,15 +1167,13 @@ bool dirbrowse(char *root)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUTTON_ON:
|
case BUTTON_ON:
|
||||||
#ifdef HAVE_RECORDER_KEYPAD
|
if (handle_on(&dirstart, &dircursor, numentries,
|
||||||
if (pageupdown(&dirstart, &dircursor, numentries,
|
tree_max_on_screen))
|
||||||
tree_max_on_screen))
|
|
||||||
{
|
{
|
||||||
/* start scroll */
|
/* start scroll */
|
||||||
restore = true;
|
restore = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
if (mpeg_status() & MPEG_STATUS_PLAY)
|
if (mpeg_status() & MPEG_STATUS_PLAY)
|
||||||
{
|
{
|
||||||
|
@ -1146,7 +1238,7 @@ bool dirbrowse(char *root)
|
||||||
restore = true;
|
restore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( restore ) {
|
if (restore || reload_dir) {
|
||||||
/* restore display */
|
/* restore display */
|
||||||
/* We need to adjust if the number of lines on screen have
|
/* We need to adjust if the number of lines on screen have
|
||||||
changed because of a status bar change */
|
changed because of a status bar change */
|
||||||
|
@ -1163,6 +1255,7 @@ bool dirbrowse(char *root)
|
||||||
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
|
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
|
||||||
|
|
||||||
need_update = true;
|
need_update = true;
|
||||||
|
reload_dir = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( numentries ) {
|
if ( numentries ) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue