diff --git a/apps/wps.c b/apps/wps.c index 571b35675d..55aa531ea7 100644 --- a/apps/wps.c +++ b/apps/wps.c @@ -73,7 +73,6 @@ static char custom_wps[64]; static void draw_screen(struct mp3entry* id3) { - int font_height; #ifdef LOADABLE_FONTS unsigned char *font = lcd_getcurrentldfont(); @@ -96,12 +95,15 @@ static void draw_screen(struct mp3entry* id3) else { #ifdef CUSTOM_WPS +#ifdef HAVE_LCD_CHARCELLS static int last_wps = -1; - if ( last_wps != global_settings.wps_display && - global_settings.wps_display == PLAY_DISPLAY_CUSTOM_WPS ) { + if ((last_wps != global_settings.wps_display + && global_settings.wps_display == PLAY_DISPLAY_CUSTOM_WPS)) + { load_custom_wps(); last_wps = global_settings.wps_display; } +#endif #endif switch ( global_settings.wps_display ) { case PLAY_DISPLAY_TRACK_TITLE: @@ -266,6 +268,11 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) { char buffer[128]; char tmpbuf[64]; + int con_flag = 0; /* (0)Not inside of if/else + (1)Inside of If + (2)Inside of Else */ + char con_if[64]; + char con_else[64]; char cchr1; char cchr2; char cchr3; @@ -384,11 +391,53 @@ bool display_custom_wps(int x_val, int y_val, bool do_scroll, char *wps_string) case '%': /* Displays % */ snprintf(tmpbuf, sizeof(tmpbuf), "%%"); break; + case '?': /* Conditional Display of ID3/File */ + switch(con_flag) + { + case 0: + con_if[0] = 0; + con_else[0] = 0; + con_flag = 1; + break; + default: + if(id3->artist && id3->title) + snprintf(tmpbuf, sizeof(tmpbuf), "%s", con_if); + else + snprintf(tmpbuf, sizeof(tmpbuf), "%s", con_else); + con_flag = 0; + break; + } + break; + case ':': /* Seperator for Conditional ID3/File Display */ + con_flag = 2; + break; + } + switch(con_flag) + { + case 0: + snprintf(buffer, sizeof(buffer), "%s%s", buffer, tmpbuf); + break; + case 1: + snprintf(con_if, sizeof(con_if), "%s%s", con_if, tmpbuf); + break; + case 2: + snprintf(con_else, sizeof(con_else), "%s%s", con_else, tmpbuf); + break; } - snprintf(buffer, sizeof(buffer), "%s%s", buffer, tmpbuf); break; default: - snprintf(buffer, sizeof(buffer), "%s%c", buffer, cchr1); + switch(con_flag) + { + case 0: + snprintf(buffer, sizeof(buffer), "%s%c", buffer, cchr1); + break; + case 1: + snprintf(con_if, sizeof(con_if), "%s%c", con_if, cchr1); + break; + case 2: + snprintf(con_else, sizeof(con_else), "%s%c", con_else, cchr1); + break; + } break; } if(seek >= strlen(wps_string)) @@ -474,17 +523,17 @@ int player_id3_show(void) case 0: lcd_puts(0, 0, "Title"); snprintf(scroll_text,sizeof(scroll_text), "%s", - id3->title); + id3->title?id3->title:""); break; case 1: lcd_puts(0, 0, "Artist"); snprintf(scroll_text,sizeof(scroll_text), "%s", - id3->artist); + id3->artist?id3->artist:""); break; case 2: lcd_puts(0, 0, "Album"); snprintf(scroll_text,sizeof(scroll_text), "%s", - id3->album); + id3->album?id3->album:""); break; case 3: lcd_puts(0, 0, "Length"); diff --git a/docs/CUSTOM_WPS_FORMAT b/docs/CUSTOM_WPS_FORMAT index d9461f969e..916c9887b1 100644 --- a/docs/CUSTOM_WPS_FORMAT +++ b/docs/CUSTOM_WPS_FORMAT @@ -1,46 +1,78 @@ Custom WPS Display wps.config File Format Specifications -Description ------------ -The Custom WPS Display is used on the Rockbox Player ONLY as a means -to customize the WPS to the user's likings. -The first line of the 2 line display is the customized line (scrolling). -The second line is always the time display. (Elapsed & Total Time). -The second line is not able to be customized. -All characters not preceded by % are displayed as typed. + +Description / General Info +-------------------------- +* The Custom WPS Display is used on the Rockbox Player ONLY, as a means + to customize the WPS to the user's likings. +* Plans to implement this feature into the recorder are in progress. +* The first line of the 2 line display is the customized line (scrolling). +* The second line is always the time display. (Elapsed & Total Time). +* The second line is not able to be customized. +* Any CR's, LF's, or CR/LF's (Commonly known as Newline/Return/Enter) in + the wps.config file will be treated as spaces. IE: Don't use them. +* After editing the wps.config file, you may need to reboot your Rockbox. +* All tags except for %%, %?, and %: contain 3 characters (%xx). Remember + to type the tags correctly, or you will get unexpected output, or even + possibly no output at all. +* All characters not preceded by % are displayed as typed. + File Location ------------- The configuration file must be located in the root folder of the device and must be named wps.config (lowercase) + Tags ---- -%t : ID3 Title -%a : ID3 Artist -%n : ID3 Track Number -%u : ID3 Album -%c : Conditional Title/Filename - Displays "Artist - Title" *or* - Displays Filename if no ID3 Artist/Title -%h : Conditional Title/Filename - Displays "Title - Artist" *or* - Displays Filename if no ID3 Artist/Title -%b : File Bitrate -%f : File Frequency -%p : File Path -%m : File Name -%s : File Size (In Kilobytes) -%i : Playlist Position -%l : Playlist Total Entries -%e : Elapsed Track Time -%o : Total Track Time -%% : Displays a % +ID3 Info Tags: + %it : ID3 Title + %ia : ID3 Artist + %in : ID3 Track Number + %id : ID3 Album +File Info Tags: + %fc : Conditional Title/Filename + Displays "Artist - Title" *or* + Displays Filename if no ID3 Artist/Title + %fd : Conditional Title/Filename + Displays "Title - Artist" *or* + Displays Filename if no ID3 Artist/Title + %fb : File Bitrate + %ff : File Frequency + %fp : File Path + %fn : File Name + %fs : File Size (In Kilobytes) +Playlist/Song Info Tags: + %pp : Playlist Position + %pe : Playlist Total Entries + %pc : Current Time In Song + %pt : Total Track Time +Other Tags: + %% : Displays a % +Conditional ID3/File Tags (If/Else block): + The following two tags are completely optional, and meant only for those + that wish to go crazy with customization. It lets you specify what to + do when it finds an ID3 tag, and also when it doesn't find one. It can + be placed anywhere within the wps.config file. + The first condition of the If/Else block is what to do when it DOES find + valid ID3 tags. The second condition is what to do when there are no + valid ID3 tags available. + %? : Start/End an If/Else block + %: : Seperator between If and Else + Example: + To display "Title - Artist" if there is ID3 available, or "Filename" + if there is no ID3, the following string would be used: + %?%it - %ia%:%fn%? + Yes, you are not going crazy (although I may be)... This *IS* more + confusing then Perl :-) -Example wps.config File + +Example wps.config File (Without If/Else) ----------------------- -%i/%l: %c * %sKB +%pp/%pe: %fc * %fsKB + Example Output -------------- @@ -53,5 +85,8 @@ File Size: 3500 Elapsed Track Time: 2:23 Total Track Time: 3:01 The output of this on the player would be: -5/10: My Song.mp3 * 3500KB -2:23/3:01 + --------------------------- +| 5/10: My Song.mp3 * 3500KB| +| 2:23/3:01 | + --------------------------- +Of course, the whole first line wouldn't fit, so it scrolls it.