diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp index ced14d999..a2d055305 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.cpp @@ -1,6 +1,6 @@ /* === This file is part of Tomahawk Player - === * - * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2010-2014, Christian Muehlhaeuser * Copyright 2010-2012, Jeff Mitchell * Copyright 2010-2011, Leo Franchi * @@ -28,7 +28,7 @@ #include "SourceList.h" #include "playlist/PlayableModel.h" #include "audio/AudioEngine.h" -#include "widgets/StatsGauge.h" +#include "widgets/BasicHeader.h" #include "utils/TomahawkStyle.h" #include "utils/TomahawkUtilsGui.h" #include "utils/Logger.h" @@ -39,131 +39,43 @@ 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; + m_headerWidget = new BasicHeader; ui->setupUi( widget ); - ui->statsLabel->setStyleSheet( "QLabel { background-image:url(); border: 2px solid #dddddd; background-color: #faf9f9; border-radius: 4px; padding: 12px; }" ); - ui->statsLabel->setVisible( false ); - -/* ui->lyricsView->setVisible( false ); // FIXME eventually - TomahawkStyle::stylePageFrame( ui->lyricsView ); - TomahawkStyle::styleScrollBar( ui->lyricsView->verticalScrollBar() );*/ - - ui->lineAbove->setStyleSheet( QString( "QFrame { border: 1px solid %1; }" ).arg( TomahawkStyle::HEADER_BACKGROUND.name() ) ); - ui->lineBelow->setStyleSheet( QString( "QFrame { border: 1px solid black; }" ) ); - m_pixmap = TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::Original, QSize( 48, 48 ) ); - ui->cover->setPixmap( TomahawkUtils::defaultPixmap( TomahawkUtils::DefaultTrackImage, TomahawkUtils::Original, ui->cover->size() ) ); - ui->cover->setShowText( false ); - QHBoxLayout* l = new QHBoxLayout( ui->statsWidget ); - m_playStatsGauge = new StatsGauge( ui->statsWidget ); - m_playStatsGauge->setText( tr( "# PLAYS / ARTIST" ) ); - m_playStatsTotalGauge = new StatsGauge( ui->statsWidget ); - m_playStatsTotalGauge->setText( tr( "YOUR SONG RANK" ) ); - m_playStatsTotalGauge->setInvertedAppearance( true ); + m_relatedTracksModel = new PlayableModel( ui->trackView ); + ui->trackView->setPlayableModel( m_relatedTracksModel ); + ui->trackView->setCaption( tr( "Similar Tracks" ) ); + ui->trackView->setEmptyTip( tr( "Sorry, but we could not find similar tracks for this song!" ) ); - l->addSpacerItem( new QSpacerItem( 0, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding ) ); - l->addWidget( m_playStatsGauge ); - l->addSpacerItem( new QSpacerItem( 0, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding ) ); - l->addWidget( m_playStatsTotalGauge ); - l->addSpacerItem( new QSpacerItem( 0, 1, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding ) ); - ui->statsWidget->setLayout( l ); - TomahawkUtils::unmarginLayout( l ); + ui->topHits->setStyleSheet( QString( "QListView { background-color: #f9f9f9; }" ) ); + TomahawkStyle::stylePageFrame( ui->trackFrame ); + ui->topHits->setVisible( false ); + ui->topHitsLabel->setVisible( false ); { - m_relatedTracksModel = new PlayableModel( ui->similarTracksView ); - ui->similarTracksView->setPlayableModel( m_relatedTracksModel ); - ui->similarTracksView->proxyModel()->sort( -1 ); - ui->similarTracksView->setEmptyTip( tr( "Sorry, but we could not find similar tracks for this song!" ) ); - ui->similarTracksView->setAutoResize( true ); - ui->similarTracksView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); - ui->similarTracksView->setItemSize( QSize( 190, 190 + 56 ) ); - // TomahawkUtils::styleScrollBar( ui->similarTracksView->verticalScrollBar() ); - // ui->similarTracksView->setStyleSheet( "QListView { background-color: transparent; } QListView::item { background-color: transparent; }" ); - - TomahawkStyle::stylePageFrame( ui->similarTracksView ); - TomahawkStyle::stylePageFrame( ui->frame ); - } - - { - QFont f = ui->trackLabel->font(); - f.setFamily( "Titillium Web" ); - - QPalette p = ui->trackLabel->palette(); - p.setColor( QPalette::Foreground, TomahawkStyle::HEADER_LABEL ); - - ui->trackLabel->setFont( f ); - ui->trackLabel->setPalette( p ); - } - - { - ui->artistLabel->setContentsMargins( 6, 2, 6, 2 ); - ui->artistLabel->setType( QueryLabel::Artist ); - connect( ui->artistLabel, SIGNAL( clickedArtist() ), SLOT( onArtistClicked() ) ); - - QFont f = ui->artistLabel->font(); - f.setFamily( "Titillium Web" ); - - QPalette p = ui->artistLabel->palette(); - p.setColor( QPalette::Foreground, TomahawkStyle::HEADER_TEXT ); - - ui->artistLabel->setFont( f ); - ui->artistLabel->setPalette( p ); - } - - { - QFont f = ui->label->font(); - f.setFamily( "Pathway Gothic One" ); - - QPalette p = ui->label->palette(); - p.setColor( QPalette::Foreground, TomahawkStyle::PAGE_CAPTION ); - - ui->label->setFont( f ); - ui->label->setPalette( p ); - } - - { - QFont f = ui->statsLabel->font(); - f.setPointSize( TomahawkUtils::defaultFontSize() + 2 ); - ui->statsLabel->setFont( f ); - } - - /*{ - QPalette p = ui->lyricsView->palette(); - p.setColor( QPalette::Foreground, TomahawkStyle::PAGE_FOREGROUND ); - p.setColor( QPalette::Text, TomahawkStyle::PAGE_FOREGROUND ); - ui->lyricsView->setPalette( p ); - }*/ - - { - m_scrollArea = new QScrollArea(); - m_scrollArea->setWidgetResizable( true ); - m_scrollArea->setWidget( widget ); - m_scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); + QScrollArea* area = new QScrollArea(); + area->setWidgetResizable( true ); + area->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + area->setWidget( widget ); QPalette pal = palette(); - pal.setBrush( backgroundRole(), TomahawkStyle::HEADER_BACKGROUND ); - m_scrollArea->setPalette( pal ); - m_scrollArea->setAutoFillBackground( true ); - m_scrollArea->setFrameShape( QFrame::NoFrame ); - m_scrollArea->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + pal.setBrush( backgroundRole(), Qt::white ); + area->setPalette( pal ); + area->setAutoFillBackground( true ); + area->setFrameShape( QFrame::NoFrame ); + area->setAttribute( Qt::WA_MacShowFocusRect, 0 ); QVBoxLayout* layout = new QVBoxLayout(); - layout->addWidget( m_scrollArea ); + layout->addWidget( m_headerWidget ); + layout->addWidget( area ); setLayout( layout ); TomahawkUtils::unmarginLayout( layout ); } - { - QPalette pal = palette(); - pal.setBrush( backgroundRole(), TomahawkStyle::PAGE_BACKGROUND ); - ui->widget->setPalette( pal ); - ui->widget->setAutoFillBackground( true ); - } - load( query ); } @@ -178,17 +90,17 @@ TrackInfoWidget::~TrackInfoWidget() Tomahawk::playlistinterface_ptr TrackInfoWidget::playlistInterface() const { - return ui->similarTracksView->playlistInterface(); + return ui->trackView->playlistInterface(); } bool TrackInfoWidget::isBeingPlayed() const { - if ( ui->similarTracksView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + if ( ui->trackView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) return true; - if ( ui->similarTracksView->playlistInterface()->hasChildInterface( AudioEngine::instance()->currentTrackPlaylist() ) ) + if ( ui->trackView->playlistInterface()->hasChildInterface( AudioEngine::instance()->currentTrackPlaylist() ) ) return true; return false; @@ -198,52 +110,32 @@ TrackInfoWidget::isBeingPlayed() const 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 ui->trackView && ui->trackView->jumpToCurrentTrack(); } void TrackInfoWidget::load( const query_ptr& query ) { - if ( !m_query.isNull() ) + if ( m_query ) { disconnect( m_query->track().data(), SIGNAL( lyricsLoaded() ), this, SLOT( onLyricsLoaded() ) ); disconnect( m_query->track().data(), SIGNAL( similarTracksLoaded() ), this, SLOT( onSimilarTracksLoaded() ) ); - disconnect( m_query->track().data(), SIGNAL( statsLoaded() ), this, SLOT( onStatsLoaded() ) ); disconnect( m_query->track().data(), SIGNAL( updated() ), this, SLOT( onCoverUpdated() ) ); - disconnect( m_artist.data(), SIGNAL( statsLoaded() ), this, SLOT( onStatsLoaded() ) ); - disconnect( m_artist.data(), SIGNAL( similarArtistsLoaded() ), this, SLOT( onSimilarArtistsLoaded() ) ); } m_query = query; m_artist = Artist::get( m_query->track()->artist() ); m_title = QString( "%1 - %2" ).arg( query->track()->artist() ).arg( query->track()->track() ); - ui->trackLabel->setText( m_query->track()->track() ); - ui->artistLabel->setArtist( m_query->track()->artistPtr() ); + m_headerWidget->setCaption( m_query->track()->track() ); - connect( m_artist.data(), SIGNAL( similarArtistsLoaded() ), SLOT( onSimilarArtistsLoaded() ) ); - connect( m_artist.data(), SIGNAL( statsLoaded() ), SLOT( onStatsLoaded() ) ); connect( m_query->track().data(), SIGNAL( lyricsLoaded() ), SLOT( onLyricsLoaded() ) ); connect( m_query->track().data(), SIGNAL( similarTracksLoaded() ), SLOT( onSimilarTracksLoaded() ) ); connect( m_query->track().data(), SIGNAL( updated() ), SLOT( onCoverUpdated() ) ); - connect( m_query->track().data(), SIGNAL( statsLoaded() ), SLOT( onStatsLoaded() ) ); - m_artist->loadStats(); - m_query->track()->loadStats(); // m_query->lyrics(); onCoverUpdated(); - ui->cover->setQuery( query ); - m_relatedTracksModel->clear(); m_relatedTracksModel->startLoading(); @@ -258,51 +150,10 @@ TrackInfoWidget::onCoverUpdated() if ( m_query->track()->cover( QSize( 0, 0 ) ).isNull() ) return; - m_pixmap = m_query->track()->cover( ui->cover->size() ); - ui->cover->setPixmap( TomahawkUtils::createRoundedImage( m_pixmap, QSize( 0, 0 ) ) ); -} + m_pixmap = m_query->track()->cover( QSize( 0, 0 ) ); + emit pixmapChanged( m_pixmap ); - -void -TrackInfoWidget::onStatsLoaded() -{ - QString stats; - QList< Tomahawk::PlaybackLog > history = m_query->track()->playbackHistory( SourceList::instance()->getLocal() ); - const unsigned int trackCounter = m_query->track()->playbackCount( SourceList::instance()->getLocal() ); - const unsigned int artistCounter = m_artist->playbackCount( SourceList::instance()->getLocal() ); - - if ( trackCounter ) - stats = tr( "You've listened to this track %n time(s).", "", trackCounter ); - else - stats = tr( "You've never listened to this track before." ); - - if ( history.count() ) - { - stats += "\n" + tr( "You first listened to it on %1." ).arg( QDateTime::fromTime_t( history.first().timestamp ).toString( "dd MMM yyyy" ) ); - } - - if ( artistCounter ) - { - stats += "\n" + tr( "You've listened to %1 %n time(s).", "", artistCounter ).arg( m_artist->name() ); - - m_playStatsGauge->setMaximum( artistCounter ); - m_playStatsGauge->setValue( trackCounter ); - } - else - stats += "\n" + tr( "You've never listened to %1 before." ).arg( m_artist->name() ); - - ui->statsLabel->setText( stats ); - m_playStatsTotalGauge->setMaximum( m_query->track()->chartCount() ); - m_playStatsTotalGauge->setValue( m_query->track()->chartPosition() ); -} - - -void -TrackInfoWidget::onSimilarArtistsLoaded() -{ -/* Artist* artist = qobject_cast( sender() ); - - m_relatedArtistsModel->addArtists( artist->similarArtists() );*/ + m_headerWidget->setBackground( m_pixmap, true, false ); } @@ -321,20 +172,6 @@ TrackInfoWidget::onLyricsLoaded() } -void -TrackInfoWidget::onArtistClicked() -{ - ViewManager::instance()->show( m_query->track()->artistPtr() ); -} - - -void -TrackInfoWidget::onAlbumClicked() -{ - ViewManager::instance()->show( m_query->track()->albumPtr() ); -} - - void TrackInfoWidget::changeEvent( QEvent* e ) { diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h index b14b98606..45e96e2b5 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.h @@ -1,6 +1,6 @@ /* === This file is part of Tomahawk Player - === * - * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2010-2014, Christian Muehlhaeuser * Copyright 2010-2011, Jeff Mitchell * Copyright 2010-2011, Leo Franchi * @@ -40,8 +40,8 @@ #include class PlayableModel; -class StatsGauge; class QScrollArea; +class BasicHeader; namespace Ui { @@ -75,29 +75,24 @@ public: public slots: void load( const Tomahawk::query_ptr& query ); +signals: + void pixmapChanged( const QPixmap& pixmap ); + protected: void changeEvent( QEvent* e ); private slots: void onCoverUpdated(); - void onStatsLoaded(); - void onSimilarArtistsLoaded(); void onSimilarTracksLoaded(); void onLyricsLoaded(); - void onArtistClicked(); - void onAlbumClicked(); - private: Ui::TrackInfoWidget *ui; - QScrollArea* m_scrollArea; + BasicHeader* m_headerWidget; Tomahawk::query_ptr m_query; Tomahawk::artist_ptr m_artist; - StatsGauge* m_playStatsGauge; - StatsGauge* m_playStatsTotalGauge; - PlayableModel* m_relatedTracksModel; QString m_title; QPixmap m_pixmap; diff --git a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui index 5c5c7855f..f29a6bf6f 100644 --- a/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui +++ b/src/libtomahawk/widgets/infowidgets/TrackInfoWidget.ui @@ -6,14 +6,14 @@ 0 0 - 1276 - 828 + 828 + 635 - Form + Form - + 0 @@ -21,268 +21,64 @@ 0 - - - 16 - - - 12 - - - - - - 0 - 0 - - - - - 260 - 260 - - - - Cover - - - Qt::AlignCenter - - - - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 26 - 75 - true - - - - TrackName - - - 4 - - - - - - - - 0 - 0 - - - - - 20 - - - - ArtistName - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 260 - - - - Statistics - - - Qt::AlignCenter - - - - - - - - 440 - 240 - - - - - 440 - 16777215 - - - - - - - - - - - 16777215 - 1 - - - - Qt::Horizontal + + + + 0 + 0 + - - - - 16777215 - 1 - + + + QFrame::StyledPanel - - Qt::Horizontal + + QFrame::Raised - - - - - + - 0 + 4 - 0 + 32 - 16 + 4 - 0 + 32 - 16 + 8 - - - - 0 - 0 - + + + Top Hits - - QFrame::StyledPanel + + 0 - - QFrame::Raised - - - - 4 - - - 28 - - - 4 - - - 8 - - - 4 - - - - - - 20 - 50 - false - - - - Similar Tracks - - - 0 - - - - - - - - 0 - 0 - - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - Qt::Vertical + + + + 0 + 0 + - + - 20 - 0 + 0 + 190 - + @@ -296,19 +92,15 @@
playlist/GridView.h
- PlayableCover + CaptionLabel QLabel -
widgets/PlayableCover.h
+
widgets/CaptionLabel.h
- QueryLabel - QLabel -
widgets/QueryLabel.h
-
- - ScrollingLabel - QLabel -
widgets/ScrollingLabel.h
+ ContextView + QWidget +
playlist/ContextView.h
+ 1