1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-04-07 01:22:49 +02:00

* Implement a page history in ViewManager.

This commit is contained in:
Christian Muehlhaeuser 2012-05-27 11:49:40 +02:00
parent 05ea3065f8
commit 13920ce25d
3 changed files with 96 additions and 61 deletions

@ -80,6 +80,7 @@ ViewManager::ViewManager( QObject* parent )
, m_newReleasesWidget( new NewReleasesWidget() )
, m_topLovedWidget( 0 )
, m_recentPlaysWidget( 0 )
, m_currentPage( 0 )
, m_currentMode( PlaylistModes::Tree )
, m_loaded( false )
{
@ -540,39 +541,6 @@ ViewManager::setAlbumMode()
}
void
ViewManager::historyBack()
{
if ( m_pageHistory.count() < 2 )
return;
ViewPage* oldPage = m_pageHistory.takeFirst();
ViewPage* newPage = m_pageHistory.first();
tDebug() << "Deleting page in history:" << oldPage->widget()->metaObject()->className();
tDebug() << "Showing page after moving backwards in history:" << newPage->widget()->metaObject()->className();
setPage( newPage, false );
// delete oldPage;
}
void
ViewManager::removeFromHistory( ViewPage* p )
{
if ( currentPage() == p )
{
historyBack();
}
else
{
m_pageHistory.removeAll( p );
delete p;
}
}
void
ViewManager::setFilter( const QString& filter )
{
@ -588,13 +556,80 @@ ViewManager::setFilter( const QString& filter )
void
ViewManager::applyFilter()
{
qDebug() << Q_FUNC_INFO;
if ( currentPlaylistInterface() && currentPlaylistInterface()->filter() != m_filter )
currentPlaylistInterface()->setFilter( m_filter );
}
void
ViewManager::historyBack()
{
if ( !m_pageHistoryBack.count() )
return;
ViewPage* page = m_pageHistoryBack.takeLast();
if ( m_currentPage )
{
m_pageHistoryFwd << m_currentPage;
tDebug() << "Moved to forward history:" << m_currentPage->widget()->metaObject()->className();
}
tDebug() << "Showing page after moving backwards in history:" << page->widget()->metaObject()->className();
setPage( page, false );
}
void
ViewManager::historyForward()
{
if ( !m_pageHistoryFwd.count() )
return;
ViewPage* page = m_pageHistoryFwd.takeLast();
if ( m_currentPage )
{
m_pageHistoryBack << m_currentPage;
tDebug() << "Moved to backward history:" << m_currentPage->widget()->metaObject()->className();
}
tDebug() << "Showing page after moving forwards in history:" << page->widget()->metaObject()->className();
setPage( page, false );
}
QList<ViewPage*>
ViewManager::historyPages() const
{
return m_pageHistoryBack + m_pageHistoryFwd;
}
void
ViewManager::destroyPage( ViewPage* page )
{
if ( m_currentPage == page )
{
m_currentPage = 0;
historyBack();
return;
}
QList< Tomahawk::ViewPage* > p = historyPages();
if ( p.contains( page ) )
{
m_pageHistoryBack.removeAll( page );
m_pageHistoryFwd.removeAll( page );
emit historyBackAvailable( m_pageHistoryBack.count() );
emit historyForwardAvailable( m_pageHistoryFwd.count() );
delete page;
}
}
void
ViewManager::setPage( ViewPage* page, bool trackHistory )
{
@ -605,23 +640,20 @@ ViewManager::setPage( ViewPage* page, bool trackHistory )
saveCurrentPlaylistSettings();
unlinkPlaylist();
if ( !m_pageHistory.contains( page ) )
if ( m_stack->indexOf( page->widget() ) < 0 )
{
m_stack->addWidget( page->widget() );
}
else
{
if ( trackHistory )
m_pageHistory.removeAll( page );
}
if ( trackHistory )
if ( m_currentPage && trackHistory )
{
m_pageHistory.insert( 0, page );
m_pageHistoryBack << m_currentPage;
m_pageHistoryFwd.clear();
}
m_currentPage = page;
emit historyBackAvailable( m_pageHistory.count() > 1 );
emit historyForwardAvailable( false );
emit historyBackAvailable( m_pageHistoryBack.count() );
emit historyForwardAvailable( m_pageHistoryFwd.count() );
qDebug() << "View page shown:" << page->title();
emit viewPageActivated( page );
@ -809,13 +841,14 @@ ViewManager::loadCurrentPlaylistSettings()
void
ViewManager::onWidgetDestroyed( QWidget* widget )
{
qDebug() << "Destroyed child:" << widget << widget->metaObject()->className();
tDebug() << "Destroyed child:" << widget << widget->metaObject()->className();
bool resetWidget = ( m_stack->currentWidget() == widget );
for ( int i = 0; i < m_pageHistory.count(); i++ )
QList< Tomahawk::ViewPage* > p = historyPages();
for ( int i = 0; i < p.count(); i++ )
{
ViewPage* page = m_pageHistory.at( i );
ViewPage* page = p.at( i );
if ( page->widget() != widget )
continue;
@ -827,11 +860,9 @@ ViewManager::onWidgetDestroyed( QWidget* widget )
{
m_dynamicWidgets.remove( dynamicPlaylistForInterface( page->playlistInterface() ) );
}
if ( page->widget() == widget && !resetWidget )
{
m_pageHistory.removeAt( i );
}
m_pageHistoryBack.removeAll( page );
m_pageHistoryFwd.removeAll( page );
}
m_stack->removeWidget( widget );
@ -885,7 +916,6 @@ ViewManager::setTomahawkLoaded()
}
ViewPage*
ViewManager::pageForCollection( const collection_ptr& col ) const
{
@ -910,14 +940,14 @@ ViewManager::pageForPlaylist(const playlist_ptr& pl) const
ViewPage*
ViewManager::pageForInterface( Tomahawk::playlistinterface_ptr interface ) const
{
for ( int i = 0; i < m_pageHistory.count(); i++ )
/* for ( int i = 0; i < m_pageHistory.count(); i++ )
{
ViewPage* page = m_pageHistory.at( i );
if ( page->playlistInterface() == interface )
return page;
if ( page->playlistInterface() && page->playlistInterface()->hasChildInterface( interface ) )
return page;
}
}*/
return 0;
}
@ -936,7 +966,7 @@ ViewManager::currentPlaylistInterface() const
Tomahawk::ViewPage*
ViewManager::currentPage() const
{
return m_pageHistory.isEmpty() ? 0 : m_pageHistory.front();
return m_currentPage;
}
@ -995,7 +1025,7 @@ ViewManager::collectionForInterface( Tomahawk::playlistinterface_ptr interface )
bool
ViewManager::isSuperCollectionVisible() const
{
return ( m_pageHistory.count() &&
return ( currentPage() != 0 &&
( currentPage()->playlistInterface() == m_superCollectionView->playlistInterface() ||
currentPage()->playlistInterface() == m_superAlbumView->playlistInterface() ) );
}

@ -158,7 +158,10 @@ public slots:
Tomahawk::ViewPage* show( const Tomahawk::source_ptr& source );
void historyBack();
void removeFromHistory( Tomahawk::ViewPage* p );
void historyForward();
QList< Tomahawk::ViewPage* > historyPages() const;
void destroyPage( Tomahawk::ViewPage* page );
void showQueue() { emit showQueueRequested(); }
void hideQueue() { emit hideQueueRequested(); }
@ -224,7 +227,9 @@ private:
QHash< Tomahawk::playlist_ptr, QWeakPointer<PlaylistView> > m_playlistViews;
QHash< Tomahawk::source_ptr, QWeakPointer<SourceInfoWidget> > m_sourceViews;
QList<Tomahawk::ViewPage*> m_pageHistory;
QList<Tomahawk::ViewPage*> m_pageHistoryBack;
QList<Tomahawk::ViewPage*> m_pageHistoryFwd;
Tomahawk::ViewPage* m_currentPage;
Tomahawk::collection_ptr m_currentCollection;
int m_currentMode;

@ -82,7 +82,7 @@ TemporaryPageItem::IDValue() const
void
TemporaryPageItem::removeFromList()
{
ViewManager::instance()->removeFromHistory( m_page );
ViewManager::instance()->destroyPage( m_page );
model()->removeSourceItemLink( this );