From 8214e954dbd9e809045c5fdacc72832afdfd117c Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 16 Jul 2014 04:19:50 +0100 Subject: [PATCH] Add flatcollection view --- src/libtomahawk/ViewManager.cpp | 3 ++ src/libtomahawk/playlist/FlexibleTreeView.cpp | 39 +++++++++++----- src/libtomahawk/playlist/FlexibleTreeView.h | 3 ++ src/libtomahawk/playlist/PlayableModel.cpp | 44 ++++++++++++++++--- src/libtomahawk/playlist/PlayableModel.h | 4 ++ 5 files changed, 76 insertions(+), 17 deletions(-) diff --git a/src/libtomahawk/ViewManager.cpp b/src/libtomahawk/ViewManager.cpp index 6452818a4..04af86274 100644 --- a/src/libtomahawk/ViewManager.cpp +++ b/src/libtomahawk/ViewManager.cpp @@ -305,10 +305,13 @@ ViewManager::show( const Tomahawk::collection_ptr& collection ) view->columnView()->proxyModel()->setStyle( PlayableProxyModel::Collection ); TreeModel* model = new TreeModel(); + PlayableModel* flatModel = new PlayableModel(); view->setTreeModel( model ); + view->setFlatModel( flatModel ); model->addCollection( collection ); + flatModel->appendTracks( collection ); setPage( view ); if ( !collection.isNull() ) diff --git a/src/libtomahawk/playlist/FlexibleTreeView.cpp b/src/libtomahawk/playlist/FlexibleTreeView.cpp index 97856a7b1..dca61a270 100644 --- a/src/libtomahawk/playlist/FlexibleTreeView.cpp +++ b/src/libtomahawk/playlist/FlexibleTreeView.cpp @@ -48,14 +48,14 @@ FlexibleTreeView::FlexibleTreeView( QWidget* parent, QWidget* extraHeader ) , m_modeHeader( new ModeHeader( this ) ) , m_columnView( new ColumnView() ) , m_treeView( new TreeView() ) - , m_trackView( 0 ) + , m_trackView( new TrackView() ) , m_model( 0 ) + , m_flatModel( 0 ) , m_temporary( false ) { qRegisterMetaType< FlexibleTreeViewMode >( "FlexibleTreeViewMode" ); m_treeView->proxyModel()->setStyle( PlayableProxyModel::Collection ); - m_treeView->proxyModel()->setPlaylistInterface( m_columnView->proxyModel()->playlistInterface() ); // m_trackView->setPlaylistInterface( m_playlistInterface ); @@ -93,8 +93,7 @@ FlexibleTreeView::FlexibleTreeView( QWidget* parent, QWidget* extraHeader ) m_stack->addWidget( m_columnView ); m_stack->addWidget( m_treeView ); - /* m_stack->addWidget( m_gridView ); - m_stack->addWidget( m_trackView );*/ + m_stack->addWidget( m_trackView ); connect( m_header, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) ); @@ -182,7 +181,6 @@ FlexibleTreeView::setTreeModel( TreeModel* model ) // m_trackView->setPlayableModel( model ); m_columnView->setTreeModel( model ); m_treeView->setTreeModel( model ); - // m_gridView->setPlayableModel( model ); /* m_trackView->setSortingEnabled( false ); m_trackView->sortByColumn( -1 ); @@ -195,6 +193,27 @@ FlexibleTreeView::setTreeModel( TreeModel* model ) } +void +FlexibleTreeView::setFlatModel( PlayableModel* model ) +{ + if ( m_flatModel ) + { +// disconnect( m_flatModel, SIGNAL( changed() ), this, SLOT( onModelChanged() ) ); + delete m_flatModel; + } + + m_flatModel = model; + + m_trackView->setPlayableModel( model ); + + m_trackView->setSortingEnabled( true ); + m_trackView->sortByColumn( 0 ); + +/* connect( model, SIGNAL( changed() ), SLOT( onModelChanged() ), Qt::UniqueConnection ); + onModelChanged();*/ +} + + void FlexibleTreeView::setCurrentMode( FlexibleTreeViewMode mode ) { @@ -224,7 +243,7 @@ FlexibleTreeView::setCurrentMode( FlexibleTreeViewMode mode ) case Albums: { -// m_stack->setCurrentWidget( m_gridView ); + m_stack->setCurrentWidget( m_trackView ); break; } } @@ -270,7 +289,7 @@ FlexibleTreeView::jumpToCurrentTrack() // note: the order of comparison is important here, if we'd write "b || foo" then foo will not be executed if b is already true! b = m_columnView->jumpToCurrentTrack() || b; -// b = m_trackView->jumpToCurrentTrack() || b; + b = m_trackView->jumpToCurrentTrack() || b; b = m_treeView->jumpToCurrentTrack() || b; return b; @@ -284,8 +303,7 @@ FlexibleTreeView::setFilter( const QString& pattern ) m_columnView->setFilter( pattern ); m_treeView->proxyModel()->setFilter( pattern ); - /* m_gridView->setFilter( pattern ); - m_trackView->setFilter( pattern );*/ + m_trackView->setFilter( pattern ); return true; } @@ -318,8 +336,7 @@ FlexibleTreeView::setEmptyTip( const QString& tip ) { m_columnView->setEmptyTip( tip ); m_treeView->setEmptyTip( tip ); - /* m_gridView->setEmptyTip( tip ); - m_trackView->setEmptyTip( tip );*/ + m_trackView->setEmptyTip( tip ); } diff --git a/src/libtomahawk/playlist/FlexibleTreeView.h b/src/libtomahawk/playlist/FlexibleTreeView.h index a9a35d4a4..012b278e4 100644 --- a/src/libtomahawk/playlist/FlexibleTreeView.h +++ b/src/libtomahawk/playlist/FlexibleTreeView.h @@ -31,6 +31,7 @@ class TrackView; class TreeView; class ColumnView; class TreeModel; +class PlayableModel; class ModeHeader; class PlaylistModel; class FilterHeader; @@ -70,6 +71,7 @@ public: void setTrackView( TrackView* view ); void setTreeModel( TreeModel* model ); + void setFlatModel( PlayableModel* model ); void setPixmap( const QPixmap& pixmap ); void setEmptyTip( const QString& tip ); @@ -97,6 +99,7 @@ private: TrackView* m_trackView; TreeModel* m_model; + PlayableModel* m_flatModel; QStackedWidget* m_stack; FlexibleTreeViewMode m_mode; diff --git a/src/libtomahawk/playlist/PlayableModel.cpp b/src/libtomahawk/playlist/PlayableModel.cpp index 15b9f2d26..802f45781 100644 --- a/src/libtomahawk/playlist/PlayableModel.cpp +++ b/src/libtomahawk/playlist/PlayableModel.cpp @@ -904,20 +904,26 @@ PlayableModel::onDataChanged() void PlayableModel::startLoading() { - tDebug() << Q_FUNC_INFO; Q_D( PlayableModel ); - d->loading = true; - emit loadingStarted(); + if ( !d->loading ) + { + tDebug() << Q_FUNC_INFO; + d->loading = true; + emit loadingStarted(); + } } void PlayableModel::finishLoading() { - tDebug() << Q_FUNC_INFO; Q_D( PlayableModel ); - d->loading = false; - emit loadingFinished(); + if ( d->loading ) + { + tDebug() << Q_FUNC_INFO; + d->loading = false; + emit loadingFinished(); + } } @@ -1000,6 +1006,13 @@ PlayableModel::appendTracks( const QList< Tomahawk::track_ptr >& tracks, const Q } +void +PlayableModel::appendTracks( const Tomahawk::collection_ptr& collection ) +{ + insertTracks( collection, rowCount( QModelIndex() ) ); +} + + void PlayableModel::insertArtist( const Tomahawk::artist_ptr& artist, int row ) { @@ -1053,6 +1066,25 @@ PlayableModel::insertQueries( const QList< Tomahawk::query_ptr >& queries, int r } +void +PlayableModel::insertTracks( const Tomahawk::collection_ptr& collection, int row ) +{ + Tomahawk::TracksRequest* req = collection->requestTracks( Tomahawk::album_ptr() ); + connect( dynamic_cast< QObject* >( req ), SIGNAL( tracks( QList< Tomahawk::query_ptr > ) ), + this, SLOT( onTracksAdded( QList< Tomahawk::query_ptr > ) ), Qt::UniqueConnection ); + req->enqueue(); + +// connect( collection.data(), SIGNAL( changed() ), SLOT( onCollectionChanged() ), Qt::UniqueConnection ); +} + + +void +PlayableModel::onTracksAdded( const QList< Tomahawk::query_ptr >& queries ) +{ + appendQueries( queries ); +} + + void PlayableModel::setTitle( const QString& title ) { diff --git a/src/libtomahawk/playlist/PlayableModel.h b/src/libtomahawk/playlist/PlayableModel.h index 72e7fbd53..5a0db0a5c 100644 --- a/src/libtomahawk/playlist/PlayableModel.h +++ b/src/libtomahawk/playlist/PlayableModel.h @@ -158,6 +158,7 @@ public slots: virtual void appendQuery( const Tomahawk::query_ptr& query ); virtual void appendArtist( const Tomahawk::artist_ptr& artist ); virtual void appendAlbum( const Tomahawk::album_ptr& album ); + virtual void appendTracks( const Tomahawk::collection_ptr& collection ); virtual void insertQueries( const QList< Tomahawk::query_ptr >& queries, int row = 0, const QList< Tomahawk::PlaybackLog >& logs = QList< Tomahawk::PlaybackLog >() ); virtual void insertArtists( const QList< Tomahawk::artist_ptr >& artists, int row = 0 ); @@ -165,6 +166,7 @@ public slots: virtual void insertQuery( const Tomahawk::query_ptr& query, int row = 0, const Tomahawk::PlaybackLog& log = Tomahawk::PlaybackLog() ); virtual void insertArtist( const Tomahawk::artist_ptr& artist, int row = 0 ); virtual void insertAlbum( const Tomahawk::album_ptr& album, int row = 0 ); + virtual void insertTracks( const Tomahawk::collection_ptr& collection, int row = 0 ); virtual bool removeRows( int row, int count, const QModelIndex& parent = QModelIndex() ); virtual void remove( int row, bool moreToCome = false ); @@ -191,6 +193,8 @@ private slots: void onPlaybackStarted( const Tomahawk::result_ptr result ); void onPlaybackStopped(); + void onTracksAdded( const QList< Tomahawk::query_ptr >& queries ); + private: void init(); template