From 2c3e7492a5df183e14dbea7ac4a7059dcbf83328 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Mon, 30 Jul 2012 19:51:47 -0400 Subject: [PATCH] Jump to and scroll to playing track in grid view on track page --- src/libtomahawk/playlist/GridView.cpp | 11 ++++++ src/libtomahawk/playlist/GridView.h | 1 + .../widgets/infowidgets/TrackInfoWidget.cpp | 39 +++++++++++++------ .../widgets/infowidgets/TrackInfoWidget.h | 4 +- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/libtomahawk/playlist/GridView.cpp b/src/libtomahawk/playlist/GridView.cpp index 6714bd97f..4c5e635ca 100644 --- a/src/libtomahawk/playlist/GridView.cpp +++ b/src/libtomahawk/playlist/GridView.cpp @@ -417,4 +417,15 @@ GridView::jumpToCurrentTrack() return true; } + +QRect +GridView::currentTrackRect() const +{ + if ( !m_playing.isValid() ) + return QRect(); + + return visualRect( m_playing ); +} + + #include "GridView.moc" diff --git a/src/libtomahawk/playlist/GridView.h b/src/libtomahawk/playlist/GridView.h index 13e8fa10b..a5b006d2b 100644 --- a/src/libtomahawk/playlist/GridView.h +++ b/src/libtomahawk/playlist/GridView.h @@ -72,6 +72,7 @@ public: virtual bool setFilter( const QString& filter ); virtual bool jumpToCurrentTrack(); + QRect currentTrackRect() const; virtual bool isBeingPlayed() const { return m_playing.isValid(); } diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp index 98d20957f..c8c4f4a45 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp @@ -38,6 +38,7 @@ using namespace Tomahawk; TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* parent ) : QWidget( parent ) , ui( new Ui::TrackInfoWidget ) + , m_scrollArea( 0 ) { QWidget* widget = new QWidget; ui->setupUi( widget ); @@ -98,17 +99,17 @@ TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* par m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( 48, 48 ) ); ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) ); - QScrollArea* area = new QScrollArea(); - area->setWidgetResizable( true ); - area->setWidget( widget ); - area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); + m_scrollArea = new QScrollArea(); + m_scrollArea->setWidgetResizable( true ); + m_scrollArea->setWidget( widget ); + m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); - area->setStyleSheet( "QScrollArea { background-color: #454e59 }" ); - area->setFrameShape( QFrame::NoFrame ); - area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + m_scrollArea->setStyleSheet( "QScrollArea { background-color: #454e59 }" ); + m_scrollArea->setFrameShape( QFrame::NoFrame ); + m_scrollArea->setAttribute( Qt::WA_MacShowFocusRect, 0 ); QVBoxLayout* layout = new QVBoxLayout(); - layout->addWidget( area ); + layout->addWidget( m_scrollArea ); setLayout( layout ); TomahawkUtils::unmarginLayout( layout ); @@ -141,12 +142,28 @@ TrackInfoWidget::playlistInterface() const bool TrackInfoWidget::isBeingPlayed() const { - //tDebug() << Q_FUNC_INFO << "audioengine playlistInterface = " << AudioEngine::instance()->currentTrackPlaylist()->id(); - //tDebug() << Q_FUNC_INFO << "albumsView playlistInterface = " << ui->albumsView->playlistInterface()->id(); - //tDebug() << Q_FUNC_INFO << "tracksView playlistInterface = " << ui->tracksView->playlistInterface()->id(); if ( ui->similarTracksView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) return true; + if ( ui->similarTracksView->playlistInterface()->hasChildInterface( AudioEngine::instance()->currentTrackPlaylist() ) ) + return true; + + return false; +} + + +bool +TrackInfoWidget::jumpToCurrentTrack() +{ + if ( ui->similarTracksView->jumpToCurrentTrack() && !ui->similarTracksView->currentTrackRect().isEmpty() ) + { + // We embed the view in a scrollarea, so we have to manually ensure we make it visible + const QRect itemRect = ui->similarTracksView->currentTrackRect(); + m_scrollArea->ensureVisible( itemRect.right(), itemRect.bottom(), 50, 50 ); + + return true; + } + return false; } diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h index 48766be37..1e26ebfae 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h @@ -40,6 +40,7 @@ #include "Typedefs.h" class PlayableModel; +class QScrollArea; namespace Ui { @@ -68,7 +69,7 @@ public: virtual bool isTemporaryPage() const { return true; } virtual bool showInfoBar() const { return false; } - virtual bool jumpToCurrentTrack() { return false; } + virtual bool jumpToCurrentTrack(); public slots: void load( const Tomahawk::query_ptr& query ); @@ -88,6 +89,7 @@ private slots: private: Ui::TrackInfoWidget *ui; + QScrollArea* m_scrollArea; Tomahawk::query_ptr m_query; Tomahawk::artist_ptr m_artist;