From d7a55e186827508a39247334405a5b473c589f9f Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Wed, 12 Mar 2003 20:21:30 +0000 Subject: Changed ON+PLAY screen to a menu, unified player & recorder and moved the code to a separate file. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3436 a1c6a512-1295-4272-9138-f99709370657 --- apps/onplay.c | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 apps/onplay.c (limited to 'apps/onplay.c') diff --git a/apps/onplay.c b/apps/onplay.c new file mode 100644 index 0000000000..571caa403b --- /dev/null +++ b/apps/onplay.c @@ -0,0 +1,163 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 Björn Stenberg + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include +#include +#include +#include + +#include "lcd.h" +#include "dir.h" +#include "file.h" +#include "mpeg.h" +#include "menu.h" +#include "lang.h" +#include "playlist.h" +#include "button.h" +#include "kernel.h" +#include "keyboard.h" + +static char* selected_file = NULL; +static bool reload_dir = false; + +static bool queue_file(void) +{ + queue_add(selected_file); + return false; +} + +static bool delete_file(void) +{ + bool exit = false; + + lcd_clear_display(); + lcd_puts(0,0,str(LANG_REALLY_DELETE)); + lcd_puts_scroll(0,1,selected_file); + + while (!exit) { + int btn = button_get(true); + switch (btn) { + case BUTTON_PLAY: + case BUTTON_PLAY | BUTTON_REL: + if (!remove(selected_file)) { + reload_dir = true; + lcd_clear_display(); + lcd_puts_scroll(0,0,selected_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; + } + } + return false; +} + +static bool rename_file(void) +{ + char newname[MAX_PATH]; + char* ptr = strrchr(selected_file, '/') + 1; + int pathlen = (ptr - selected_file); + strncpy(newname, selected_file, sizeof newname); + if (!kbd_input(newname + pathlen, (sizeof newname)-pathlen)) { + if (!strlen(selected_file+pathlen) || + (rename(selected_file, 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; + } + + return false; +} + +extern int d_1; +extern int d_2; + +static void xingupdate(int percent) +{ + char buf[32]; + + snprintf(buf, 32, "%d%%", percent); + lcd_puts(0, 3, buf); + snprintf(buf, 32, "%x", d_1); + lcd_puts(0, 4, buf); + snprintf(buf, 32, "%x", d_2); + lcd_puts(0, 5, buf); + lcd_update(); +} + +static bool vbr_fix(void) +{ + char buf[32]; + unsigned long start_tick; + unsigned long end_tick; + + lcd_clear_display(); + lcd_puts(0, 0, selected_file); + lcd_update(); + + start_tick = current_tick; + mpeg_create_xing_header(selected_file, xingupdate); + end_tick = current_tick; + + snprintf(buf, 32, "%d ticks", (int)(end_tick - start_tick)); + lcd_puts(0, 1, buf); + snprintf(buf, 32, "%d seconds", (int)(end_tick - start_tick)/HZ); + lcd_puts(0, 2, buf); + lcd_update(); + + return false; +} + +int onplay(char* file, int attr) +{ + struct menu_items menu[5]; /* increase this if you add entries! */ + int m, i=0, result; + + selected_file = file; + + if (mpeg_status() & MPEG_STATUS_PLAY) + menu[i++] = (struct menu_items) { str(LANG_QUEUE), queue_file }; + + if (!(attr & ATTR_DIRECTORY)) + menu[i++] = (struct menu_items) { str(LANG_DELETE), delete_file }; + + menu[i++] = (struct menu_items) { str(LANG_RENAME), rename_file }; + menu[i++] = (struct menu_items) { "VBRfix", vbr_fix }; + + /* DIY menu handling, since we want to exit after selection */ + m = menu_init( menu, i ); + result = menu_show(m); + if (result >= 0) + menu[result].function(); + menu_exit(m); + + return reload_dir; +} -- cgit v1.2.3