Changeset 37c3eadcd507bc123f74379fcc28035691436b4b

Show
Ignore:
Timestamp:
26/11/03 11:45:21 (5 years ago)
Author:
Clément Stenac <zorglub@videolan.org>
git-committer:
Clément Stenac <zorglub@videolan.org> 1069843521 +0000
git-parent:

[380edbae4061b349232364c7d7989c4ef8e8931f]

git-author:
Clément Stenac <zorglub@videolan.org> 1069843521 +0000
Message:

* Merged sort functions
* Added a randomize playlist function

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc_playlist.h

    rc7bc1ac r37c3ead  
    33 ***************************************************************************** 
    44 * Copyright (C) 1999, 2000, 2001, 2002 VideoLAN 
    5  * $Id: vlc_playlist.h,v 1.16 2003/11/12 08:10:21 zorglub Exp $ 
     5 * $Id: vlc_playlist.h,v 1.17 2003/11/26 10:45:21 zorglub Exp $ 
    66 * 
    77 * Authors: Samuel Hocevar <sam@zoy.org> 
     
    9797}; 
    9898 
     99#define SORT_TITLE 0 
     100#define SORT_AUTHOR 1 
     101#define SORT_GROUP 2 
     102#define SORT_RANDOM 3 
     103 
    99104#define SORT_NORMAL 0 
    100105#define SORT_REVERSE 1 
     
    133138VLC_EXPORT( int, playlist_GroupToId, (playlist_t *, char * ) ); 
    134139 
    135 VLC_EXPORT( int,  playlist_SortTitle, ( playlist_t *, int) ); 
    136 VLC_EXPORT( int,  playlist_SortAuthor, ( playlist_t *, int) ); 
    137 VLC_EXPORT( int,  playlist_SortGroup, ( playlist_t *, int) ); 
     140#define playlist_SortTitle(p, i) playlist_Sort( p, SORT_TITLE, i) 
     141#define playlist_SortAuthor(p, i) playlist_Sort( p, SORT_AUTHOR, i) 
     142#define playlist_SortGroup(p, i) playlist_Sort( p, SORT_GROUP, i) 
     143 
     144VLC_EXPORT( int,  playlist_Sort, ( playlist_t *, int, int) ); 
    138145 
    139146VLC_EXPORT( int,  playlist_Move, ( playlist_t *, int, int ) ); 
  • modules/gui/wxwindows/playlist.cpp

    rea1b641 r37c3ead  
    33 ***************************************************************************** 
    44 * Copyright (C) 2000-2001 VideoLAN 
    5  * $Id: playlist.cpp,v 1.26 2003/11/21 18:55:40 gbazin Exp $ 
     5 * $Id: playlist.cpp,v 1.27 2003/11/26 10:45:21 zorglub Exp $ 
    66 * 
    77 * Authors: Olivier Teuli� <ipkiss@via.ecp.fr> 
     
    6060    SortGroup_Event, 
    6161    RSortGroup_Event, 
     62    Randomize_Event, 
    6263 
    6364    EnableSelection_Event, 
     
    99100    EVT_MENU(SortGroup_Event, Playlist::OnSort) 
    100101    EVT_MENU(RSortGroup_Event, Playlist::OnSort) 
     102 
     103    EVT_MENU(Randomize_Event, Playlist::OnSort) 
    101104 
    102105    EVT_MENU(EnableSelection_Event, Playlist::OnEnableSelection) 
     
    181184    /* Create our "Sort" menu */ 
    182185    wxMenu *sort_menu = new wxMenu; 
    183     sort_menu->Append( SortTitle_Event, wxU(_("&Sort by title")) ); 
     186    sort_menu->Append( SortTitle_Event, wxU(_("Sort by &title")) ); 
    184187    sort_menu->Append( RSortTitle_Event, wxU(_("&Reverse sort by title")) ); 
    185188    sort_menu->AppendSeparator(); 
    186     sort_menu->Append( SortAuthor_Event, wxU(_("&Sort by author")) ); 
     189    sort_menu->Append( SortAuthor_Event, wxU(_("Sort by &author")) ); 
    187190    sort_menu->Append( RSortAuthor_Event, wxU(_("&Reverse sort by author")) ); 
    188191    sort_menu->AppendSeparator(); 
    189     sort_menu->Append( SortGroup_Event, wxU(_("&Sort by group")) ); 
     192    sort_menu->Append( SortGroup_Event, wxU(_("Sort by &group")) ); 
    190193    sort_menu->Append( RSortGroup_Event, wxU(_("&Reverse sort by group")) ); 
     194    sort_menu->AppendSeparator(); 
     195    sort_menu->Append( Randomize_Event, wxU(_("&Randomize Playlist")) ); 
    191196 
    192197    /* Create our "Selection" menu */ 
     
    661666        case RSortGroup_Event: 
    662667           playlist_SortGroup( p_playlist , 1 ); 
     668           break; 
     669        case Randomize_Event: 
     670           playlist_Sort( p_playlist , SORT_RANDOM, SORT_NORMAL ); 
    663671           break; 
    664672    } 
  • src/playlist/sort.c

    rfd616f9 r37c3ead  
    33 ***************************************************************************** 
    44 * Copyright (C) 1999-2001 VideoLAN 
    5  * $Id: sort.c,v 1.1 2003/10/29 18:00:46 zorglub Exp $ 
     5 * $Id: sort.c,v 1.2 2003/11/26 10:45:21 zorglub Exp $ 
    66 * 
    77 * Authors: Cl�nt Stenac <zorglub@videolan.org> 
     
    3232 
    3333/** 
    34  * Sort the playlist by title 
     34 * Sort the playlist 
    3535 * \param p_playlist the playlist 
     36 * \param i_mode: SORT_TITLE, SORT_GROUP, SORT_AUTHOR, SORT_RANDOM 
    3637 * \param i_type: SORT_NORMAL or SORT_REVERSE (reversed order) 
    3738 * \return 0 on success 
    3839 */ 
    39 int playlist_SortTitle( playlist_t * p_playlist , int i_type ) 
     40int playlist_Sort( playlist_t * p_playlist , int i_mode, int i_type ) 
    4041{ 
    4142    int i , i_small , i_position; 
     
    4445    vlc_mutex_lock( &p_playlist->object_lock ); 
    4546 
     47    if( i_mode == SORT_RANDOM ) 
     48    { 
     49        for( i_position = 0; i_position < p_playlist->i_size ; i_position ++ ) 
     50        { 
     51            int i_new  = rand() % (p_playlist->i_size - 1); 
     52 
     53            /* Keep the correct current index */ 
     54            if( i_new == p_playlist->i_index ) 
     55                p_playlist->i_index = i_position; 
     56            else if( i_position == p_playlist->i_index ) 
     57                p_playlist->i_index = i_new; 
     58 
     59            p_temp = p_playlist->pp_items[i_position]; 
     60            p_playlist->pp_items[i_position] = p_playlist->pp_items[i_new]; 
     61            p_playlist->pp_items[i_new] = p_temp; 
     62        } 
     63        vlc_mutex_unlock( &p_playlist->object_lock ); 
     64 
     65        return 0; 
     66    } 
     67 
    4668    for( i_position = 0; i_position < p_playlist->i_size -1 ; i_position ++ ) 
    4769    { 
     
    4971        for( i = i_position + 1 ; i<  p_playlist->i_size ; i++) 
    5072        { 
    51             int i_test
     73            int i_test = 0
    5274 
    53             i_test = strcasecmp( p_playlist->pp_items[i]->psz_name, 
     75            if( i_mode == SORT_TITLE ) 
     76            { 
     77                i_test = strcasecmp( p_playlist->pp_items[i]->psz_name, 
    5478                                 p_playlist->pp_items[i_small]->psz_name ); 
     79            } 
     80            else if( i_mode == SORT_GROUP ) 
     81            { 
     82                i_test = p_playlist->pp_items[i]->i_group - 
     83                                 p_playlist->pp_items[i_small]->i_group; 
     84            } 
     85            else if( i_mode == SORT_AUTHOR ) 
     86            { 
     87                 i_test = strcasecmp( p_playlist->pp_items[i]->psz_author, 
     88                                 p_playlist->pp_items[i_small]->psz_author ); 
     89            } 
    5590 
    5691            if( ( i_type == SORT_NORMAL  && i_test < 0 ) || 
     
    74109    return 0; 
    75110} 
    76  
    77 /** 
    78  * Sort the playlist by author 
    79  * \param p_playlist the playlist 
    80  * \param i_type: SORT_NORMAL or SORT_REVERSE (reversed order) 
    81  * \return 0 on success 
    82  */ 
    83 int playlist_SortAuthor( playlist_t * p_playlist , int i_type ) 
    84 { 
    85     int i , i_small , i_position; 
    86     playlist_item_t *p_temp; 
    87  
    88     vlc_mutex_lock( &p_playlist->object_lock ); 
    89  
    90     for( i_position = 0; i_position < p_playlist->i_size -1 ; i_position ++ ) 
    91     { 
    92         i_small  = i_position; 
    93         for( i = i_position + 1 ; i<  p_playlist->i_size ; i++) 
    94         { 
    95             int i_test; 
    96  
    97             i_test = strcasecmp( p_playlist->pp_items[i]->psz_author, 
    98                                  p_playlist->pp_items[i_small]->psz_author ); 
    99  
    100             if( ( i_type == SORT_NORMAL  && i_test < 0 ) || 
    101                 ( i_type == SORT_REVERSE && i_test > 0 ) ) 
    102             { 
    103                 i_small = i; 
    104             } 
    105         } 
    106         /* Keep the correct current index */ 
    107         if( i_small == p_playlist->i_index ) 
    108             p_playlist->i_index = i_position; 
    109         else if( i_position == p_playlist->i_index ) 
    110             p_playlist->i_index = i_small; 
    111  
    112         p_temp = p_playlist->pp_items[i_position]; 
    113         p_playlist->pp_items[i_position] = p_playlist->pp_items[i_small]; 
    114         p_playlist->pp_items[i_small] = p_temp; 
    115     } 
    116     vlc_mutex_unlock( &p_playlist->object_lock ); 
    117  
    118     return 0; 
    119 } 
    120  
    121 int playlist_SortGroup( playlist_t * p_playlist , int i_type ) 
    122 { 
    123     int i , i_small , i_position; 
    124     playlist_item_t *p_temp; 
    125  
    126     vlc_mutex_lock( &p_playlist->object_lock ); 
    127  
    128     for( i_position = 0; i_position < p_playlist->i_size -1 ; i_position ++ ) 
    129     { 
    130         i_small  = i_position; 
    131         for( i = i_position + 1 ; i<  p_playlist->i_size ; i++) 
    132         { 
    133             int i_test; 
    134  
    135             i_test = p_playlist->pp_items[i]->i_group - 
    136                                  p_playlist->pp_items[i_small]->i_group; 
    137  
    138             if( ( i_type == SORT_NORMAL  && i_test < 0 ) || 
    139                 ( i_type == SORT_REVERSE && i_test > 0 ) ) 
    140             { 
    141                 i_small = i; 
    142             } 
    143         } 
    144         /* Keep the correct current index */ 
    145         if( i_small == p_playlist->i_index ) 
    146             p_playlist->i_index = i_position; 
    147         else if( i_position == p_playlist->i_index ) 
    148             p_playlist->i_index = i_small; 
    149  
    150         p_temp = p_playlist->pp_items[i_position]; 
    151         p_playlist->pp_items[i_position] = p_playlist->pp_items[i_small]; 
    152         p_playlist->pp_items[i_small] = p_temp; 
    153     } 
    154     vlc_mutex_unlock( &p_playlist->object_lock ); 
    155  
    156     return 0; 
    157 }