diff options
author | Hardeep Sidhu <dyp@pobox.com> | 2005-11-19 18:19:46 +0000 |
---|---|---|
committer | Hardeep Sidhu <dyp@pobox.com> | 2005-11-19 18:19:46 +0000 |
commit | 3074394d24b492178a746ab84ca6a940e70f37c3 (patch) | |
tree | b7976795c78d7e30235a28547bff4bf3063b2977 | |
parent | 0afd9716a4879e66bc29826dba54c544920d1ee5 (diff) | |
download | rockbox-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.c | 36 |
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 { | |||
102 | static struct playlist_viewer viewer; | 102 | static struct playlist_viewer viewer; |
103 | 103 | ||
104 | /* Used when viewing playlists on disk */ | 104 | /* Used when viewing playlists on disk */ |
105 | static struct playlist_info temp_playlist; | 105 | static struct playlist_info temp_playlist; |
106 | 106 | ||
107 | void playlist_buffer_init(struct playlist_buffer * pb, char * names_buffer, | 107 | void 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 | ||
120 | static void format_name(char* dest, const char* src); | 120 | static void format_name(char* dest, const char* src); |
121 | static void format_line(const struct playlist_entry* track, char* str, int len); | 121 | static void format_line(const struct playlist_entry* track, char* str, |
122 | int len); | ||
122 | 123 | ||
123 | static bool update_playlist(bool force); | 124 | static bool update_playlist(bool force); |
124 | static int onplay_menu(int index); | 125 | static 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) |
248 | bool playlist_buffer_needs_reload(struct playlist_buffer * pb, int track_index) | 250 | bool 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 */ |
372 | static void format_line(const struct playlist_entry* track, char* str, int len) | 379 | static 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 | |||
558 | char * playlist_callback_name(int selected_item, void * data, char *buffer) | 563 | char * 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. */ |
612 | bool playlist_viewer_ex(char* filename) | 615 | bool 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 | ||