diff --git a/src/libtomahawk/playlist/RecentlyPlayedModel.cpp b/src/libtomahawk/playlist/RecentlyPlayedModel.cpp index db41f2766..2a194295f 100644 --- a/src/libtomahawk/playlist/RecentlyPlayedModel.cpp +++ b/src/libtomahawk/playlist/RecentlyPlayedModel.cpp @@ -40,6 +40,8 @@ RecentlyPlayedModel::RecentlyPlayedModel( const source_ptr& source, QObject* par { if ( source.isNull() ) { + onSourcesReady(); + connect( SourceList::instance(), SIGNAL( ready() ), SLOT( onSourcesReady() ) ); connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) ); } diff --git a/src/libtomahawk/viewmanager.cpp b/src/libtomahawk/viewmanager.cpp index d0c8aa88c..e6d181053 100644 --- a/src/libtomahawk/viewmanager.cpp +++ b/src/libtomahawk/viewmanager.cpp @@ -43,6 +43,7 @@ #include "customplaylistview.h" #include "PlaylistLargeItemDelegate.h" +#include "RecentlyPlayedModel.h" #include "dynamic/widgets/DynamicWidget.h" #include "widgets/welcomewidget.h" @@ -75,6 +76,7 @@ ViewManager::ViewManager( QObject* parent ) , m_welcomeWidget( new WelcomeWidget() ) , m_whatsHotWidget( new WhatsHotWidget() ) , m_topLovedWidget( 0 ) + , m_recentPlaysWidget( 0 ) , m_currentMode( PlaylistInterface::Tree ) , m_loaded( false ) { @@ -131,6 +133,7 @@ ViewManager::~ViewManager() delete m_whatsHotWidget; delete m_welcomeWidget; delete m_topLovedWidget; + delete m_recentPlaysWidget; delete m_contextWidget; delete m_widget; } @@ -450,6 +453,28 @@ ViewManager::showTopLovedPage() } +Tomahawk::ViewPage* +ViewManager::showRecentPlaysPage() +{ + if ( !m_recentPlaysWidget ) + { + PlaylistView* pv = new PlaylistView( m_widget ); + pv->setFrameShape( QFrame::NoFrame ); + pv->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + + RecentlyPlayedModel* raModel = new RecentlyPlayedModel( source_ptr(), pv ); + raModel->setStyle( TrackModel::Large ); + + pv->setItemDelegate( new PlaylistLargeItemDelegate( PlaylistLargeItemDelegate::RecentlyPlayed, pv, pv->proxyModel() ) ); + pv->setPlaylistModel( raModel ); + + m_recentPlaysWidget = pv; + } + + return show( m_recentPlaysWidget ); +} + + void ViewManager::setTableMode() { diff --git a/src/libtomahawk/viewmanager.h b/src/libtomahawk/viewmanager.h index ff284dd79..c2a7951aa 100644 --- a/src/libtomahawk/viewmanager.h +++ b/src/libtomahawk/viewmanager.h @@ -92,6 +92,7 @@ public: Tomahawk::ViewPage* welcomeWidget() const { return m_welcomeWidget; } Tomahawk::ViewPage* whatsHotWidget() const { return m_whatsHotWidget; } Tomahawk::ViewPage* topLovedWidget() const { return m_topLovedWidget; } + Tomahawk::ViewPage* recentPlaysWidget() const { return m_recentPlaysWidget; } ArtistView* superCollectionView() const { return m_superCollectionView; } /// Get the view page for the given item. Not pretty... @@ -140,6 +141,7 @@ public slots: Tomahawk::ViewPage* showWelcomePage(); Tomahawk::ViewPage* showWhatsHotPage(); Tomahawk::ViewPage* showTopLovedPage(); + Tomahawk::ViewPage* showRecentPlaysPage(); void showCurrentTrack(); // Returns the shown viewpage @@ -204,6 +206,7 @@ private: WelcomeWidget* m_welcomeWidget; WhatsHotWidget* m_whatsHotWidget; Tomahawk::ViewPage* m_topLovedWidget; + Tomahawk::ViewPage* m_recentPlaysWidget; QList< Tomahawk::collection_ptr > m_superCollections; diff --git a/src/sourcetree/sourcesmodel.cpp b/src/sourcetree/sourcesmodel.cpp index b8f55156c..7ee3b8b0c 100644 --- a/src/sourcetree/sourcesmodel.cpp +++ b/src/sourcetree/sourcesmodel.cpp @@ -263,13 +263,18 @@ SourcesModel::flags( const QModelIndex& index ) const void SourcesModel::appendGroups() { - beginInsertRows( QModelIndex(), rowCount(), rowCount() + 2 ); + beginInsertRows( QModelIndex(), rowCount(), rowCount() + 3 ); GroupItem* browse = new GroupItem( this, m_rootItem, tr( "Browse" ), 0 ); new HistoryItem( this, m_rootItem, tr( "Search History" ), 1 ); // new SourceTreeItem( this, m_rootItem, SourcesModel::Divider, 2 ); m_myMusicGroup = new GroupItem( this, m_rootItem, tr( "My Music" ), 3 ); + GenericPageItem* dashboard = new GenericPageItem( this, browse, tr( "Dashboard" ), QIcon( RESPATH "images/dashboard.png" ), + boost::bind( &ViewManager::showWelcomePage, ViewManager::instance() ), + boost::bind( &ViewManager::welcomeWidget, ViewManager::instance() ) ); + dashboard->setSortValue( 0 ); + // super collection GenericPageItem* sc = new GenericPageItem( this, browse, tr( "SuperCollection" ), QIcon( RESPATH "images/supercollection.png" ), boost::bind( &ViewManager::showSuperCollection, ViewManager::instance() ), @@ -282,15 +287,15 @@ SourcesModel::appendGroups() boost::bind( &ViewManager::topLovedWidget, ViewManager::instance() ) ); loved->setSortValue( 2 ); - GenericPageItem* recent = new GenericPageItem( this, browse, tr( "Dashboard" ), QIcon( RESPATH "images/dashboard.png" ), - boost::bind( &ViewManager::showWelcomePage, ViewManager::instance() ), - boost::bind( &ViewManager::welcomeWidget, ViewManager::instance() ) ); - recent->setSortValue( 0 ); + GenericPageItem* recent = new GenericPageItem( this, browse, tr( "Recently Played" ), QIcon( RESPATH "images/recently-played.png" ), + boost::bind( &ViewManager::showRecentPlaysPage, ViewManager::instance() ), + boost::bind( &ViewManager::recentPlaysWidget, ViewManager::instance() ) ); + recent->setSortValue( 3 ); GenericPageItem* hot = new GenericPageItem( this, browse, tr( "Charts" ), QIcon( RESPATH "images/charts.png" ), boost::bind( &ViewManager::showWhatsHotPage, ViewManager::instance() ), boost::bind( &ViewManager::whatsHotWidget, ViewManager::instance() ) ); - hot->setSortValue( 3 ); + hot->setSortValue( 4 ); m_collectionsGroup = new GroupItem( this, m_rootItem, tr( "Friends" ), 4 );