summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_display.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2010-01-13 06:02:38 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2010-01-13 06:02:38 +0000
commitdc0ba917fa94a554a166b1939548b06c9ee49307 (patch)
tree872f0b9f57f1ab5d1c28f69f4118fba704f27d85 /apps/gui/skin_engine/skin_display.c
parent8b926e98f82a8b6ffccc40a65388b6bbcd1c2538 (diff)
downloadrockbox-dc0ba917fa94a554a166b1939548b06c9ee49307.tar.gz
rockbox-dc0ba917fa94a554a166b1939548b06c9ee49307.zip
FS#10898 - Add a playlist viewer to the WPS. http://www.rockbox.org/wiki/CustomWPS#Playlist_viewer for an exaplanation how to use it.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24220 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui/skin_engine/skin_display.c')
-rw-r--r--apps/gui/skin_engine/skin_display.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c
index b8cc75e10a..e781d43372 100644
--- a/apps/gui/skin_engine/skin_display.c
+++ b/apps/gui/skin_engine/skin_display.c
@@ -35,6 +35,8 @@
35#include "statusbar.h" 35#include "statusbar.h"
36#include "scrollbar.h" 36#include "scrollbar.h"
37#include "screen_access.h" 37#include "screen_access.h"
38#include "playlist.h"
39#include "playback.h"
38 40
39#ifdef HAVE_LCD_BITMAP 41#ifdef HAVE_LCD_BITMAP
40#include "peakmeter.h" 42#include "peakmeter.h"
@@ -163,6 +165,94 @@ static void draw_progressbar(struct gui_wps *gwps,
163 cue_draw_markers(display, state->id3->cuesheet, length, 165 cue_draw_markers(display, state->id3->cuesheet, length,
164 pb->x, pb->x + pb->width, y+1, pb->height-2); 166 pb->x, pb->x + pb->width, y+1, pb->height-2);
165} 167}
168bool audio_peek_track(struct mp3entry* id3, int offset);
169static void draw_playlist_viewer_list(struct gui_wps *gwps,
170 struct playlistviewer *viewer)
171{
172 int lines = viewport_get_nb_lines(viewer->vp);
173 int line_height = font_get(viewer->vp->font)->height;
174 int cur_playlist_pos = playlist_get_display_index();
175 int start_item = MAX(0, cur_playlist_pos + viewer->start_offset);
176 int i;
177
178 struct mp3entry *pid3, id3;
179 char buf[MAX_PATH*2], tempbuf[MAX_PATH];
180
181
182 gwps->display->set_viewport(viewer->vp);
183 for(i=start_item; (i-start_item)<lines && i<playlist_amount(); i++)
184 {
185 if (i == cur_playlist_pos)
186 {
187 pid3 = audio_current_track();
188 }
189 else if (i == cur_playlist_pos+1)
190 {
191 pid3 = audio_next_track();
192 }
193 else if ((i>cur_playlist_pos) && audio_peek_track(&id3, i-cur_playlist_pos))
194 {
195 pid3 = &id3;
196 }
197 else
198 pid3 = NULL;
199
200 int line = pid3 ? TRACK_HAS_INFO : TRACK_HAS_NO_INFO;
201 int token = 0, cur_string = 0;
202 char *filename = playlist_peek(i-cur_playlist_pos);
203 buf[0] = '\0';
204 while (token < viewer->lines[line].count)
205 {
206 switch (viewer->lines[line].tokens[token])
207 {
208 case WPS_TOKEN_STRING:
209 case WPS_TOKEN_CHARACTER:
210 strcat(buf, viewer->lines[line].strings[cur_string++]);
211 break;
212 case WPS_TOKEN_PLAYLIST_POSITION:
213 snprintf(tempbuf, sizeof(tempbuf), "%d", i);
214 strcat(buf, tempbuf);
215 break;
216 case WPS_TOKEN_FILE_NAME:
217 get_dir(tempbuf, sizeof(tempbuf), filename, 0);
218 strcat(buf, tempbuf);
219 break;
220 case WPS_TOKEN_FILE_PATH:
221 strcat(buf, filename);
222 break;
223 case WPS_TOKEN_METADATA_ARTIST:
224 if (pid3)
225 strcat(buf, pid3->artist ? pid3->artist : "");
226 break;
227 case WPS_TOKEN_METADATA_TRACK_TITLE:
228 if (pid3)
229 strcat(buf, pid3->title ? pid3->title : "");
230 break;
231 case WPS_TOKEN_TRACK_LENGTH:
232 if (pid3)
233 {
234 format_time(tempbuf, sizeof(tempbuf), pid3->length);
235 strcat(buf, tempbuf);
236 }
237 break;
238
239 default:
240 break;
241 }
242 token++;
243 }
244
245 if (viewer->lines[line].scroll)
246 {
247 gwps->display->puts_scroll(0, (i-start_item), buf );
248 }
249 else
250 {
251 gwps->display->putsxy(0, (i-start_item)*line_height, buf );
252 }
253 }
254}
255
166 256
167/* clears the area where the image was shown */ 257/* clears the area where the image was shown */
168static void clear_image_pos(struct gui_wps *gwps, struct gui_img *img) 258static void clear_image_pos(struct gui_wps *gwps, struct gui_img *img)
@@ -595,6 +685,11 @@ static bool get_line(struct gui_wps *gwps,
595 } 685 }
596 } 686 }
597 break; 687 break;
688#ifdef HAVE_LCD_BITMAP
689 case WPS_VIEWPORT_CUSTOMLIST:
690 draw_playlist_viewer_list(gwps, data->tokens[i].value.data);
691 break;
692#endif
598 default: 693 default:
599 { 694 {
600 /* get the value of the tag and copy it to the buffer */ 695 /* get the value of the tag and copy it to the buffer */