/******* Volume III: Sorting and searching ********/
void PLModel::sort( int column, Qt::SortOrder order )
{
+ int i_index = -1;
+ int i_flag = 0;
+
+#define CHECK_COLUMN( meta ) \
+{ \
+ if( ( shownFlags() & VLC_META_ENGINE_##meta ) ) \
+ i_index++; \
+ if( column == i_index ) \
+ { \
+ i_flag = VLC_META_ENGINE_##meta; \
+ goto next; \
+ } \
+}
+ CHECK_COLUMN( TITLE );
+ CHECK_COLUMN( DURATION );
+ CHECK_COLUMN( ARTIST );
+ CHECK_COLUMN( GENRE );
+ CHECK_COLUMN( COLLECTION );
+ CHECK_COLUMN( SEQ_NUM );
+ CHECK_COLUMN( DESCRIPTION );
+ CHECK_COLUMN( RATING );
+
+#undef CHECK_COLUMN;
+
+next:
PL_LOCK;
{
playlist_item_t *p_root = playlist_ItemGetById( p_playlist,
rootItem->i_id,
VLC_TRUE );
int i_mode;
- switch( column )
+ switch( i_flag )
{
- case 0: i_mode = SORT_TITLE_NODES_FIRST;break;
- case 1: i_mode = SORT_DURATION; break;
- case 2: i_mode = SORT_ARTIST;break;
- default: i_mode = SORT_TITLE_NODES_FIRST; break;
+ case VLC_META_ENGINE_TITLE: i_mode = SORT_TITLE_NODES_FIRST;break;
+ case VLC_META_ENGINE_DURATION: i_mode = SORT_DURATION; break;
+ case VLC_META_ENGINE_ARTIST: i_mode = SORT_ARTIST; break;
+ case VLC_META_ENGINE_GENRE: i_mode = SORT_GENRE; break;
+ case VLC_META_ENGINE_COLLECTION: i_mode = SORT_ALBUM; break;
+ case VLC_META_ENGINE_SEQ_NUM: i_mode = SORT_TRACK_NUMBER; break;
+ case VLC_META_ENGINE_DESCRIPTION:i_mode = SORT_DESCRIPTION; break;
+ case VLC_META_ENGINE_RATING: i_mode = SORT_RATING; break;
+ default: i_mode = SORT_TITLE_NODES_FIRST;break;
}
if( p_root )
{
free( psz_i ); \
free( psz_ismall ); \
}
-
+
#define DO_META_SORT( node ) { \
char *psz_a = input_item_GetMeta( pp_items[i]->p_input, vlc_meta_##node ); \
{
DO_META_SORT( Artist );
}
+ else if( i_mode == SORT_GENRE )
+ {
+ DO_META_SORT( Genre );
+ }
else if( i_mode == SORT_ALBUM )
{
DO_META_SORT( Album );
}
+ else if( i_mode == SORT_TRACK_NUMBER )
+ {
+ DO_META_SORT( TrackNumber );
+ }
+ else if( i_mode == SORT_DESCRIPTION )
+ {
+ DO_META_SORT( Description );
+ }
+ else if( i_mode == SORT_RATING )
+ {
+ DO_META_SORT( Rating );
+ }
else if( i_mode == SORT_TITLE_NODES_FIRST )
{
/* Alphabetic sort, all nodes first */