X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Fplaylist%2Fstandardpanel.cpp;h=9ae14e96afc8cb63ba8d05df4d783362edd75308;hb=639eca0ef43b79aba3deeaf2c414c3556c33c7aa;hp=e7c15b2bcfda88cce7ca729d35cdf8357ff0d6c0;hpb=ef2ea79839f18fd32172344596473820d6d35cbe;p=vlc diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp index e7c15b2bcf..9ae14e96af 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.cpp +++ b/modules/gui/qt4/components/playlist/standardpanel.cpp @@ -28,7 +28,9 @@ #include "components/playlist/standardpanel.hpp" +#include "components/playlist/vlc_model.hpp" /* VLCModel */ #include "components/playlist/playlist_model.hpp" /* PLModel */ +#include "components/playlist/ml_model.hpp" /* MLModel */ #include "components/playlist/views.hpp" /* 3 views */ #include "components/playlist/selector.hpp" /* PLSelector */ #include "menus.hpp" /* Popup */ @@ -53,9 +55,13 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent, intf_thread_t *_p_intf, playlist_item_t *p_root, PLSelector *_p_selector, - PLModel *_p_model ) - : QWidget( _parent ), p_intf( _p_intf ), - p_selector( _p_selector ), model( _p_model ) + PLModel *_p_model, + MLModel *_p_plmodel) + : QWidget( _parent ), + model( _p_model ), + mlmodel( _p_plmodel), + p_intf( _p_intf ), + p_selector( _p_selector ) { viewStack = new QStackedLayout( this ); viewStack->setSpacing( 0 ); viewStack->setMargin( 0 ); @@ -70,23 +76,17 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent, lastActivatedId = -1; /* Saved Settings */ - getSettings()->beginGroup("Playlist"); - int i_savedViewMode = getSettings()->value( "view-mode", TREE_VIEW ).toInt(); - getSettings()->endGroup(); - /* Limit the saved value to a possible one inside [0, VIEW_COUNT[ */ - if(i_savedViewMode < 0 || i_savedViewMode >= VIEW_COUNT) - i_savedViewMode = 0; - + int i_savedViewMode = getSettings()->value( "Playlist/view-mode", TREE_VIEW ).toInt(); showView( i_savedViewMode ); - DCONNECT( THEMIM, leafBecameParent( input_item_t *), - this, browseInto( input_item_t * ) ); + DCONNECT( THEMIM, leafBecameParent( int ), + this, browseInto( int ) ); - CONNECT( model, currentChanged( const QModelIndex& ), + CONNECT( model, currentIndexChanged( const QModelIndex& ), this, handleExpansion( const QModelIndex& ) ); - CONNECT( model, rootChanged(), this, handleRootChange() ); + CONNECT( model, rootIndexChanged(), this, browseInto() ); - setRoot( p_root ); + setRootItem( p_root, false ); } StandardPLPanel::~StandardPLPanel() @@ -94,14 +94,7 @@ StandardPLPanel::~StandardPLPanel() getSettings()->beginGroup("Playlist"); if( treeView ) getSettings()->setValue( "headerStateV2", treeView->header()->saveState() ); - if( currentView == treeView ) - getSettings()->setValue( "view-mode", TREE_VIEW ); - else if( currentView == listView ) - getSettings()->setValue( "view-mode", LIST_VIEW ); - else if( currentView == iconView ) - getSettings()->setValue( "view-mode", ICON_VIEW ); - else if( currentView == picFlowView ) - getSettings()->setValue( "view-mode", PICTUREFLOW_VIEW ); + getSettings()->setValue( "view-mode", currentViewIndex() ); getSettings()->endGroup(); } @@ -119,11 +112,6 @@ void StandardPLPanel::handleExpansion( const QModelIndex& index ) currentView->scrollTo( index ); } -void StandardPLPanel::handleRootChange() -{ - browseInto(); -} - void StandardPLPanel::popupPlView( const QPoint &point ) { QModelIndex index = currentView->indexAt( point ); @@ -135,15 +123,14 @@ void StandardPLPanel::popupPlView( const QPoint &point ) QVLCMenu::PopupMenu( p_intf, true ); } -void StandardPLPanel::popupSelectColumn( QPoint pos ) +void StandardPLPanel::popupSelectColumn( QPoint ) { QMenu menu; assert( treeView ); /* We do not offer the option to hide index 0 column, or - * QTreeView will behave weird */ - int i, j; - for( i = 1 << 1, j = 1; i < COLUMN_END; i <<= 1, j++ ) + * QTreeView will behave weird */ + for( int i = 1 << 1, j = 1; i < COLUMN_END; i <<= 1, j++ ) { QAction* option = menu.addAction( qfu( psz_column_title( i ) ) ); option->setCheckable( true ); @@ -167,7 +154,9 @@ void StandardPLPanel::search( const QString& searchText ) p_selector->getCurrentSelectedItem( &type, &name ); if( type != SD_TYPE ) { - bool flat = currentView == iconView || currentView == listView || currentView == picFlowView; + bool flat = ( currentView == iconView || + currentView == listView || + currentView == picFlowView ); model->search( searchText, flat ? currentView->rootIndex() : QModelIndex(), !flat ); @@ -183,15 +172,31 @@ void StandardPLPanel::searchDelayed( const QString& searchText ) if( type == SD_TYPE ) { if( !name.isEmpty() && !searchText.isEmpty() ) - playlist_ServicesDiscoveryControl( THEPL, qtu( name ), SD_CMD_SEARCH, qtu( searchText ) ); + playlist_ServicesDiscoveryControl( THEPL, qtu( name ), SD_CMD_SEARCH, + qtu( searchText ) ); } } /* Set the root of the new Playlist */ /* This activated by the selector selection */ -void StandardPLPanel::setRoot( playlist_item_t *p_item ) +void StandardPLPanel::setRootItem( playlist_item_t *p_item, bool b ) { - model->rebuild( p_item ); +#ifdef MEDIA_LIBRARY + if( b ) + { + msg_Dbg( p_intf, "Setting the SQL ML" ); + currentView->setModel( mlmodel ); + } + else +#else + Q_UNUSED( b ); +#endif + { + msg_Dbg( p_intf, "Normal PL/ML or SD" ); + if( currentView->model() != model ) + currentView->setModel( model ); + model->rebuild( p_item ); + } } void StandardPLPanel::browseInto( const QModelIndex &index ) @@ -205,11 +210,11 @@ void StandardPLPanel::browseInto( const QModelIndex &index ) emit viewChanged( index ); } -void StandardPLPanel::browseInto( ) +void StandardPLPanel::browseInto() { - browseInto( currentRootIndexId != -1 && currentView != treeView ? - model->index( currentRootIndexId, 0 ) : - QModelIndex() ); + browseInto( (currentRootIndexId != -1 && currentView != treeView) ? + model->index( currentRootIndexId, 0 ) : + QModelIndex() ); } void StandardPLPanel::wheelEvent( QWheelEvent *e ) @@ -218,7 +223,7 @@ void StandardPLPanel::wheelEvent( QWheelEvent *e ) e->accept(); } -bool StandardPLPanel::eventFilter ( QObject * watched, QEvent * event ) +bool StandardPLPanel::eventFilter ( QObject *, QEvent * event ) { if (event->type() == QEvent::KeyPress) { @@ -286,6 +291,7 @@ void StandardPLPanel::createTreeView() treeView->setAnimated( true ); treeView->setUniformRowHeights( true ); treeView->setSortingEnabled( true ); + treeView->setAttribute( Qt::WA_MacShowFocusRect, false ); treeView->header()->setSortIndicator( -1 , Qt::AscendingOrder ); treeView->header()->setSortIndicatorShown( true ); treeView->header()->setClickable( true ); @@ -299,7 +305,6 @@ void StandardPLPanel::createTreeView() treeView->setContextMenuPolicy( Qt::CustomContextMenu ); /* setModel after setSortingEnabled(true), or the model will sort immediately! */ - treeView->setModel( model ); getSettings()->beginGroup("Playlist"); @@ -337,17 +342,28 @@ void StandardPLPanel::createTreeView() viewStack->addWidget( treeView ); } +void StandardPLPanel::changeModel( bool b_ml ) +{ +#ifdef MEDIA_LIBRARY + VLCModel *mod; + if( b_ml ) + mod = mlmodel; + else + mod = model; + if( currentView->model() != mod ) + currentView->setModel( mod ); +#else + Q_UNUSED( b_ml ); + if( currentView->model() != model ) + currentView->setModel( model ); +#endif +} + void StandardPLPanel::showView( int i_view ) { + switch( i_view ) { - case TREE_VIEW: - { - if( treeView == NULL ) - createTreeView(); - currentView = treeView; - break; - } case ICON_VIEW: { if( iconView == NULL ) @@ -369,15 +385,24 @@ void StandardPLPanel::showView( int i_view ) currentView = picFlowView; break; } - default: return; + default: + case TREE_VIEW: + { + if( treeView == NULL ) + createTreeView(); + currentView = treeView; + break; + } } + changeModel( false ); + viewStack->setCurrentWidget( currentView ); browseInto(); gotoPlayingItem(); } -const int StandardPLPanel::getViewNumber() +int StandardPLPanel::currentViewIndex() const { if( currentView == treeView ) return TREE_VIEW; @@ -396,8 +421,10 @@ void StandardPLPanel::cycleViews() else if( currentView == treeView ) showView( LIST_VIEW ); else if( currentView == listView ) +#ifndef NDEBUG showView( PICTUREFLOW_VIEW ); else if( currentView == picFlowView ) +#endif showView( ICON_VIEW ); else assert( 0 ); @@ -405,37 +432,31 @@ void StandardPLPanel::cycleViews() void StandardPLPanel::activate( const QModelIndex &index ) { - /* If we are not a leaf node */ - if( !index.data( PLModel::IsLeafNodeRole ).toBool() ) - { - if( currentView != treeView ) - browseInto( index ); - } - else + if( currentView->model() == model ) { - playlist_Lock( THEPL ); - playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index ) ); - p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG; - lastActivatedId = p_item->p_input->i_id; - playlist_Unlock( THEPL ); - model->activateItem( index ); + /* If we are not a leaf node */ + if( !index.data( PLModel::IsLeafNodeRole ).toBool() ) + { + if( currentView != treeView ) + browseInto( index ); + } + else + { + playlist_Lock( THEPL ); + playlist_item_t *p_item = playlist_ItemGetById( THEPL, model->itemId( index ) ); + p_item->i_flags |= PLAYLIST_SUBITEM_STOP_FLAG; + lastActivatedId = p_item->p_input->i_id; + playlist_Unlock( THEPL ); + model->activateItem( index ); + } } } -void StandardPLPanel::browseInto( input_item_t *p_input ) +void StandardPLPanel::browseInto( int i_id ) { - if( p_input->i_id != lastActivatedId ) return; - - playlist_Lock( THEPL ); - - playlist_item_t *p_item = playlist_ItemGetByInput( THEPL, p_input ); - if( !p_item ) - { - playlist_Unlock( THEPL ); - return; - } + if( i_id != lastActivatedId ) return; - QModelIndex index = model->index( p_item->i_id, 0 ); + QModelIndex index = model->index( i_id, 0 ); playlist_Unlock( THEPL ); if( currentView == treeView )