X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fplaylist%2Fplaylist_model.cpp;h=2ec2458ec3f5c2a12023a72e59a3046266088755;hb=efa30ea7db66a2e445f5622c04256bd8170234c5;hp=99fe3398d5d5d316582f505268ff97cb7e7718a9;hpb=dd99cec11682b1f038dd2804c02413eb17334966;p=vlc diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index 99fe3398d5..2ec2458ec3 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; @@ -168,9 +168,9 @@ bool PLModel::dropMimeData( const QMimeData *data, Qt::DropAction action, PL_LOCK; playlist_item_t *p_target = playlist_ItemGetById( p_playlist, targetItem->i_id, - VLC_TRUE ); + true ); playlist_item_t *p_src = playlist_ItemGetById( p_playlist, srcId, - VLC_TRUE ); + true ); if( !p_target || !p_src ) { @@ -183,7 +183,7 @@ bool PLModel::dropMimeData( const QMimeData *data, Qt::DropAction action, assert( parentItem ); playlist_item_t *p_parent = playlist_ItemGetById( p_playlist, parentItem->i_id, - VLC_TRUE ); + true ); if( !p_parent ) { PL_UNLOCK; @@ -260,7 +260,7 @@ void PLModel::activateItem( const QModelIndex &index ) assert( item ); PL_LOCK; playlist_item_t *p_item = playlist_ItemGetById( p_playlist, item->i_id, - VLC_TRUE); + true); activateItem( p_item ); PL_UNLOCK; } @@ -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, VLC_TRUE, + playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, p_parent, p_item ); } @@ -416,17 +416,17 @@ bool PLModel::hasLoop() } void PLModel::setLoop( bool on ) { - var_SetBool( p_playlist, "loop", on ? VLC_TRUE:VLC_FALSE ); + var_SetBool( p_playlist, "loop", on ? true:false ); config_PutInt( p_playlist, "loop", on ? 1: 0 ); } void PLModel::setRepeat( bool on ) { - var_SetBool( p_playlist, "repeat", on ? VLC_TRUE:VLC_FALSE ); + var_SetBool( p_playlist, "repeat", on ? true:false ); config_PutInt( p_playlist, "repeat", on ? 1: 0 ); } void PLModel::setRandom( bool on ) { - var_SetBool( p_playlist, "random", on ? VLC_TRUE:VLC_FALSE ); + var_SetBool( p_playlist, "random", on ? true:false ); config_PutInt( p_playlist, "random", on ? 1: 0 ); } @@ -539,14 +539,12 @@ 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; if( !nodeItem ) goto end; - p_item = playlist_ItemGetById( p_playlist, p_add->i_item, VLC_TRUE ); + p_item = playlist_ItemGetById( p_playlist, p_add->i_item, true ); if( !p_item || p_item->i_flags & PLAYLIST_DBL_FLAG ) goto end; if( i_depth == DEPTH_SEL && p_item->p_parent && p_item->p_parent->i_id != rootItem->i_id ) @@ -588,7 +586,7 @@ void PLModel::rebuild( playlist_item_t *p_root ) } if( p_root ) { - //if( rootItem ) delete rootItem; + delete rootItem; rootItem = new PLItem( p_root, NULL, this ); } assert( rootItem ); @@ -615,7 +613,7 @@ void PLModel::rebuild( playlist_item_t *p_root ) void PLModel::UpdateNodeChildren( PLItem *root ) { playlist_item_t *p_node = playlist_ItemGetById( p_playlist, root->i_id, - VLC_TRUE ); + true ); UpdateNodeChildren( p_node, root ); } @@ -637,7 +635,7 @@ void PLModel::UpdateNodeChildren( playlist_item_t *p_node, PLItem *root ) void PLModel::UpdateTreeItem( PLItem *item, bool signal, bool force ) { playlist_item_t *p_item = playlist_ItemGetById( p_playlist, item->i_id, - VLC_TRUE ); + true ); UpdateTreeItem( p_item, item, signal, force ); } @@ -697,15 +695,15 @@ void PLModel::doDeleteItem( PLItem *item, QModelIndexList *fullList ) PL_LOCK; playlist_item_t *p_item = playlist_ItemGetById( p_playlist, item->i_id, - VLC_TRUE ); + true ); if( !p_item ) { PL_UNLOCK; return; } if( p_item->i_children == -1 ) - playlist_DeleteFromInput( p_playlist, item->i_input_id, VLC_TRUE ); + playlist_DeleteFromInput( p_playlist, item->i_input_id, true ); else - playlist_NodeDelete( p_playlist, p_item, VLC_TRUE, VLC_FALSE ); + playlist_NodeDelete( p_playlist, p_item, true, false ); /* And finally, remove it from the tree */ item->remove( item ); PL_UNLOCK; @@ -717,25 +715,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 @@ -744,26 +752,14 @@ next: { playlist_item_t *p_root = playlist_ItemGetById( p_playlist, rootItem->i_id, - VLC_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; - } + true ); 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 = VLC_TRUE; + p_playlist->b_reset_currently_playing = true; } } PL_UNLOCK; @@ -777,7 +773,7 @@ void PLModel::search( QString search_text ) { playlist_item_t *p_root = playlist_ItemGetById( p_playlist, rootItem->i_id, - VLC_TRUE ); + true ); assert( p_root ); char *psz_name = search_text.toUtf8().data(); playlist_LiveSearchUpdate( p_playlist , p_root, psz_name ); @@ -792,7 +788,7 @@ void PLModel::popup( QModelIndex & index, QPoint &point, QModelIndexList list ) assert( index.isValid() ); PL_LOCK; playlist_item_t *p_item = playlist_ItemGetById( p_playlist, - itemId( index ), VLC_TRUE ); + itemId( index ), true ); if( p_item ) { i_popup_item = p_item->i_id; @@ -826,32 +822,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 ); @@ -867,7 +848,7 @@ void PLModel::viewchanged( int meta ) else { /* Adding columns */ - beginInsertColumns( createIndex( 0, 0, rootItem), index, index+1 ); + beginInsertColumns( parent, index, index+1 ); rootItem->i_showflags |= meta; rootItem->updateColumnHeaders(); endInsertColumns(); @@ -885,7 +866,7 @@ void PLModel::popupPlay() PL_LOCK; { playlist_item_t *p_item = playlist_ItemGetById( p_playlist, - i_popup_item,VLC_TRUE ); + i_popup_item,true ); activateItem( p_item ); } PL_UNLOCK; @@ -895,7 +876,7 @@ void PLModel::popupInfo() { playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_popup_item, - VLC_TRUE ); + false ); if( p_item ) { MediaInfoDialog *mid = new MediaInfoDialog( p_intf, p_item->p_input ); @@ -969,11 +950,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 = VLC_TRUE; -// return VLC_SUCCESS; - } PLEvent *event = new PLEvent( p_add ); QApplication::postEvent( p_model, static_cast(event) ); return VLC_SUCCESS;