X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fplaylist%2Fplaylist_model.cpp;h=710156accb017bc480237547565c27e8e482d05c;hb=ee7537e77ae5c190881227db774a1eee6c1c7aa8;hp=dbbb2dec6bec61d58c4cd701f253a7be609c21dc;hpb=008b32b15969eaae95d63c5766c802bff1f089da;p=vlc diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index dbbb2dec6b..710156accb 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -39,6 +39,8 @@ #include #include +#include "sorting.h" + QIcon PLModel::icons[ITEM_TYPE_NUMBER]; static int PlaylistChanged( vlc_object_t *, const char *, @@ -72,8 +74,6 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */ assert( i_depth == DEPTH_SEL || i_depth == DEPTH_PL ); p_intf = _p_intf; p_playlist = _p_playlist; - i_items_to_append = 0; - b_need_update = false; i_cached_id = -1; i_cached_input_id = -1; i_popup_item = i_popup_parent = -1; @@ -276,7 +276,7 @@ void PLModel::activateItem( playlist_item_t *p_item ) p_parent = p_parent->p_parent; } if( p_parent ) - playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, pl_Locked, p_parent, p_item ); } @@ -523,7 +523,11 @@ void PLModel::ProcessInputItemUpdate( int i_input_id ) if( i_input_id <= 0 ) return; PLItem *item = FindByInput( rootItem, i_input_id ); if( item ) + { + QPL_LOCK; UpdateTreeItem( item, true ); + QPL_UNLOCK; + } } void PLModel::ProcessItemRemoval( int i_id ) @@ -539,8 +543,6 @@ void PLModel::ProcessItemAppend( playlist_add_t *p_add ) { playlist_item_t *p_item = NULL; PLItem *newItem = NULL; - i_items_to_append--; - if( b_need_update ) return; PLItem *nodeItem = FindById( rootItem, p_add->i_node ); PL_LOCK; @@ -717,25 +719,35 @@ void PLModel::sort( int column, Qt::SortOrder order ) int i_index = -1; int i_flag = 0; + // FIXME: Disable sorting on startup by ignoring + // first call of sorting caused by showing dialog + // see: standardpanel.cpp:65 + static bool b_first_time = true; + if( b_first_time ) + { + b_first_time = false; + return; + } + #define CHECK_COLUMN( meta ) \ { \ - if( ( shownFlags() & VLC_META_ENGINE_##meta ) ) \ + if( ( shownFlags() & meta ) ) \ i_index++; \ if( column == i_index ) \ { \ - i_flag = VLC_META_ENGINE_##meta; \ + i_flag = meta; \ goto next; \ } \ } - CHECK_COLUMN( TRACKID ); - CHECK_COLUMN( TITLE ); - CHECK_COLUMN( DURATION ); - CHECK_COLUMN( ARTIST ); - CHECK_COLUMN( GENRE ); - CHECK_COLUMN( COLLECTION ); - CHECK_COLUMN( SEQ_NUM ); - CHECK_COLUMN( DESCRIPTION ); + CHECK_COLUMN( COLUMN_NUMBER ); + CHECK_COLUMN( COLUMN_TITLE ); + CHECK_COLUMN( COLUMN_DURATION ); + CHECK_COLUMN( COLUMN_ARTIST ); + CHECK_COLUMN( COLUMN_GENRE ); + CHECK_COLUMN( COLUMN_ALBUM ); + CHECK_COLUMN( COLUMN_TRACK_NUMBER ); + CHECK_COLUMN( COLUMN_DESCRIPTION ); #undef CHECK_COLUMN @@ -745,22 +757,10 @@ next: playlist_item_t *p_root = playlist_ItemGetById( p_playlist, rootItem->i_id, true ); - int i_mode; - switch( i_flag ) - { - case VLC_META_ENGINE_TRACKID: i_mode = SORT_ID; 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; - default: i_mode = SORT_TITLE_NODES_FIRST;break; - } if( p_root ) { - playlist_RecursiveNodeSort( p_playlist, p_root, i_mode, + playlist_RecursiveNodeSort( p_playlist, p_root, + i_column_sorting( i_flag ), order == Qt::AscendingOrder ? ORDER_NORMAL : ORDER_REVERSE ); p_playlist->b_reset_currently_playing = true; @@ -826,32 +826,17 @@ void PLModel::popup( QModelIndex & index, QPoint &point, QModelIndexList list ) void PLModel::viewchanged( int meta ) { + assert( meta ); + int _meta = meta; if( rootItem ) { - int index=0; - switch( meta ) + int index=-1; + while( _meta ) { - case VLC_META_ENGINE_TRACKID: - index=0; break; - case VLC_META_ENGINE_TITLE: - index=1; break; - case VLC_META_ENGINE_DURATION: - index=2; break; - case VLC_META_ENGINE_ARTIST: - index=3; break; - case VLC_META_ENGINE_GENRE: - index=4; break; - case VLC_META_ENGINE_COPYRIGHT: - index=5; break; - case VLC_META_ENGINE_COLLECTION: - index=6; break; - case VLC_META_ENGINE_SEQ_NUM: - index=7; break; - case VLC_META_ENGINE_DESCRIPTION: - index=8; break; - default: - break; + index++; + _meta >>= 1; } + /* UNUSED emit layoutAboutToBeChanged(); */ index = __MIN( index, rootItem->item_col_strings.count() ); QModelIndex parent = createIndex( 0, 0, rootItem ); @@ -895,7 +880,7 @@ void PLModel::popupInfo() { playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_popup_item, - true ); + false ); if( p_item ) { MediaInfoDialog *mid = new MediaInfoDialog( p_intf, p_item->p_input ); @@ -969,11 +954,6 @@ static int ItemAppended( vlc_object_t *p_this, const char *psz_variable, playlist_add_t *p_add = (playlist_add_t *)malloc( sizeof( playlist_add_t)); memcpy( p_add, nval.p_address, sizeof( playlist_add_t ) ); - if( ++p_model->i_items_to_append >= 50 ) - { -// p_model->b_need_update = true; -// return VLC_SUCCESS; - } PLEvent *event = new PLEvent( p_add ); QApplication::postEvent( p_model, static_cast(event) ); return VLC_SUCCESS;