From a4a3c4fb178ad0faca1f536c1194c161136a4d9d Mon Sep 17 00:00:00 2001 From: Casey Link Date: Sun, 21 Aug 2011 12:56:41 -0500 Subject: [PATCH] Add What's Hot page with corresponding widget. --- data/images/whats-hot.png | Bin 0 -> 6395 bytes resources.qrc | 1 + src/libtomahawk/CMakeLists.txt | 3 + src/libtomahawk/viewmanager.cpp | 9 ++ src/libtomahawk/viewmanager.h | 5 + src/libtomahawk/widgets/whatshotwidget.cpp | 163 +++++++++++++++++++++ src/libtomahawk/widgets/whatshotwidget.h | 86 +++++++++++ src/libtomahawk/widgets/whatshotwidget.ui | 72 +++++++++ src/sourcetree/items/collectionitem.cpp | 8 + src/sourcetree/items/collectionitem.h | 1 + 10 files changed, 348 insertions(+) create mode 100644 data/images/whats-hot.png create mode 100644 src/libtomahawk/widgets/whatshotwidget.cpp create mode 100644 src/libtomahawk/widgets/whatshotwidget.h create mode 100644 src/libtomahawk/widgets/whatshotwidget.ui diff --git a/data/images/whats-hot.png b/data/images/whats-hot.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7ef64d068a643ca107af3224c195dbca51d866 GIT binary patch literal 6395 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

-$+Tr z;F1~8xWLjB$U`tn!@pMHTQ5^JS?7ACaM(vdp4kW;wr!-W;-TcTkN_O@hAbKVCIg9| z6S0_$5c@IjrMuX_qygLF!wNzINI+9@Tmd*{QN(*63nmWF7SRrq{eTzCl5atz(Mo{B zh(5c{UKtW1!5!rtv8V``SH#*sl7T@#--~1_QG6&7z`WVlD`LDEPj+hL;I9u;L+-7v zr2^fIz%w9%UN)+WE!d5?3d#{4ilJUSHfjb~^g^CK5n>KmNr|*0FEZ%g%7k&Cv5S$Vr1sicJ?4SfSBl}6nLotHt|0YBQ z%uF(w5W9K!(2LIBkJcJMKL5$?++p&>uo^i zh%RxnFk>pZy;ltjvCm@3+5Y{!g6#5o=@hx z4|CbPMu2#;ZJqwN9b&Zq9@q+iV{aoM4+t1VdPnvl&^a@p>W?aQ{vj8gvFpmhLjq;d zj$jOkpB}l;CDZI8m>Jl=;AVz zqhWFBwa2^?%pt+d@*yX;AUzDK=2|Vb+0fzDkY;|%yk=|#gr)BDUyF`s30Qj!XV4fS z>&~MvT%+k_qGV{NqI?hpc+tYyN=qAGVL;E=iwr#ska_}znfmGoO<*(fWjEIZ(fVfn zp6Lvfq{7l|D4qiEVK$qZ6oFJ(5t1N1tV}?CuEiFAgrESR88A&o@2({4SYaA9vqbFXLRn{G z$rZFG8IBN9A^;OEPnLwt-e7q+;ee=&1Y;nWm8gIJpsp7*WOLzp?QRCN1k55<-!-wF zIJ@XhVYEhO7`x^=4sr;ngK`lQiXrn++mI&e&b4U9P*u($S#&C()F;8>RC&su&r)>50OjJz3`XjR=-10nVyOMhT(L zp#O>WopWgND-LxHX0JFAeo0CQRc4D2AYyZdev~W*7@x>Bb*x2#g$O(`RP{wAU(s$+ z&R;>rN+=Rk--jsNJEe3h#To=tl}tfH*ueAm1cq{7q(y}QDt01wrckQWMtnn27g=xeI9v>0EWVhN&*2SDKQnLDXj7lIrvZw1~lYH=o$ z6Ep$_)@T=1PWomXL=lm4m1B0!}^Yr&&6m=OIUrGW|&>-vG z3P&7fCO)*C1l-TnofvFuxO@EVR8DJ)P1qQkQq7FE$%M*27q0TyRIlw3?@cqd8Rt$v z>{uSJxCBlIq4dQA=8*xTb%jWX8W9NrzJ zoqHgv9DEY+$XB3-UbUfX1^86rX*J*)Kr+Qe*?-^ODIakQ32?c7rEnuoH6+Fv=1|Iq~@XSh}mm(Vl_YPwf zMRinrxO`tC$Plq-QaH95PGooAy1F!7WPXkruyb(vu0$|4#zrO3)FU#y7lE-g^-}jL zI9NacjpeaRXt~HiDl>?PZnw8ptl7Kdc(X1_bI7+udwv1CA`uzKLBUhMgB>xRJs5L%;!c**avK7P8O`@k!`+7f3`=@Kgdsx_mmrT#v?Knbp^{ zDbvv-#Iv(wLwVKQjeO+J-&D{5HKPMr?6l~q#WfJo=S{Cy^SE4q~=sYyb5()Udk)?dL3s;AYzHa@{uj#I X5~su0s#!jO{data/images/automatic-playlist.png data/images/station.png data/images/new-additions.png + data/images/whats-hot.png data/images/loved_playlist.png data/images/dashboard.png data/stylesheets/topbar-radiobuttons.css diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index a2b7823e1..869e03226 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -181,6 +181,7 @@ set( libSources widgets/playlisttypeselectordlg.cpp widgets/welcomewidget.cpp widgets/welcomeplaylistmodel.cpp + widgets/whatshotwidget.cpp widgets/overlaywidget.cpp widgets/HeaderLabel.cpp widgets/SocialPlaylistWidget.cpp @@ -360,6 +361,7 @@ set( libHeaders widgets/SeekSlider.h widgets/playlisttypeselectordlg.h widgets/welcomewidget.h + widgets/whatshotwidget.h widgets/welcomeplaylistmodel.h widgets/overlaywidget.h widgets/HeaderLabel.h @@ -387,6 +389,7 @@ set( libUI ${libUI} widgets/newplaylistwidget.ui widgets/searchwidget.ui widgets/welcomewidget.ui + widgets/whatshotwidget.ui widgets/SocialPlaylistWidget.ui widgets/infowidgets/sourceinfowidget.ui widgets/infowidgets/ArtistInfoWidget.ui diff --git a/src/libtomahawk/viewmanager.cpp b/src/libtomahawk/viewmanager.cpp index 90c324245..de59744a0 100644 --- a/src/libtomahawk/viewmanager.cpp +++ b/src/libtomahawk/viewmanager.cpp @@ -44,6 +44,7 @@ #include "dynamic/widgets/DynamicWidget.h" #include "widgets/welcomewidget.h" +#include "widgets/whatshotwidget.h" #include "widgets/infowidgets/sourceinfowidget.h" #include "widgets/infowidgets/ArtistInfoWidget.h" #include "widgets/infowidgets/AlbumInfoWidget.h" @@ -69,6 +70,7 @@ ViewManager::ViewManager( QObject* parent ) : QObject( parent ) , m_widget( new QWidget() ) , m_welcomeWidget( new WelcomeWidget() ) + , m_whatsHotWidget( new WhatsHotWidget() ) , m_currentMode( PlaylistInterface::Tree ) { s_instance = this; @@ -426,6 +428,13 @@ ViewManager::showWelcomePage() return show( m_welcomeWidget ); } +Tomahawk::ViewPage* +ViewManager::showWhatsHotPage() +{ + return show( m_whatsHotWidget ); +} + + void ViewManager::setTableMode() diff --git a/src/libtomahawk/viewmanager.h b/src/libtomahawk/viewmanager.h index 34ed0431f..d1ab325b4 100644 --- a/src/libtomahawk/viewmanager.h +++ b/src/libtomahawk/viewmanager.h @@ -27,6 +27,7 @@ #include "playlistinterface.h" #include "viewpage.h" #include "widgets/welcomewidget.h" +#include "widgets/whatshotwidget.h" #include "dllmacro.h" @@ -51,6 +52,7 @@ class SourceInfoWidget; class InfoBar; class TopBar; class WelcomeWidget; +class WhatsHotWidget; class QPushButton; namespace Tomahawk @@ -83,6 +85,7 @@ public: Tomahawk::ViewPage* show( Tomahawk::ViewPage* page ); Tomahawk::ViewPage* welcomeWidget() const { return m_welcomeWidget; } + Tomahawk::ViewPage* whatsHotWidget() const { return m_whatsHotWidget; } ArtistView* superCollectionView() const { return m_superCollectionView; } /// Get the view page for the given item. Not pretty... @@ -120,6 +123,7 @@ signals: public slots: Tomahawk::ViewPage* showSuperCollection(); Tomahawk::ViewPage* showWelcomePage(); + Tomahawk::ViewPage* showWhatsHotPage(); void showCurrentTrack(); // Returns the shown viewpage @@ -184,6 +188,7 @@ private: TreeModel* m_superCollectionModel; ArtistView* m_superCollectionView; WelcomeWidget* m_welcomeWidget; + WhatsHotWidget* m_whatsHotWidget; QList< Tomahawk::collection_ptr > m_superCollections; diff --git a/src/libtomahawk/widgets/whatshotwidget.cpp b/src/libtomahawk/widgets/whatshotwidget.cpp new file mode 100644 index 000000000..91c06151a --- /dev/null +++ b/src/libtomahawk/widgets/whatshotwidget.cpp @@ -0,0 +1,163 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#include "whatshotwidget.h" +#include "ui_whatshotwidget.h" + +#include + +#include "viewmanager.h" +#include "sourcelist.h" +#include "tomahawksettings.h" +#include "welcomeplaylistmodel.h" + +#include "audio/audioengine.h" +#include "playlist/playlistmodel.h" +#include "widgets/overlaywidget.h" +#include "utils/tomahawkutils.h" +#include "utils/logger.h" +#include + +#define HISTORY_TRACK_ITEMS 25 +#define HISTORY_PLAYLIST_ITEMS 10 +#define HISTORY_RESOLVING_TIMEOUT 2500 + +using namespace Tomahawk; + +static QString s_whatsHotIdentifier = QString( "WhatsHotWidget" ); + +WhatsHotWidget::WhatsHotWidget( QWidget* parent ) + : QWidget( parent ) + , ui( new Ui::WhatsHotWidget ) +{ + tDebug() << "WhatsHot: Hello world!"; + ui->setupUi( this ); + ui->tracksView->setFrameShape( QFrame::NoFrame ); + ui->tracksView->setAttribute( Qt::WA_MacShowFocusRect, 0 ); + + TomahawkUtils::unmarginLayout( layout() ); + TomahawkUtils::unmarginLayout( ui->verticalLayout_2->layout() ); + + + m_tracksModel = new PlaylistModel( ui->tracksView ); + m_tracksModel->setStyle( TrackModel::ShortWithAvatars ); + ui->tracksView->overlay()->setEnabled( false ); + ui->tracksView->setPlaylistModel( m_tracksModel ); + ui->tracksView->setHeaderHidden( true ); + ui->tracksView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + + + m_artistsModel = new TreeModel( ui->artistsView); + m_artistsModel->setColumnStyle( TreeModel::TrackOnly ); + ui->artistsView->setTreeModel( m_artistsModel ); + ui->artistsView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); + ui->artistsView->header()->setVisible( false ); + + + m_timer = new QTimer( this ); + connect( m_timer, SIGNAL( timeout() ), SLOT( checkQueries() ) ); + + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), + SIGNAL( info( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ), + SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); + + connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); + + + Tomahawk::InfoSystem::InfoCriteriaHash artistInfo; + + Tomahawk::InfoSystem::InfoRequestData requestData; + requestData.caller = s_whatsHotIdentifier; + requestData.customData = QVariantMap(); + requestData.input = QVariant::fromValue< Tomahawk::InfoSystem::InfoCriteriaHash >( artistInfo ); + + requestData.type = Tomahawk::InfoSystem::InfoChartArtists; + Tomahawk::InfoSystem::InfoSystem::instance()->getInfo( requestData ); + tDebug() << "WhatsHot: requested InfoChartArtists"; +} + + +WhatsHotWidget::~WhatsHotWidget() +{ + delete ui; +} + + +void +WhatsHotWidget::checkQueries() +{ + m_timer->stop(); +// m_tracksModel->ensureResolved(); +} + + +void +WhatsHotWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ) +{ + if ( requestData.caller != s_whatsHotIdentifier ) + { +// tDebug() << "Info of wrong type or not with our identifier"; + return; + } + + tDebug() << "WhatsHot: got something..."; + QVariantMap returnedData = output.value< QVariantMap >(); + switch ( requestData.type ) + { + case InfoSystem::InfoChartArtists: + { + const QStringList artists = returnedData["artists"].toStringList(); + tDebug() << "WhatsHot: got artists! " << artists.size(); + tDebug() << artists; + foreach ( const QString& artist, artists ) + { + m_artistsModel->addArtists( Artist::get( artist ) ); + } + break; + } + + default: + return; + } +} + + +void +WhatsHotWidget::infoSystemFinished( QString target ) +{ + Q_UNUSED( target ); +} + + +void +WhatsHotWidget::changeEvent( QEvent* e ) +{ + QWidget::changeEvent( e ); + switch ( e->type() ) + { + case QEvent::LanguageChange: + ui->retranslateUi( this ); + break; + + default: + break; + } +} + + diff --git a/src/libtomahawk/widgets/whatshotwidget.h b/src/libtomahawk/widgets/whatshotwidget.h new file mode 100644 index 000000000..b9e719dda --- /dev/null +++ b/src/libtomahawk/widgets/whatshotwidget.h @@ -0,0 +1,86 @@ +/* === This file is part of Tomahawk Player - === + * + * Copyright 2010-2011, Christian Muehlhaeuser + * + * Tomahawk is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Tomahawk is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Tomahawk. If not, see . + */ + +#ifndef WHATSHOTWIDGET_H +#define WHATSHOTWIDGET_H + +#include +#include +#include + +#include "playlistinterface.h" +#include "infosystem/infosystem.h" +#include "playlist.h" +#include "result.h" +#include "viewpage.h" + +#include "utils/tomahawkutils.h" + +#include "dllmacro.h" + +class TreeModel; +class PlaylistModel; +class OverlayWidget; + +namespace Ui +{ + class WhatsHotWidget; +} + +class DLLEXPORT WhatsHotWidget : public QWidget, public Tomahawk::ViewPage +{ +Q_OBJECT + +public: + WhatsHotWidget( QWidget* parent = 0 ); + ~WhatsHotWidget(); + + virtual QWidget* widget() { return this; } + virtual Tomahawk::PlaylistInterface* playlistInterface() const { return 0; } + + virtual QString title() const { return tr( "What's Hot" ); } + virtual QString description() const { return QString(); } + + virtual bool showStatsBar() const { return false; } + virtual bool showInfoBar() const { return false; } + + virtual bool jumpToCurrentTrack() { return false; } + +protected: + void changeEvent( QEvent* e ); + +signals: + void destroyed( QWidget* widget ); + +public slots: + +private slots: + void checkQueries(); + void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); + void infoSystemFinished( QString target ); + +private: + Ui::WhatsHotWidget *ui; + + PlaylistModel* m_tracksModel; + TreeModel* m_artistsModel; + + QTimer* m_timer; +}; + +#endif // WHATSHOTWIDGET_H diff --git a/src/libtomahawk/widgets/whatshotwidget.ui b/src/libtomahawk/widgets/whatshotwidget.ui new file mode 100644 index 000000000..5259550ca --- /dev/null +++ b/src/libtomahawk/widgets/whatshotwidget.ui @@ -0,0 +1,72 @@ + + + WhatsHotWidget + + + + 0 + 0 + 875 + 513 + + + + + + + + + Top Tracks + + + + + + + + 320 + 0 + + + + + + + + + + + + Top Artists + + + + + + + + 320 + 0 + + + + + + + + + + + HeaderLabel + QLabel +

widgets/HeaderLabel.h
+ + + PlaylistView + QTreeView +
playlist/playlistview.h
+
+ + + + diff --git a/src/sourcetree/items/collectionitem.cpp b/src/sourcetree/items/collectionitem.cpp index 3d2c2a6b5..9bca2be3d 100644 --- a/src/sourcetree/items/collectionitem.cpp +++ b/src/sourcetree/items/collectionitem.cpp @@ -44,6 +44,7 @@ CollectionItem::CollectionItem( SourcesModel* mdl, SourceTreeItem* parent, cons , m_sourceInfoPage( 0 ) , m_coolPlaylistsPage( 0 ) , m_lovedTracksPage( 0 ) + , m_whatsHotPage( 0 ) { m_lovedTracksItem = new GenericPageItem( model(), this, ( m_source.isNull() ? tr( "Top Loved Tracks" ) : tr( "Loved Tracks" ) ), QIcon( RESPATH "images/loved_playlist.png" ), boost::bind( &CollectionItem::lovedTracksClicked, this ), @@ -62,6 +63,13 @@ CollectionItem::CollectionItem( SourcesModel* mdl, SourceTreeItem* parent, cons ); recent->setSortValue( -300 ); + GenericPageItem* hot = new GenericPageItem( model(), this, tr( "What's Hot" ), QIcon( RESPATH "images/whats-hot.png" ), + boost::bind( &ViewManager::showWhatsHotPage, ViewManager::instance() ), + boost::bind( &ViewManager::whatsHotWidget, ViewManager::instance() ) + ); + hot->setSortValue( -300 ); + + // TODO finish implementing and making pretty // m_coolPlaylistsItem = new GenericPageItem( model(), this, tr( "Cool Stuff" ), QIcon( RESPATH "images/new-additions.png" ), // boost::bind( &CollectionItem::coolPlaylistsClicked, this ), diff --git a/src/sourcetree/items/collectionitem.h b/src/sourcetree/items/collectionitem.h index 76c639355..838099d93 100644 --- a/src/sourcetree/items/collectionitem.h +++ b/src/sourcetree/items/collectionitem.h @@ -86,6 +86,7 @@ private: Tomahawk::ViewPage* m_sourceInfoPage; Tomahawk::ViewPage* m_coolPlaylistsPage; Tomahawk::ViewPage* m_lovedTracksPage; + Tomahawk::ViewPage* m_whatsHotPage; };