1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-18 11:51:44 +02:00

Jump to and scroll to playing track in grid view on track page

This commit is contained in:
Leo Franchi
2012-07-30 19:51:47 -04:00
parent adde983572
commit 2c3e7492a5
4 changed files with 43 additions and 12 deletions

View File

@@ -417,4 +417,15 @@ GridView::jumpToCurrentTrack()
return true; return true;
} }
QRect
GridView::currentTrackRect() const
{
if ( !m_playing.isValid() )
return QRect();
return visualRect( m_playing );
}
#include "GridView.moc" #include "GridView.moc"

View File

@@ -72,6 +72,7 @@ public:
virtual bool setFilter( const QString& filter ); virtual bool setFilter( const QString& filter );
virtual bool jumpToCurrentTrack(); virtual bool jumpToCurrentTrack();
QRect currentTrackRect() const;
virtual bool isBeingPlayed() const { return m_playing.isValid(); } virtual bool isBeingPlayed() const { return m_playing.isValid(); }

View File

@@ -38,6 +38,7 @@ using namespace Tomahawk;
TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* parent ) TrackInfoWidget::TrackInfoWidget( const Tomahawk::query_ptr& query, QWidget* parent )
: QWidget( parent ) : QWidget( parent )
, ui( new Ui::TrackInfoWidget ) , ui( new Ui::TrackInfoWidget )
, m_scrollArea( 0 )
{ {
QWidget* widget = new QWidget; QWidget* widget = new QWidget;
ui->setupUi( widget ); 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 ) ); m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultAlbumCover, TomahawkUtils::ScaledCover, QSize( 48, 48 ) );
ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) ); ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::ScaledCover, QSize( ui->cover->sizeHint() ) ) );
QScrollArea* area = new QScrollArea(); m_scrollArea = new QScrollArea();
area->setWidgetResizable( true ); m_scrollArea->setWidgetResizable( true );
area->setWidget( widget ); m_scrollArea->setWidget( widget );
area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
area->setStyleSheet( "QScrollArea { background-color: #454e59 }" ); m_scrollArea->setStyleSheet( "QScrollArea { background-color: #454e59 }" );
area->setFrameShape( QFrame::NoFrame ); m_scrollArea->setFrameShape( QFrame::NoFrame );
area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); m_scrollArea->setAttribute( Qt::WA_MacShowFocusRect, 0 );
QVBoxLayout* layout = new QVBoxLayout(); QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget( area ); layout->addWidget( m_scrollArea );
setLayout( layout ); setLayout( layout );
TomahawkUtils::unmarginLayout( layout ); TomahawkUtils::unmarginLayout( layout );
@@ -141,12 +142,28 @@ TrackInfoWidget::playlistInterface() const
bool bool
TrackInfoWidget::isBeingPlayed() const 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() ) if ( ui->similarTracksView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() )
return true; 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; return false;
} }

View File

@@ -40,6 +40,7 @@
#include "Typedefs.h" #include "Typedefs.h"
class PlayableModel; class PlayableModel;
class QScrollArea;
namespace Ui namespace Ui
{ {
@@ -68,7 +69,7 @@ public:
virtual bool isTemporaryPage() const { return true; } virtual bool isTemporaryPage() const { return true; }
virtual bool showInfoBar() const { return false; } virtual bool showInfoBar() const { return false; }
virtual bool jumpToCurrentTrack() { return false; } virtual bool jumpToCurrentTrack();
public slots: public slots:
void load( const Tomahawk::query_ptr& query ); void load( const Tomahawk::query_ptr& query );
@@ -88,6 +89,7 @@ private slots:
private: private:
Ui::TrackInfoWidget *ui; Ui::TrackInfoWidget *ui;
QScrollArea* m_scrollArea;
Tomahawk::query_ptr m_query; Tomahawk::query_ptr m_query;
Tomahawk::artist_ptr m_artist; Tomahawk::artist_ptr m_artist;