1
0
Fork 0
forked from len0rd/rockbox

Renamed "wps.config" to "default.wps".

Added *.wps loading from dir browser.
Added ugly 'wps' icon. :-)


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2131 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Björn Stenberg 2002-09-02 12:46:32 +00:00
parent 52a87c7ce7
commit 1a682bedad
5 changed files with 163 additions and 130 deletions

View file

@ -64,6 +64,8 @@ unsigned char bitmap_icons_6x8[LastIcon][6] =
{ 0x00, 0x1c, 0x3e, 0x3e, 0x3e, 0x1c },
/* Cursor / Marker */
{ 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00 },
/* WPS file */
{ 0x03, 0x3a, 0x9b, 0xe0, 0x20, 0x00 },
};
static unsigned char bitmap_icon_7x8[][7] =

View file

@ -27,7 +27,7 @@
enum icons_6x8 {
Box_Filled, Box_Empty, Slider_Horizontal, File,
Folder, Directory, Playlist, Repeat,
Selected, Cursor, LastIcon
Selected, Cursor, Wps, LastIcon
};
extern unsigned char bitmap_icons_6x8[LastIcon][6];

View file

@ -37,6 +37,7 @@
#include "playlist.h"
#include "menu.h"
#include "wps.h"
#include "wps-display.h"
#include "settings.h"
#include "status.h"
#include "debug.h"
@ -297,15 +298,17 @@ static int showdir(char *path, int start)
icon_type = Playlist;
else if ( dircache[i].attr & TREE_ATTR_MPA )
icon_type = File;
else if (!strcasecmp(&dircache[i].name[len-4], ".wps"))
icon_type = Wps;
else
icon_type = 0;
if (icon_type)
lcd_bitmap(bitmap_icons_6x8[icon_type],
CURSOR_X * 6 + CURSOR_WIDTH, MARGIN_Y+(i-start)*line_height, 6, 8, true);
CURSOR_X * 6 + CURSOR_WIDTH,
MARGIN_Y+(i-start)*line_height, 6, 8, true);
#endif
/* if MP3 filter is on, cut off the extension */
if (global_settings.mp3filter &&
(dircache[i].attr & (TREE_ATTR_M3U|TREE_ATTR_MPA)))
@ -466,6 +469,8 @@ bool dirbrowse(char *root)
put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true);
while(1) {
struct entry* file = &dircache[dircursor+start];
bool restore = false;
button = button_get_w_tmo(HZ/5);
@ -519,14 +524,12 @@ bool dirbrowse(char *root)
if ( !numentries )
break;
if ((currdir[0]=='/') && (currdir[1]==0)) {
snprintf(buf,sizeof(buf),"%s%s",currdir,
dircache[dircursor+start].name);
snprintf(buf,sizeof(buf),"%s%s",currdir, file->name);
} else {
snprintf(buf,sizeof(buf),"%s/%s",currdir,
dircache[dircursor+start].name);
snprintf(buf,sizeof(buf),"%s/%s",currdir, file->name);
}
if (dircache[dircursor+start].attr & ATTR_DIRECTORY) {
if (file->attr & ATTR_DIRECTORY) {
memcpy(currdir,buf,sizeof(currdir));
if ( dirlevel < MAX_DIR_LEVELS ) {
dirpos[dirlevel] = start;
@ -538,21 +541,16 @@ bool dirbrowse(char *root)
} else {
int seed = current_tick;
lcd_stop_scroll();
if(dircache[dircursor+start].attr & TREE_ATTR_M3U )
if (file->attr & TREE_ATTR_M3U )
{
if ( global_settings.resume )
snprintf(global_settings.resume_file,
MAX_PATH, "%s/%s",
currdir,
dircache[dircursor+start].name);
play_list(currdir,
dircache[dircursor+start].name,
0,
false,
0, seed );
currdir, file->name);
play_list(currdir, file->name, 0, false, 0, seed );
start_index = 0;
}
else if (dircache[dircursor+start].attr & TREE_ATTR_MPA ) {
else if (file->attr & TREE_ATTR_MPA ) {
if ( global_settings.resume )
strncpy(global_settings.resume_file,
currdir, MAX_PATH);
@ -563,9 +561,19 @@ bool dirbrowse(char *root)
start_index = play_list(currdir, NULL,
start_index, false, 0, seed);
}
else
break;
else {
/* wps config file? */
int len = strlen(file->name);
if (!strcasecmp(&file->name[len-4], ".wps")) {
snprintf(buf, sizeof buf, "%s/%s",
currdir, file->name);
wps_load_custom(buf);
restore = true;
break;
}
else
break;
}
if ( global_settings.resume ) {
/* the resume_index must always be the index in the
shuffled list in case shuffle is enabled */

View file

@ -46,9 +46,14 @@
#include "ajf.h"
#endif
#define WPS_CONFIG ROCKBOX_DIR "/wps.config"
#define WPS_CONFIG ROCKBOX_DIR "/default.wps"
#ifdef HAVE_LCD_BITMAP
#define MAX_LINES 10
#else
#define MAX_LINES 2
#endif
#define FORMAT_BUFFER_SIZE 300
struct format_flags
@ -103,12 +108,19 @@ static void wps_format(char* fmt)
}
}
static bool load_custom_wps(void)
bool wps_load_custom(char* file)
{
char buffer[FORMAT_BUFFER_SIZE];
int fd;
bool special = true;
fd = open(WPS_CONFIG, O_RDONLY);
/* default wps file? */
if (!file) {
file = WPS_CONFIG;
special = false;
}
fd = open(file, O_RDONLY);
if (-1 != fd)
{
@ -121,6 +133,17 @@ static bool load_custom_wps(void)
}
close(fd);
if ( special ) {
int i;
lcd_clear_display();
lcd_setmargins(0,0);
for (i=0; i<MAX_LINES && format_lines[i]; i++)
lcd_puts(0,i,format_lines[i]);
lcd_update();
sleep(HZ);
}
return numread > 0;
}
@ -195,8 +218,11 @@ static char* get_dir(char* buf, int buf_size, char* path, int level)
*
* Returns the tag. NULL indicates the tag wasn't available.
*/
static char* get_tag(struct mp3entry* id3, char* tag, char* buf, int buf_size,
struct format_flags* flags)
static char* get_tag(struct mp3entry* id3,
char* tag,
char* buf,
int buf_size,
struct format_flags* flags)
{
if ((0 == tag[0]) || (0 == tag[1]))
{
@ -205,122 +231,122 @@ static char* get_tag(struct mp3entry* id3, char* tag, char* buf, int buf_size,
switch (tag[0])
{
case 'i': /* ID3 Information */
switch (tag[1])
{
case 't': /* ID3 Title */
return id3->title;
case 'a': /* ID3 Artist */
return id3->artist;
case 'n': /* ID3 Track Number */
if (id3->tracknum)
case 'i': /* ID3 Information */
switch (tag[1])
{
snprintf(buf, buf_size, "%d", id3->tracknum);
return buf;
case 't': /* ID3 Title */
return id3->title;
case 'a': /* ID3 Artist */
return id3->artist;
case 'n': /* ID3 Track Number */
if (id3->tracknum)
{
snprintf(buf, buf_size, "%d", id3->tracknum);
return buf;
}
else
{
return NULL;
}
case 'd': /* ID3 Album/Disc */
return id3->album;
}
else
break;
case 'f': /* File Information */
switch(tag[1])
{
return NULL;
case 'v': /* VBR file? */
return id3->vbr ? "(avg)" : NULL;
case 'b': /* File Bitrate */
snprintf(buf, buf_size, "%d", id3->bitrate);
return buf;
case 'f': /* File Frequency */
snprintf(buf, buf_size, "%d", id3->frequency);
return buf;
case 'p': /* File Path */
return id3->path;
case 'm': /* File Name - With Extension */
return get_dir(buf, buf_size, id3->path, 0);
case 'n': /* File Name */
if (get_dir(buf, buf_size, id3->path, 0))
{
/* Remove extension */
char* sep = strrchr(buf, '.');
if (NULL != sep)
{
*sep = 0;
}
return buf;
}
else
{
return NULL;
}
case 's': /* File Size (in kilobytes) */
snprintf(buf, buf_size, "%d", id3->filesize / 1024);
return buf;
}
break;
case 'd': /* ID3 Album/Disc */
return id3->album;
}
break;
case 'f': /* File Information */
switch(tag[1])
{
case 'v': /* VBR file? */
return id3->vbr ? "(avg)" : NULL;
case 'b': /* File Bitrate */
snprintf(buf, buf_size, "%d", id3->bitrate);
return buf;
case 'f': /* File Frequency */
snprintf(buf, buf_size, "%d", id3->frequency);
return buf;
case 'p': /* File Path */
return id3->path;
case 'm': /* File Name - With Extension */
return get_dir(buf, buf_size, id3->path, 0);
case 'n': /* File Name */
if (get_dir(buf, buf_size, id3->path, 0))
case 'p': /* Playlist/Song Information */
switch(tag[1])
{
/* Remove extension */
char* sep = strrchr(buf, '.');
if (NULL != sep)
{
*sep = 0;
}
return buf;
}
else
{
return NULL;
}
case 's': /* File Size (in kilobytes) */
snprintf(buf, buf_size, "%d", id3->filesize / 1024);
return buf;
}
break;
case 'p': /* Playlist/Song Information */
switch(tag[1])
{
#if defined(HAVE_LCD_CHARCELLS) && !defined(SIMULATOR)
case 'b': /* Player progress bar */
flags->player_progress = true;
flags->dynamic = true;
return "\x01";
case 'b': /* Player progress bar */
flags->player_progress = true;
flags->dynamic = true;
return "\x01";
#endif
case 'p': /* Playlist Position */
snprintf(buf, buf_size, "%d", id3->index + 1);
return buf;
case 'p': /* Playlist Position */
snprintf(buf, buf_size, "%d", id3->index + 1);
return buf;
case 'e': /* Playlist Total Entries */
snprintf(buf, buf_size, "%d", playlist.amount);
return buf;
case 'e': /* Playlist Total Entries */
snprintf(buf, buf_size, "%d", playlist.amount);
return buf;
case 'c': /* Current Time in Song */
flags->dynamic = true;
format_time(buf, buf_size, id3->elapsed + ff_rewind_count);
return buf;
case 'c': /* Current Time in Song */
flags->dynamic = true;
format_time(buf, buf_size, id3->elapsed + ff_rewind_count);
return buf;
case 'r': /* Remaining Time in Song */
flags->dynamic = true;
format_time(buf, buf_size, id3->length - id3->elapsed + ff_rewind_count);
return buf;
case 'r': /* Remaining Time in Song */
flags->dynamic = true;
format_time(buf, buf_size, id3->length - id3->elapsed + ff_rewind_count);
return buf;
case 't': /* Total Time */
format_time(buf, buf_size, id3->length);
return buf;
}
break;
case 't': /* Total Time */
format_time(buf, buf_size, id3->length);
return buf;
}
break;
case 'd': /* Directory path information */
switch(tag[1])
{
case '1': /* Parent folder */
return get_dir(buf, buf_size, id3->path, 1);
case 'd': /* Directory path information */
switch(tag[1])
{
case '1': /* Parent folder */
return get_dir(buf, buf_size, id3->path, 1);
case '2': /* Parent of parent */
return get_dir(buf, buf_size, id3->path, 2);
case '2': /* Parent of parent */
return get_dir(buf, buf_size, id3->path, 2);
case '3': /* Parent of parent of parent */
return get_dir(buf, buf_size, id3->path, 3);
}
break;
case '3': /* Parent of parent of parent */
return get_dir(buf, buf_size, id3->path, 3);
}
break;
}
return NULL;
@ -507,11 +533,7 @@ bool wps_refresh(struct mp3entry* id3, int ffwd_offset, bool refresh_all)
ff_rewind_count = ffwd_offset;
#ifdef HAVE_LCD_CHARCELL
for (i = 0; i < 2; i++)
#else
for (i = 0; i < MAX_LINES; i++)
#endif
{
if ( !format_lines[i] )
break;
@ -586,7 +608,7 @@ void wps_display(struct mp3entry* id3)
static bool wps_loaded = false;
if (!wps_loaded) {
load_custom_wps();
wps_load_custom(NULL);
wps_loaded = true;
if ( !format_buffer[0] ) {

View file

@ -24,6 +24,7 @@
bool wps_refresh(struct mp3entry* id3, int ffwd_offset, bool refresh_scroll);
void wps_display(struct mp3entry* id3);
bool wps_load_custom(char* file);
#ifdef HAVE_LCD_CHARCELLS
bool draw_player_progress(struct mp3entry* id3, int ff_rewind_count);