summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHardeep Sidhu <dyp@pobox.com>2005-11-19 18:19:46 +0000
committerHardeep Sidhu <dyp@pobox.com>2005-11-19 18:19:46 +0000
commit3074394d24b492178a746ab84ca6a940e70f37c3 (patch)
treeb7976795c78d7e30235a28547bff4bf3063b2977
parent0afd9716a4879e66bc29826dba54c544920d1ee5 (diff)
downloadrockbox-3074394d24b492178a746ab84ca6a940e70f37c3.tar.gz
rockbox-3074394d24b492178a746ab84ca6a940e70f37c3.zip
If follow playlist is enabled, the playlist viewer should start at the current playing track. Minor code cleanup.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7997 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playlist_viewer.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c
index 58789b2561..b41bee3c20 100644
--- a/apps/playlist_viewer.c
+++ b/apps/playlist_viewer.c
@@ -102,7 +102,7 @@ struct playlist_viewer {
102static struct playlist_viewer viewer; 102static struct playlist_viewer viewer;
103 103
104/* Used when viewing playlists on disk */ 104/* Used when viewing playlists on disk */
105static struct playlist_info temp_playlist; 105static struct playlist_info temp_playlist;
106 106
107void playlist_buffer_init(struct playlist_buffer * pb, char * names_buffer, 107void playlist_buffer_init(struct playlist_buffer * pb, char * names_buffer,
108 int names_buffer_size); 108 int names_buffer_size);
@@ -118,7 +118,8 @@ static bool playlist_viewer_init(struct playlist_viewer * viewer,
118 char* filename, bool reload); 118 char* filename, bool reload);
119 119
120static void format_name(char* dest, const char* src); 120static void format_name(char* dest, const char* src);
121static void format_line(const struct playlist_entry* track, char* str, int len); 121static void format_line(const struct playlist_entry* track, char* str,
122 int len);
122 123
123static bool update_playlist(bool force); 124static bool update_playlist(bool force);
124static int onplay_menu(int index); 125static int onplay_menu(int index);
@@ -136,6 +137,7 @@ void playlist_buffer_init(struct playlist_buffer * pb, char * names_buffer,
136 pb->first_index=0; 137 pb->first_index=0;
137 pb->num_loaded=0; 138 pb->num_loaded=0;
138} 139}
140
139/* 141/*
140 * Loads the entries following 'index' in the playlist buffer 142 * Loads the entries following 'index' in the playlist buffer
141 */ 143 */
@@ -245,7 +247,7 @@ int playlist_buffer_get_index(struct playlist_buffer * pb, int index )
245 247
246#define distance(a, b) \ 248#define distance(a, b) \
247 a>b? (a) - (b) : (b) - (a) 249 a>b? (a) - (b) : (b) - (a)
248bool playlist_buffer_needs_reload(struct playlist_buffer * pb, int track_index) 250bool playlist_buffer_needs_reload(struct playlist_buffer* pb, int track_index)
249{ 251{
250 if(pb->num_loaded==viewer.num_tracks) 252 if(pb->num_loaded==viewer.num_tracks)
251 return(false); 253 return(false);
@@ -331,7 +333,12 @@ static bool playlist_viewer_init(struct playlist_viewer * viewer,
331 viewer->move_track = -1; 333 viewer->move_track = -1;
332 334
333 if (!reload) 335 if (!reload)
334 viewer->selected_track = 0; 336 {
337 if (global_settings.browse_current && !viewer->playlist)
338 viewer->selected_track = playlist_get_display_index() - 1;
339 else
340 viewer->selected_track = 0;
341 }
335 342
336 if (!update_playlist(true)) 343 if (!update_playlist(true))
337 return false; 344 return false;
@@ -369,7 +376,8 @@ static void format_name(char* dest, const char* src)
369} 376}
370 377
371/* Format display line */ 378/* Format display line */
372static void format_line(const struct playlist_entry* track, char* str, int len) 379static void format_line(const struct playlist_entry* track, char* str,
380 int len)
373{ 381{
374 char name[MAX_PATH]; 382 char name[MAX_PATH];
375 char *skipped = ""; 383 char *skipped = "";
@@ -552,9 +560,6 @@ bool playlist_viewer(void)
552 return playlist_viewer_ex(NULL); 560 return playlist_viewer_ex(NULL);
553} 561}
554 562
555
556
557
558char * playlist_callback_name(int selected_item, void * data, char *buffer) 563char * playlist_callback_name(int selected_item, void * data, char *buffer)
559{ 564{
560 struct playlist_viewer * local_viewer = (struct playlist_viewer *)data; 565 struct playlist_viewer * local_viewer = (struct playlist_viewer *)data;
@@ -605,8 +610,6 @@ void playlist_callback_icons(int selected_item, void * data, ICON * icon)
605#endif 610#endif
606} 611}
607 612
608
609
610/* Main viewer function. Filename identifies playlist to be viewed. If NULL, 613/* Main viewer function. Filename identifies playlist to be viewed. If NULL,
611 view current playlist. */ 614 view current playlist. */
612bool playlist_viewer_ex(char* filename) 615bool playlist_viewer_ex(char* filename)
@@ -620,7 +623,8 @@ bool playlist_viewer_ex(char* filename)
620 623
621 gui_synclist_init(&playlist_lists, playlist_callback_name, &viewer); 624 gui_synclist_init(&playlist_lists, playlist_callback_name, &viewer);
622 gui_synclist_set_icon_callback(&playlist_lists, 625 gui_synclist_set_icon_callback(&playlist_lists,
623 global_settings.playlist_viewer_icons?&playlist_callback_icons:NULL); 626 global_settings.playlist_viewer_icons?
627 &playlist_callback_icons:NULL);
624 gui_synclist_set_nb_items(&playlist_lists, viewer.num_tracks); 628 gui_synclist_set_nb_items(&playlist_lists, viewer.num_tracks);
625 gui_synclist_select_item(&playlist_lists, viewer.selected_track); 629 gui_synclist_select_item(&playlist_lists, viewer.selected_track);
626 gui_synclist_draw(&playlist_lists); 630 gui_synclist_draw(&playlist_lists);
@@ -663,7 +667,8 @@ bool playlist_viewer_ex(char* filename)
663 if( (list_action=gui_synclist_do_button(&playlist_lists, button))!=0 ) 667 if( (list_action=gui_synclist_do_button(&playlist_lists, button))!=0 )
664 { 668 {
665 viewer.selected_track=gui_synclist_get_sel_pos(&playlist_lists); 669 viewer.selected_track=gui_synclist_get_sel_pos(&playlist_lists);
666 if(playlist_buffer_needs_reload(&viewer.buffer, viewer.selected_track)) 670 if(playlist_buffer_needs_reload(&viewer.buffer,
671 viewer.selected_track))
667 playlist_buffer_load_entries_screen(&viewer.buffer, 672 playlist_buffer_load_entries_screen(&viewer.buffer,
668 list_action==LIST_NEXT? 673 list_action==LIST_NEXT?
669 FORWARD 674 FORWARD
@@ -700,13 +705,16 @@ bool playlist_viewer_ex(char* filename)
700 && (lastbutton != TREE_RUN_PRE))) 705 && (lastbutton != TREE_RUN_PRE)))
701 break; 706 break;
702#endif 707#endif
703 struct playlist_entry * current_track=playlist_buffer_get_track(&viewer.buffer, viewer.selected_track); 708 struct playlist_entry * current_track =
709 playlist_buffer_get_track(&viewer.buffer,
710 viewer.selected_track);
704 if (viewer.move_track >= 0) 711 if (viewer.move_track >= 0)
705 { 712 {
706 /* Move track */ 713 /* Move track */
707 int ret; 714 int ret;
708 715
709 ret = playlist_move(viewer.playlist, viewer.move_track, current_track->index); 716 ret = playlist_move(viewer.playlist, viewer.move_track,
717 current_track->index);
710 if (ret < 0) 718 if (ret < 0)
711 gui_syncsplash(HZ, true, str(LANG_MOVE_FAILED)); 719 gui_syncsplash(HZ, true, str(LANG_MOVE_FAILED));
712 720