X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fplaylist%2Fplaylist_model.cpp;h=46ffe0aa71d3764cdd1907bbc0dbd27568371123;hb=94fa96018ffc8402a6d6813ba93245a3d852a54b;hp=be4643687a8dd5b476dbbe2d48b5dc923eed29b2;hpb=cebe12a7d079fbfc3b45ff5fa2ae909b205c4907;p=vlc diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index be4643687a..46ffe0aa71 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -21,11 +21,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include -#include -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include "qt4.hpp" #include "components/playlist/playlist_model.hpp" @@ -34,8 +32,13 @@ #include "pixmaps/type_unknown.xpm" -#define DEPTH_PL -1 -#define DEPTH_SEL 1 +#include +#include +#include +#include +#include +#include + QIcon PLModel::icons[ITEM_TYPE_NUMBER]; static int PlaylistChanged( vlc_object_t *, const char *, @@ -49,221 +52,6 @@ static int ItemAppended( vlc_object_t *p_this, const char *psz_variable, static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable, vlc_value_t oval, vlc_value_t nval, void *param ); -/************************************************************************* - * Playlist item implementation - *************************************************************************/ - -/* - Playlist item is just a wrapper, an abstraction of the playlist_item - in order to be managed by PLModel - - PLItem have a parent, and id and a input Id -*/ - - -void PLItem::init( int _i_id, int _i_input_id, PLItem *parent, PLModel *m ) -{ - parentItem = parent; /* Can be NULL, but only for the rootItem */ - i_id = _i_id; /* Playlist item specific id */ - i_input_id = _i_input_id; /* Identifier of the input */ - model = m; /* PLModel (QAbsmodel) */ - i_type = -1; /* Item type - Avoid segfault */ - b_current = false; - - assert( model ); - - /* No parent, should be the main one */ - if( parentItem == NULL ) - { - i_showflags = config_GetInt( model->p_intf, "qt-pl-showflags" ); - updateview(); - } - else - { - i_showflags = parentItem->i_showflags; - //Add empty string and update() handles data appending - item_col_strings.append( "" ); - } - msg_Dbg( model->p_intf, "PLItem created: %i", model->i_depth ); -} - -/* - Constructors - Call the above function init - So far the first constructor isn't used... - */ -PLItem::PLItem( int _i_id, int _i_input_id, PLItem *parent, PLModel *m ) -{ - init( _i_id, _i_input_id, parent, m ); -} - -PLItem::PLItem( playlist_item_t * p_item, PLItem *parent, PLModel *m ) -{ - init( p_item->i_id, p_item->p_input->i_id, parent, m ); -} - -PLItem::~PLItem() -{ - qDeleteAll( children ); - children.clear(); -} - -/* Column manager */ -void PLItem::updateview() -{ - item_col_strings.clear(); - - if( model->i_depth == 1 ) /* Selector Panel */ - { - item_col_strings.append( "" ); - return; - } - - for( int i_index=1; i_index <= VLC_META_ENGINE_ART_URL; i_index *= 2 ) - { - if( i_showflags & i_index ) - { - switch( i_index ) - { - case VLC_META_ENGINE_ARTIST: - item_col_strings.append( qtr( VLC_META_ARTIST ) ); - break; - case VLC_META_ENGINE_TITLE: - item_col_strings.append( qtr( VLC_META_TITLE ) ); - break; - case VLC_META_ENGINE_DESCRIPTION: - item_col_strings.append( qtr( VLC_META_DESCRIPTION ) ); - break; - case VLC_META_ENGINE_DURATION: - item_col_strings.append( qtr( "Duration" ) ); - break; - case VLC_META_ENGINE_GENRE: - item_col_strings.append( qtr( VLC_META_GENRE ) ); - break; - case VLC_META_ENGINE_COLLECTION: - item_col_strings.append( qtr( VLC_META_COLLECTION ) ); - break; - case VLC_META_ENGINE_SEQ_NUM: - item_col_strings.append( qtr( VLC_META_SEQ_NUM ) ); - break; - case VLC_META_ENGINE_RATING: - item_col_strings.append( qtr( VLC_META_RATING ) ); - break; - default: - break; - } - } - } -} - -/* So far signal is always true. - Using signal false would not call PLModel... Why ? - */ -void PLItem::insertChild( PLItem *item, int i_pos, bool signal ) -{ - if( signal ) - model->beginInsertRows( model->index( this , 0 ), i_pos, i_pos ); - children.insert( i_pos, item ); - if( signal ) - model->endInsertRows(); -} - -void PLItem::remove( PLItem *removed ) -{ - if( model->i_depth == DEPTH_SEL || parentItem ) - { - int i_index = parentItem->children.indexOf( removed ); - model->beginRemoveRows( model->index( parentItem, 0 ), - i_index, i_index ); - parentItem->children.removeAt( i_index ); - model->endRemoveRows(); - } -} - -/* This function is used to get one's parent's row number in the model */ -int PLItem::row() const -{ - if( parentItem ) - return parentItem->children.indexOf( const_cast(this) ); // Why this ? I don't think we ever inherit PLItem - return 0; -} - -/* update the PL Item, get the good names and so on */ -void PLItem::update( playlist_item_t *p_item, bool iscurrent ) -{ - char psz_duration[MSTRTIME_MAX_SIZE]; - char *psz_meta; - - assert( p_item->p_input->i_id == i_input_id ); - - i_type = p_item->p_input->i_type; - b_current = iscurrent; - - item_col_strings.clear(); - - if( model->i_depth == 1 ) /* Selector Panel */ - { - item_col_strings.append( qfu( p_item->p_input->psz_name ) ); - return; - } - -#define ADD_META( item, meta ) \ - psz_meta = input_item_Get ## meta ( item->p_input ); \ - item_col_strings.append( qfu( psz_meta ) ); \ - free( psz_meta ); - - for( int i_index=1; i_index <= VLC_META_ENGINE_ART_URL; i_index *= 2 ) - { - if( parentItem->i_showflags & i_index ) - { - switch( i_index ) - { - case VLC_META_ENGINE_ARTIST: - ADD_META( p_item, Artist ); - break; - case VLC_META_ENGINE_TITLE: - char *psz_title, *psz_name; - psz_title = input_item_GetTitle( p_item->p_input ); - psz_name = input_item_GetName( p_item->p_input ); - if( psz_title ) - { - ADD_META( p_item, Title ); - } - else if( psz_name ) - { - item_col_strings.append( qfu( psz_name ) ); - } - free( psz_title ); - free( psz_name ); - break; - case VLC_META_ENGINE_DESCRIPTION: - ADD_META( p_item, Description ); - break; - case VLC_META_ENGINE_DURATION: - secstotimestr( psz_duration, - input_item_GetDuration( p_item->p_input ) / 1000000 ); - item_col_strings.append( QString( psz_duration ) ); - break; - case VLC_META_ENGINE_GENRE: - ADD_META( p_item, Genre ); - break; - case VLC_META_ENGINE_COLLECTION: - ADD_META( p_item, Album ); - break; - case VLC_META_ENGINE_SEQ_NUM: - ADD_META( p_item, TrackNum ); - break; - case VLC_META_ENGINE_RATING: - ADD_META( p_item, Rating ); - default: - break; - } - } - - } -#undef ADD_META -} - /************************************************************************* * Playlist model implementation *************************************************************************/ @@ -311,6 +99,8 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */ PLModel::~PLModel() { + QSettings settings( "vlc", "vlc-qt-interface" ); + settings.setValue( "qt-pl-showflags", rootItem->i_showflags ); delCallbacks(); delete rootItem; } @@ -934,14 +724,17 @@ void PLModel::sort( int column, Qt::SortOrder order ) switch( column ) { case 0: i_mode = SORT_TITLE_NODES_FIRST;break; - case 1: i_mode = SORT_ARTIST;break; - case 2: i_mode = SORT_DURATION; break; + case 1: i_mode = SORT_DURATION; break; + case 2: i_mode = SORT_ARTIST;break; default: i_mode = SORT_TITLE_NODES_FIRST; break; } if( p_root ) + { playlist_RecursiveNodeSort( p_playlist, p_root, i_mode, order == Qt::AscendingOrder ? ORDER_NORMAL : ORDER_REVERSE ); + p_playlist->b_reset_currently_playing = VLC_TRUE; + } } PL_UNLOCK; rebuild(); @@ -1003,54 +796,52 @@ void PLModel::popup( QModelIndex & index, QPoint &point, QModelIndexList list ) void PLModel::viewchanged( int meta ) { - if( rootItem ) - { - int index=0; - switch( meta ) - { - case VLC_META_ENGINE_TITLE: - index=0; break; - case VLC_META_ENGINE_DURATION: - index=1; break; - case VLC_META_ENGINE_ARTIST: - index=2; break; - case VLC_META_ENGINE_GENRE: - index=3; break; - case VLC_META_ENGINE_COPYRIGHT: - index=4; break; - case VLC_META_ENGINE_COLLECTION: - index=5; break; - case VLC_META_ENGINE_SEQ_NUM: - index=6; break; - case VLC_META_ENGINE_DESCRIPTION: - index=7; break; - default: - break; - } - /* UNUSED emit layoutAboutToBeChanged(); */ - index = __MIN( index , rootItem->item_col_strings.count() ); - QModelIndex parent = createIndex( 0, 0, rootItem ); - - if( rootItem->i_showflags & meta ) - /* Removing columns */ - { - beginRemoveColumns( parent, index, index+1 ); - rootItem->i_showflags &= ~( meta ); - rootItem->updateview(); - endRemoveColumns(); - } - else - { - /* Adding columns */ - beginInsertColumns( createIndex( 0, 0, rootItem), index, index+1 ); - rootItem->i_showflags |= meta; - rootItem->updateview(); - endInsertColumns(); - } - rebuild(); - config_PutInt( p_intf, "qt-pl-showflags", rootItem->i_showflags ); - config_SaveConfigFile( p_intf, NULL ); - } + if( rootItem ) + { + int index=0; + switch( meta ) + { + case VLC_META_ENGINE_TITLE: + index=0; break; + case VLC_META_ENGINE_DURATION: + index=1; break; + case VLC_META_ENGINE_ARTIST: + index=2; break; + case VLC_META_ENGINE_GENRE: + index=3; break; + case VLC_META_ENGINE_COPYRIGHT: + index=4; break; + case VLC_META_ENGINE_COLLECTION: + index=5; break; + case VLC_META_ENGINE_SEQ_NUM: + index=6; break; + case VLC_META_ENGINE_DESCRIPTION: + index=7; break; + default: + break; + } + /* UNUSED emit layoutAboutToBeChanged(); */ + index = __MIN( index, rootItem->item_col_strings.count() ); + QModelIndex parent = createIndex( 0, 0, rootItem ); + + if( rootItem->i_showflags & meta ) + /* Removing columns */ + { + beginRemoveColumns( parent, index, index+1 ); + rootItem->i_showflags &= ~( meta ); + rootItem->updateColumnHeaders(); + endRemoveColumns(); + } + else + { + /* Adding columns */ + beginInsertColumns( createIndex( 0, 0, rootItem), index, index+1 ); + rootItem->i_showflags |= meta; + rootItem->updateColumnHeaders(); + endInsertColumns(); + } + rebuild(); + } } void PLModel::popupDel() @@ -1094,7 +885,7 @@ void PLModel::popupSave() #include void PLModel::popupExplore() { - ShellExecuteW( NULL, L"explore", L"C:\\", NULL, NULL, SW_SHOWNORMAL ); + ShellExecute( NULL, "explore", "C:\\", NULL, NULL, SW_SHOWNORMAL ); } #endif