From e1c6e83b98f6bc218b03e686f1886a4afdc6bb1a Mon Sep 17 00:00:00 2001 From: Jason Herskowitz Date: Fri, 21 Oct 2011 14:34:11 -0400 Subject: [PATCH 1/9] More abstract (wall of photos) and colorful Supercollection icon. Better or worse? --- data/images/supercollection.png | Bin 3161 -> 69076 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/images/supercollection.png b/data/images/supercollection.png index 6c6f192d958940f7ba81464462eb88428c972d55..cefead5359a081217cc8059cceb4f24dd08e4e47 100644 GIT binary patch literal 69076 zcmeHQ2V4|K7oXiL^j<_PoE1eu0V!e^R8SNPb`wQFL;(@O9yP|8SQ3p8}aLRIbz|QZt%t$kS zZ-@{w3GnwDi1T@H=u7e6Q=LODB4j)!($}|tfUmDCHg3|m$f$6HrW1s}@uAna%|9?Q zW)f+RP;^Xu+`wMlWy6M#km+4UBr-r!J@7zBmbYe(cn9O%lbZkh>41`L@484#ga4W+kd%Cvw^mKM} z!Spk!+(t&K`~vv4RO0mj%4dY_rLwxRzGZcjwjku4g}GT?RyTGnLWe#@$nKxAx~AVD zWVQgI#4D`v*h0LFkB^V_Y13xfv}rDp;h`=-D3dA_U?jN z7%mULXEzoGD3-=GE?8|XM%JTUkogsBB>L|X5?dJ|(Ws5Mg<$*^XfOo9CvT|3)6%%d zW!z5vRro_L!>8nw$Osu!`wk42g(k#Jg);t3z#j=RL}thu)kO_a6Vw7ZBRAxQI-sto z2kMQ2P%s*fK188tJc>qfXd0T0K1K`C60{txLhH~bv=!|@d(bcF5c&=Mj?SWs=qkE} z?xG}=f?l8ul#L1qg3u#O2rHs4;XpJaS`lu9H_@5sK?D*5iQ&W;B7%q^5{TKvC&UtB z1+k9UOza?jCVnM;C;lL=5q}fOL@JR<_Y~VACM8`WO63C zfc%nNLvA5=lZoW-!MZTgS(FoBvQJiRwXt8LuXp3l% z=!oc?=!PgslqSj(OT|`Vnb=v}LF_LcEDjY<7S9nc6|WO-7bl8Oi*JaN#TnvaiHW4X zq?N=+5+E5SiI7Z_ER?L4Y?B<6oRQp;q)4)*QmL)fQR*f2mkyUskj|1Wm3}MTD?K5- zCVec;($mwctJg}elU|Tsh+e$jLcO(myY-IiUDr#|%hfm1chGm!@2NjRKSqDP{%ZZ5 z`p5LI>p#^mFfcc0X5eEGWDsUB!(f@gR)Zr3R}4}N3Jfg_9Su7f1{+Q={Mc}f;U2>? zhW89#8yOijHfnD)z$nsap3xekeMaYvl8y3=EsdRweT_#MCm4Te{G;&+9Wg zl;vY9kyR5bU#n27Ppr0Dov})>mRdVn2Ut(AUSj=|^=0b}8%vvZHbZQt+pM=aYLjFu zvTbe~U>jw-%=Q=C+qU_28r11lC%n$0I(zC|uajd}&#tRoxZPsAy>_?k^6Sd#_NY6t z?pJjW)xB>ows*20U_Z@%qx~8Cw0hR{I@AlTx47Of_5P_()_1Buu>P$2-`BrXKdV8* z2E7`@Hdx!>RD-mJwhg;BoX~J(!($Co9jqKWJ48CHbU5ztTxKKdCX14-k)4)hG^*do zzfnS?&5bTMDroH3cyQzSjrTUb-^8$qcaw2VRyH}=B%`TA)4ok-H{I3rpJoQlyqk@0 z_D!>M&2pMMHXqvjv*w4IKXbHm3~-$3xXbZg3zHUIT1;-SrNzyb(w5#WC${{yZST5Ty7qRR?|Q^F)6K~()NQ@nO?MObp6+wq54*o=*Q#B3 zyN&Js^04yg>+zY#Nsl5=FV8s7J)WsvO})l=ZScC|ZSCFPd#U&N_LBD9+s|$PTl+j8 zPoH?7UwmG6aPBa%!_E%RIy!a?@3^(&<4%n`g>>57DXFup^O(-xbx!Kis7pwfEnOaU zZPGQY>$a{>yS3~#q1*0m>D}9QkL!N0dycPLIZXLWc2px{Za4JeT@4I>a(uTqd=#?xWFTQ z$-ce&e%<$8zh?bn`W*^FK>>aHe}S09Yb=4`VCz%G-+6yVIK{2wc+aEZ7F#Ur+KD7TZ>cgX>%|?fe-ake%X6TrmV+uopLbiltjSU#P zVQfaIZ|FCnFT%Qptqe;I?-afw{OPz(<5rA&7SSo<>xk6xUB<5-pBCvGxi0e61pf(} zCge;En)u_ylBl6kd!zNE$3*`cV;M6s=Jce7lcrC)7TYRzVQkW5pUJBxXTQX|BgijNar*@vYeroQtA=CCxx0oI?{n8Al8H;8-o!N8d53|IxLT8)ZegZL(aEh-(KI?b>p5*4K^*=l>c4icYkf} zwK;K1^DV2tmwrF>`zKq6Y(4jb_YXU^*>792t?0*?ACtBZ++f8)i`92dxe+P9zd% zBxW2Me<+Og|huK#|+@5b4i0XHw+>UZnf?ZLPIx-;rd(qCbJ zJ^MTA?^pj!{iopWynB*+i|?D?U;Uu|gDnqRKHQt+nRGPSFZt4=L67b}4t@OM-zonV zrYv}3@?`Z>ho?K9xjp+WwP)(p=Odq|yoh~KkhbtYi~lyHw@5$mvg^xB8N)JCUd6pC z$z1xn?&}}lw0mTMhQ;uXivb(?E;2NE?$+d0MG%koKKx{>*uY72{4vz3QIW_ z1gzzdBX6phS9l0yA2?Eq>eQ+8CsqIi!%@sC({+63jE%s+z?&GuD>f#sGM3A6b91}O z!pG=g)m0f*u#GWfbKzsxW4R0%8w;04v0|TI!WfF!n4pYU6~$Pf#NFK;|DK^S$FrRS zgixda4oDaqB!vK#pHo;zjvRT5g;f)T(s&uHqehLor4H6vvt~Wi5>~)WaRa_p#>%_~ z(zkqh4xO0G2QF(my}&?iz$nh&vMtB>1n1Vc5q^i$X3EDHDGcRceS@)PW01C51WNgo z#z^P77yv4PvWb%i06eQewKjvb+GACI2&8$|=BHmR+jInDz>GXophr>lIc1WCr6P-E z5X(vx^?C1h<~^=dgG!5BuYn3i!{Qg9+-&?abrmFiLnE|d>1U z0CdL}T0tTNfL3VN9iu`3=#DR{7D?f_rfKwC01it+FmMo4TdIWss4br67^e^b9K_U? zY9Rn>i>EopDFgrqF}0;y2!Pt+X^wFU0l+~_ZK)Olptg9LW1K<&a1c{ls)YckEuQ8W zrw{-f#MG8*ApmNNr#Z$c1ONvywWV4JfZF0|j&TYBz(GuHsTKmDrh58G`)@rem$DIyRYc%vxB244k{nmW}AfUD747@qtxv^ zSgCxM+vTYM!sYGS#7fy_Vc~*Y?pU}wRk~i08O1ZXawY)e5s``OALBzs>{J?#Itl^RC1|=H%iRZge5jPe^;MZ@tPj8ljY-*{yxvJZCaq${*ub}$Y+9LH0E_`& zuBcBH&R~6*5k9n$vU75Br26{$Vm44^AgoL43*1JnFjkh)z5@}MmBHQY;CXqX`A(4j-}*|TQ>a2WkA9>-i-kv0N#zS8Ye9TK#gTaugV)VVxa;@N5@OJD-a9^wfP|HoUZ39SJ00)g}i|=6e{CV zb&ln-JUl$ku&{wH1%0eGKJY5&$F@%c236RU>ZlDbM~oP8T?r3=SZ9CkbQ+=3{}E8; zJNB3vTduCIuuE%!62`Z86J?RBFmR5fK5u3xIv5uLf`` z*aHjzwiGHiR=k_&KibBMeS20JD|0)5D-~{hh=0InBnPU^OIIq!0^ea9;~Zy-Nq$vL z!MP=FshXJ}iYCiD%fT4au|U0Yu)=Pl@LLOf#jdRcM1sGQFcuk&RUrTXnVeioSW8GL z+cZErXJe6L6tJ>Mskp3?SFTq==F`sf8K#C+qxipQ|3pf zTnnDCfYPsCM@NH(@}@T+cnq?xQxD&IdB%$8F{Y)aphLUAs}O620RS4n`RRG^-(Yn= zhu+4Y5)U50Mq~{R%Qr7 z091y(8qik=fEwV$$_zmWfXc8}1NsU9Py?J;nIQ-PP#N}WKwlvMYJd|fGXx<3D#Kn4 z=qm(3b#>y-;wKNw<^u3DiW76Y%o8GlA1_~EhIY7qjU+PaP(;A+hhCGjc} z5zkv_((pkypNSNU5h)QPysICdY7v3|k3Hz-Gm#|To)zQ7OJDg^OD&)P-RdN@Msz(r z4P_SOsiW_mWlSaNZFi}z;)gr;pl2seSIOM#oafKgg`t+*y*t-X$|JnoO~rC3wG?m( z;eg7?dc)PKP|vkgNI^)$Cn}e;ura_=Ay`BxY$M8MMZGe;s)f$Eu9M&dolbaBBYoY} zCRWNe3kw%#ceolfSg(>NCII9S0ZSoZS4JRLWrr#T3^rjK(aT^5V^WEMt{02NPeC3; zL0-d&!Yap55!ROSF=-Vm<_CPM);6NB&O~3sgwp2n@#S3#mw68VQ*x{oqY$*FbY~6c zKqh6oBCODkg8+8rl)fv*q zP3(aRpAy&_)D&;iS%|mkv}1#mV^hu;tX^JT4=-G}01vlj_^9eD17LmS>FHT;{`~pI z@}Ol1RR$?Pr?3_l7Cs9K3KAzKCPDyPJ}^kjiwk70zgwt>!=+e0Cdzbnt~++ zfToz%Q9E3}3ux`>`W>FCX-WmGG!y0IT)Zk@0jT#+3aAJiYSl9<1SiZZv`$gOb2BqnvI6OT38bm9`1W5s#@;MfJ)vsT_D_X!w z@dCC1gEB4^=hT*>FgA=8wu{mK8V7B?Yo$$BrlD0JX6-Cq)bf zN+pa7k^*4)IfWI3w1|~*WGT{e16CO;VAf<1Fn$Ez0$z$$Ij_tYLHH7ZaiRM-Zvq7^ zrzaREeBWN)HlqJxtmYu2Wvp*7)(ngR{v*~~P~^PAHlpzLul-vB8m^!*(z$W~2wQW$ zn?u0k%)b_;NoA{$2Y}AK!hhnvZz=>B8e35rdgzN#_@aG z7l{Z2y7^3aXD=icOHeV-yNSYVVbINI661-SVvLh4;g?sKEeyKVNotMgr**f{$%DzL zq?q4n%>>>K@I^|NIylvqIkJB{x^(V%xx0|5t&AlI3qR7+@Pj*#X;0E!boyBeo`laY zuOwbV@jN$MEu>s4hScg@MMA(vg{yGV($b1-Y;4rqG`EU?(rPm^GmA}3Oh_GHF+{XV*?zmu-=NkylNt9 z**0EafUt38x%YATrys5YaI>Q~xn%1B6;+YgHnK5R$~K!+Wuq*tu$?P4Hk`BdD0kuO zoNc2JW2Bz>aL&{-R{(4g?z_+c#Eb9_q7QHpt_b`-qJn|96WB;=*REYMUVv!@%`}#` zMN4bwcAOjH9Wrm>+L!py6xNqu6Kn$-8Vi(FCAuBP24loB^i@`sIG=UEM<)0ZV|dH? zV2FJMpbaxu0(k`!Ewn%t<0Ac=eMW( HnEC$)i8sCF literal 3161 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 Date: Fri, 21 Oct 2011 12:06:21 -0400 Subject: [PATCH 2/9] Show speaker icon for any playing playlist --- .../playlist/customplaylistview.cpp | 16 +++++++++- src/libtomahawk/playlist/customplaylistview.h | 3 ++ src/libtomahawk/viewpage.h | 1 + .../widgets/infowidgets/AlbumInfoWidget.cpp | 13 ++++++++ .../widgets/infowidgets/AlbumInfoWidget.h | 1 + .../widgets/infowidgets/ArtistInfoWidget.cpp | 31 +++++++++++++++++++ .../widgets/infowidgets/ArtistInfoWidget.h | 3 +- src/libtomahawk/widgets/welcomewidget.cpp | 7 +++++ src/libtomahawk/widgets/welcomewidget.h | 1 + src/libtomahawk/widgets/whatshotwidget.cpp | 29 ++++++++++++++++- src/libtomahawk/widgets/whatshotwidget.h | 4 +-- src/sourcetree/items/genericpageitems.cpp | 7 ++--- src/sourcetree/items/temporarypageitem.h | 2 ++ src/sourcetree/sourcedelegate.cpp | 1 + 14 files changed, 110 insertions(+), 9 deletions(-) diff --git a/src/libtomahawk/playlist/customplaylistview.cpp b/src/libtomahawk/playlist/customplaylistview.cpp index 625bce3d4..218b6ffb4 100644 --- a/src/libtomahawk/playlist/customplaylistview.cpp +++ b/src/libtomahawk/playlist/customplaylistview.cpp @@ -22,7 +22,8 @@ #include "database/databasecommand_genericselect.h" #include "database/database.h" #include "utils/tomahawkutils.h" -#include +#include "sourcelist.h" +#include "audio/audioengine.h" using namespace Tomahawk; @@ -54,6 +55,19 @@ CustomPlaylistView::CustomPlaylistView( CustomPlaylistView::PlaylistType type, c CustomPlaylistView::~CustomPlaylistView() {} +bool +CustomPlaylistView::isBeingPlayed() const +{ + return AudioEngine::instance()->currentTrackPlaylist() == playlistInterface(); +} + +bool +CustomPlaylistView::jumpToCurrentTrack() +{ + return PlaylistView::jumpToCurrentTrack(); +} + + void CustomPlaylistView::generateTracks() { diff --git a/src/libtomahawk/playlist/customplaylistview.h b/src/libtomahawk/playlist/customplaylistview.h index 0ed8dba21..b7e0b659d 100644 --- a/src/libtomahawk/playlist/customplaylistview.h +++ b/src/libtomahawk/playlist/customplaylistview.h @@ -46,7 +46,10 @@ public: virtual QPixmap pixmap() const; virtual QString description() const; virtual QString longDescription() const; + virtual bool isTemporaryPage() const { return false; } + virtual bool isBeingPlayed() const; + virtual bool jumpToCurrentTrack(); private slots: void tracksGenerated( QList tracks ); diff --git a/src/libtomahawk/viewpage.h b/src/libtomahawk/viewpage.h index 4cf5f0a61..6e32bcef9 100644 --- a/src/libtomahawk/viewpage.h +++ b/src/libtomahawk/viewpage.h @@ -53,6 +53,7 @@ public: virtual bool jumpToCurrentTrack() = 0; virtual bool isTemporaryPage() const { return false; } + virtual bool isBeingPlayed() const { return false; } virtual bool canAutoUpdate() const { return false; } virtual void setAutoUpdate( bool ) {} diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp index f4250afd6..975e2f605 100644 --- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.cpp @@ -19,6 +19,7 @@ #include "AlbumInfoWidget.h" #include "ui_AlbumInfoWidget.h" +#include "audio/audioengine.h" #include "viewmanager.h" #include "database/database.h" #include "playlist/treemodel.h" @@ -117,6 +118,18 @@ AlbumInfoWidget::onLoadingFinished() m_button->show(); } +bool +AlbumInfoWidget::isBeingPlayed() const +{ + if ( ui->albumsView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + if ( ui->tracksView->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + return false; +} + void AlbumInfoWidget::load( const album_ptr& album ) diff --git a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h index ca1bc8130..bb5c521d0 100644 --- a/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/AlbumInfoWidget.h @@ -75,6 +75,7 @@ public: virtual bool showStatsBar() const { return false; } virtual bool jumpToCurrentTrack() { return false; } + virtual bool isBeingPlayed() const; signals: void longDescriptionChanged( const QString& description ); diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp index 553d93680..f60f94acb 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp @@ -19,6 +19,7 @@ #include "ArtistInfoWidget.h" #include "ui_ArtistInfoWidget.h" +#include "audio/audioengine.h" #include "viewmanager.h" #include "playlist/treemodel.h" #include "playlist/playlistmodel.h" @@ -125,6 +126,36 @@ ArtistInfoWidget::onLoadingFinished() m_button->show(); } +bool +ArtistInfoWidget::isBeingPlayed() const +{ + if ( ui->albums->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + if ( ui->relatedArtists->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + if ( ui->topHits->playlistInterface() == AudioEngine::instance()->currentTrackPlaylist() ) + return true; + + return false; +} + +bool +ArtistInfoWidget::jumpToCurrentTrack() +{ + if ( ui->albums->jumpToCurrentTrack() ) + return true; + + if ( ui->relatedArtists->jumpToCurrentTrack() ) + return true; + + if ( ui->topHits->jumpToCurrentTrack() ) + return true; + + return false; +} + void ArtistInfoWidget::load( const artist_ptr& artist ) diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h index 1f0a8a1d8..65ef84f29 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.h @@ -76,7 +76,8 @@ public: virtual bool isTemporaryPage() const { return true; } virtual bool showStatsBar() const { return false; } - virtual bool jumpToCurrentTrack() { return false; } + virtual bool jumpToCurrentTrack(); + virtual bool isBeingPlayed() const; signals: void longDescriptionChanged( const QString& description ); diff --git a/src/libtomahawk/widgets/welcomewidget.cpp b/src/libtomahawk/widgets/welcomewidget.cpp index 0e7992967..804d14d16 100644 --- a/src/libtomahawk/widgets/welcomewidget.cpp +++ b/src/libtomahawk/widgets/welcomewidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2011, Leo Franchi * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -98,6 +99,12 @@ WelcomeWidget::~WelcomeWidget() delete ui; } +bool +WelcomeWidget::isBeingPlayed() const +{ + return AudioEngine::instance()->currentTrackPlaylist() == ui->tracksView->playlistInterface(); +} + void WelcomeWidget::updateRecentTracks() diff --git a/src/libtomahawk/widgets/welcomewidget.h b/src/libtomahawk/widgets/welcomewidget.h index ccd8985e0..0dc92f040 100644 --- a/src/libtomahawk/widgets/welcomewidget.h +++ b/src/libtomahawk/widgets/welcomewidget.h @@ -93,6 +93,7 @@ public: virtual bool showInfoBar() const { return false; } virtual bool jumpToCurrentTrack() { return false; } + virtual bool isBeingPlayed() const; protected: void changeEvent( QEvent* e ); diff --git a/src/libtomahawk/widgets/whatshotwidget.cpp b/src/libtomahawk/widgets/whatshotwidget.cpp index 3f2fb795c..89a113fa1 100644 --- a/src/libtomahawk/widgets/whatshotwidget.cpp +++ b/src/libtomahawk/widgets/whatshotwidget.cpp @@ -1,6 +1,7 @@ /* === This file is part of Tomahawk Player - === * * Copyright 2010-2011, Christian Muehlhaeuser + * Copyright 2011, Leo Franchi * * Tomahawk is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +30,7 @@ #include "RecentPlaylistsModel.h" #include "audio/audioengine.h" +#include "dynamic/GeneratorInterface.h" #include "playlist/playlistmodel.h" #include "playlist/treeproxymodel.h" #include "widgets/overlaywidget.h" @@ -36,7 +38,6 @@ #include "widgets/kbreadcrumbselectionmodel.h" #include "utils/tomahawkutils.h" #include "utils/logger.h" -#include #include #define HISTORY_TRACK_ITEMS 25 @@ -99,6 +100,7 @@ WhatsHotWidget::WhatsHotWidget( QWidget* parent ) connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); + connect( AudioEngine::instance(), SIGNAL( playlistChanged( Tomahawk::PlaylistInterface* ) ), this, SLOT( playlistChanged( Tomahawk::PlaylistInterface* ) ) ); QTimer::singleShot( 0, this, SLOT( fetchData() ) ); } @@ -109,6 +111,31 @@ WhatsHotWidget::~WhatsHotWidget() } +bool +WhatsHotWidget::isBeingPlayed() const +{ + if ( AudioEngine::instance()->currentTrackPlaylist() == ui->artistsViewLeft->playlistInterface() ) + return true; + + if ( AudioEngine::instance()->currentTrackPlaylist() == ui->tracksViewLeft->playlistInterface() ) + return true; + + return false; +} + +bool +WhatsHotWidget::jumpToCurrentTrack() +{ + if ( ui->artistsViewLeft->jumpToCurrentTrack() ) + return true; + + if ( ui->tracksViewLeft->jumpToCurrentTrack() ) + return true; + + return false; +} + + void WhatsHotWidget::fetchData() { diff --git a/src/libtomahawk/widgets/whatshotwidget.h b/src/libtomahawk/widgets/whatshotwidget.h index 14286521e..e13c0421e 100644 --- a/src/libtomahawk/widgets/whatshotwidget.h +++ b/src/libtomahawk/widgets/whatshotwidget.h @@ -65,7 +65,8 @@ public: virtual bool showStatsBar() const { return false; } virtual bool showInfoBar() const { return false; } - virtual bool jumpToCurrentTrack() { return false; } + virtual bool jumpToCurrentTrack(); + virtual bool isBeingPlayed() const; protected: void changeEvent( QEvent* e ); @@ -80,7 +81,6 @@ private slots: void infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestData, QVariant output ); void infoSystemFinished( QString target ); void leftCrumbIndexChanged( QModelIndex ); - private: void setLeftViewArtists( TreeModel* artistModel ); void setLeftViewAlbums( AlbumModel* albumModel ); diff --git a/src/sourcetree/items/genericpageitems.cpp b/src/sourcetree/items/genericpageitems.cpp index d901fe4dc..eace899dc 100644 --- a/src/sourcetree/items/genericpageitems.cpp +++ b/src/sourcetree/items/genericpageitems.cpp @@ -85,9 +85,8 @@ GenericPageItem::setText( const QString &text ) bool GenericPageItem::isBeingPlayed() const { - if ( dynamic_cast< PlaylistInterface* >( m_get() ) ) - { - return AudioEngine::instance()->currentTrackPlaylist() == dynamic_cast< PlaylistInterface* >( m_get() ); - } + if ( m_get() ) + return m_get()->isBeingPlayed(); + return false; } diff --git a/src/sourcetree/items/temporarypageitem.h b/src/sourcetree/items/temporarypageitem.h index 28e5f4821..fe32d8a12 100644 --- a/src/sourcetree/items/temporarypageitem.h +++ b/src/sourcetree/items/temporarypageitem.h @@ -20,6 +20,7 @@ #define TEMPORARYPAGEITEM_H #include "items/sourcetreeitem.h" +#include "viewpage.h" class TemporaryPageItem : public SourceTreeItem { @@ -35,6 +36,7 @@ public: void removeFromList(); Tomahawk::ViewPage* page() const { return m_page; } + virtual bool isBeingPlayed() const { return m_page->isBeingPlayed(); } private: Tomahawk::ViewPage* m_page; diff --git a/src/sourcetree/sourcedelegate.cpp b/src/sourcetree/sourcedelegate.cpp index f24ba7080..99076ac92 100644 --- a/src/sourcetree/sourcedelegate.cpp +++ b/src/sourcetree/sourcedelegate.cpp @@ -140,6 +140,7 @@ SourceDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, co const bool playable = ( type == SourcesModel::StaticPlaylist || type == SourcesModel::AutomaticPlaylist || type == SourcesModel::Station || + type == SourcesModel::TemporaryPage || type == SourcesModel::GenericPage ); if ( playable && item->isBeingPlayed() ) From 0a686337f8996ca0b177965071d675f53f7a00d0 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 13:04:41 -0400 Subject: [PATCH 3/9] Don't set focus on page automatically (this breaks delete-with-del on sourcetree), and it was done originally for the newplaylistwidget that is gone. --- src/libtomahawk/viewmanager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libtomahawk/viewmanager.cpp b/src/libtomahawk/viewmanager.cpp index 8822d5602..594abc40f 100644 --- a/src/libtomahawk/viewmanager.cpp +++ b/src/libtomahawk/viewmanager.cpp @@ -569,7 +569,6 @@ ViewManager::setPage( ViewPage* page, bool trackHistory ) } m_stack->setCurrentWidget( page->widget() ); - page->widget()->setFocus(); updateView(); } From 8bbe15edee4501afd3344d4166e66d827d22df0f Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 14:27:06 -0400 Subject: [PATCH 4/9] Limit to 5 temp pages at once --- src/sourcetree/items/collectionitem.cpp | 20 ++++++++++++++++++-- src/sourcetree/items/collectionitem.h | 1 + src/sourcetree/items/temporarypageitem.cpp | 9 +++++++++ src/sourcetree/items/temporarypageitem.h | 8 +++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/sourcetree/items/collectionitem.cpp b/src/sourcetree/items/collectionitem.cpp index f50361182..be236f272 100644 --- a/src/sourcetree/items/collectionitem.cpp +++ b/src/sourcetree/items/collectionitem.cpp @@ -409,7 +409,8 @@ CollectionItem::requestExpanding() void CollectionItem::tempPageActivated( Tomahawk::ViewPage* v ) { - int idx = children().count(); + const int idx = children().count(); + const int latest = children().last()->IDValue(); foreach ( TemporaryPageItem* page, m_tempItems ) { @@ -420,13 +421,28 @@ CollectionItem::tempPageActivated( Tomahawk::ViewPage* v ) } } + // Only keep 5 temporary pages at once + while ( m_tempItems.size() > 5 ) + { + TemporaryPageItem* item = m_tempItems.takeFirst(); + QTimer::singleShot( 0, item, SLOT( removeFromList() ) ); + } emit beginRowsAdded( idx, idx ); - TemporaryPageItem* tempPage = new TemporaryPageItem( model(), this, v, idx ); + TemporaryPageItem* tempPage = new TemporaryPageItem( model(), this, v, latest + 1 ); + connect( tempPage, SIGNAL( removed() ), this, SLOT( temporaryPageDestroyed() ) ); m_tempItems << tempPage; endRowsAdded(); emit selectRequest( tempPage ); } +void +CollectionItem::temporaryPageDestroyed() +{ + TemporaryPageItem* tempPage = qobject_cast< TemporaryPageItem* >( sender() ); + Q_ASSERT( tempPage ); + m_tempItems.removeAll( tempPage ); +} + ViewPage* CollectionItem::sourceInfoClicked() diff --git a/src/sourcetree/items/collectionitem.h b/src/sourcetree/items/collectionitem.h index 9d991d228..e2ba91e10 100644 --- a/src/sourcetree/items/collectionitem.h +++ b/src/sourcetree/items/collectionitem.h @@ -65,6 +65,7 @@ private slots: void requestExpanding(); void tempPageActivated( Tomahawk::ViewPage* ); + void temporaryPageDestroyed(); Tomahawk::ViewPage* sourceInfoClicked(); Tomahawk::ViewPage* getSourceInfoPage() const; diff --git a/src/sourcetree/items/temporarypageitem.cpp b/src/sourcetree/items/temporarypageitem.cpp index ee86b03d6..6ae083aa1 100644 --- a/src/sourcetree/items/temporarypageitem.cpp +++ b/src/sourcetree/items/temporarypageitem.cpp @@ -55,6 +55,13 @@ TemporaryPageItem::peerSortValue() const return m_sortValue; } +int +TemporaryPageItem::IDValue() const +{ + return m_sortValue; +} + + void TemporaryPageItem::removeFromList() { @@ -67,5 +74,7 @@ TemporaryPageItem::removeFromList() parent()->removeChild( this ); parent()->endRowsRemoved(); + emit removed(); + deleteLater(); } diff --git a/src/sourcetree/items/temporarypageitem.h b/src/sourcetree/items/temporarypageitem.h index fe32d8a12..c2864f218 100644 --- a/src/sourcetree/items/temporarypageitem.h +++ b/src/sourcetree/items/temporarypageitem.h @@ -33,11 +33,17 @@ public: virtual QIcon icon() const; virtual int peerSortValue() const; + virtual int IDValue() const; - void removeFromList(); Tomahawk::ViewPage* page() const { return m_page; } virtual bool isBeingPlayed() const { return m_page->isBeingPlayed(); } +public slots: + void removeFromList(); + +signals: + bool removed(); + private: Tomahawk::ViewPage* m_page; QIcon m_icon; From 3924521aed26574ecf104e6de9950cdfc3c7860c Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 14:28:12 -0400 Subject: [PATCH 5/9] 5, not 6 --- src/sourcetree/items/collectionitem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sourcetree/items/collectionitem.cpp b/src/sourcetree/items/collectionitem.cpp index be236f272..2cc950a87 100644 --- a/src/sourcetree/items/collectionitem.cpp +++ b/src/sourcetree/items/collectionitem.cpp @@ -422,7 +422,7 @@ CollectionItem::tempPageActivated( Tomahawk::ViewPage* v ) } // Only keep 5 temporary pages at once - while ( m_tempItems.size() > 5 ) + while ( m_tempItems.size() > 4 ) { TemporaryPageItem* item = m_tempItems.takeFirst(); QTimer::singleShot( 0, item, SLOT( removeFromList() ) ); From 537115fac50bea6519cb54ad0059f83afbaf01d7 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 16:25:11 -0400 Subject: [PATCH 6/9] Fix artist bios not loading after changes to infosystem types --- src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp index f60f94acb..32a32b083 100644 --- a/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp +++ b/src/libtomahawk/widgets/infowidgets/ArtistInfoWidget.cpp @@ -199,7 +199,8 @@ ArtistInfoWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData requestD if ( output.canConvert< QVariantMap >() ) { - if ( trackInfo["artist"] != m_artist->name() ) + const QString artist = requestData.input.toString(); + if ( trackInfo["artist"] != m_artist->name() && artist != m_artist->name() ) { qDebug() << "Returned info was for:" << trackInfo["artist"] << "- was looking for:" << m_artist->name(); return; From b8ccf9b2af287c8f785745b16debe0b1f8273f80 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 17:03:34 -0400 Subject: [PATCH 7/9] Switch to stars, and show on-hover star animation when rating --- data/images/star-hover.png | Bin 0 -> 2188 bytes data/images/star-unstarred.png | Bin 0 -> 1526 bytes data/images/starred.png | Bin 0 -> 2228 bytes src/GetNewStuffDelegate.cpp | 50 +++++++++++++++++++++++++-------- src/GetNewStuffDelegate.h | 5 ++-- src/GetNewStuffDialog.cpp | 2 ++ 6 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 data/images/star-hover.png create mode 100644 data/images/star-unstarred.png create mode 100644 data/images/starred.png diff --git a/data/images/star-hover.png b/data/images/star-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..89efe2aef4360c17899963c54eeba1d3b8210f0d GIT binary patch literal 2188 zcmV;72y^#|P)T|GBNSW=i~@tenviV?1-}L)_1qt_EmcPwFp1v)V?aX~hD5?p3Ty^y)prB% z_K<7|1%Jfveed~cs1{Wbi-08Q4KNP8qT0rUF$J~&CiUJ298bO11MdvMo~q*@ey`sS zJfOaR8=_rR!3u)I{sQ1i^*sedL$j_5*op7#(G+bCHW>2g*MwtQbbr7jpja?=q_yv+X0%^1H@{9 z>wvEn*l@)lF#JuD&Y9+)mQLVFN7ieA*QB0uLx61&;H?#?+{F+opuieRM;j1Y^cS?=ogWml^q58$$yw-qn`kNjGy^oh-jxVrqMUWoSld*crzUH5+W}F zZvi%9GexCN&DIS54FTWsK2~7onO=j(fcNHT!J?6fwLLKqZx{U}V$q*fLKil_FhS6_ zKLZP0!3N;_j-UYd0H>A9nnbMa2G{wSMuuAP0;w-40_|gkfVC zYdT$anP}hf48=c;{jX_Vf5Ud58*^lB0D#l6sjAHZS6~Xo9 zF83K@-j+wb1w)Vro98FDXXyEr*rDB_Xk)a7lvDLi<4>1M!I&eL9 z&7Z+Qcl1KBQ=+W^9cd7e?g&$zP0RZaI;?qE$GaT*_kfR};*MM>qyaqnYq8myIz`_P zyc_tJ79Kg;zI<{r`3GYnEd}ZUKtx`subo~uf61{vht+}oN$a%P3G8&erw|>5ZifZ9 z1skRHDEd0!Y2Y#~e8%Gc#ISpfqEI8#+cP-76&uKC=i}H@rh=S@!bgBc3pQ}lKfEOH zRp7?dJ0jE!#G?sg%$bE$E+XA6%X{@QJO>+}e8{nT4|aVYE!YD}ONb<}J$@tpC8r4R zSzwzdWDL{Tb+|AX4mgxgVb^%i`3c}-*r`{P^H6$5NU({_OG)*33XPe?3#!?@Ii~CU zFLncWN2zMcl@c3q>UzxKcThN1JKsN7@23IBil{RUawcM}=NGdS8e>)t z9&I~Uk)FbC&%sWEE7D69j&e1CHYTvGH72sr6&8{S;F}`JEv~}=l^5CwD%!WXY+oNe57t(q@!th-(F@x)3V+lz{E-s z*=LNIJ2--#24lcJ^<9=}PzrMPNFvtua3UUkf0nYZ1%8E1mM+aCkcdaGNyOT|?U1vM zxG=Cu88Z&d*UXWg_T~&_BG}E-xGFn_4RX?up^kG19-O?fc=Jogca$N&$U}Y+@OxFp zefDDS5zmIFRhgR$wz^D+V1p6QkdMwHzYQBOX@^I!QJtpsGy8?fFDUt0_xzQ@h02H| z@Tx3wXJL~jZg1}c&c&Yk9B_C^;JetgTqdk>D|Ofk4g8IWzWvk`m9p^Y8KZjtp0 zR0n*C;1zlSUI5l-sk=wXU0b{x#X}#Ye9_@G0C$moDf%G6>v1kFz=qMf%oOQ4Nq{?* z%Q@lyk(R($pLn(g|8wS^5ufn>+_<3x2TqrIl zcz4j7KA*-;pSjrO)8k!Lv^PcIai#cfvj52LCHs#oAG82Jaq9Jk{6dGfrvyC(;Y{oa zu&4M@GB0JD%BZu8%uDDm)%P&@O|g=(mGmAdCYUJ{3$Z<)OZO$&3YQc5)|Y;=hO=cv z1o#ZWFj_yiS6Dx_*oy_O;-|>6p{Wqg!=6~Xc06Bc#cLgfCxOos&W@}e8y`$NHdXYh zeGC4z*TcZ;E2%6`tj9)-0{olc8DT|mHZ};!>#V;@@GfL72-}cT4*vtzoiw77^P-*r O0000m`OxIRCt{2n{A9;Lm0<@_wL?ZYO9Lc zN=v(gB|*M`V#2If2Fk_*11cJ%$QF-Klba0XCeu)#kAe+A-Ypw%TI z*DA0WC+2e#^kRKzadK_*w`t#tz)xD9$u5YwQUQJX zuhrre;N^%i!xkmrH`GP0&5&;@>I~T7ilA*=j@qzK>*U>`qz2xV!$OH>f8}x3BGTmC4i*1nu`@I`x{M3W4B39L)0E`1} z0**&k>=MxAg~o`q5^|2$)0({BU;2D6g z2|u4_8P-QMJcuqwoHqNt>q6Lq1Rb!<5vRW!5Su(`mk$N~$n^RLad7NMrutsQ>9HDk zIzfHih)Rz1>O0`oeTYGSVuAE)*mEGaLl0thRQ?Fe2HFwb9EbSyM*}U0t{2D;MPv`(*?ZB0YuIue81Gl4bpMz?$`e6@nsr9C0j|Ipq)Z5bwOb;t`Dq^bYh5CW} z7#>DR6YwPFwQVCZgX^M%+|`*Xcn`-;%Y>K!e1>@d?;+s;&IkT5RJI#A-ydn{Ky|J8 z;TK@$P%AwR_`*j--tEj|2v>>NPld&4H`cfea)Ak^8=^4a38PuyouX8)H_#P3^)!-}(GG=Kq zHd&A{B%F?FB<->!r-XXCDCwg_Hk>}L-(QzH>!t_eaa?Ob4){pr4?nQk$S`Qy+GA~KM zH*>7j$Xp+z%sIeUTDdB)1vzU(VYycBsl==^LJ8Gj616H9fjf{9H=QG@h-tknLawV_ zClWJJ$#1Tcw+-{TJuGaXz9Ykh-4Tf=G!nOjedVa-)SUt{T+iGk4+=ojXG-6sC^vaA9L3LqqMp&)bee~s7#BlQOL z1CJoPfQ}Ym6=v7l_o&z8MO1Il0QKJ;WR5#Ef-AlB7Ua6g)QDZg^Cr*5+<61QqYQT5 z^V;_tQ?@A)KGB3v2QENff10N83&61n>K}vrfx@Id+kmrytF-jj(={nRT9K*j3*L_` zN?{Ax)hT2x@#;4%pesX1IUY$EKx*m zbNeD>ugX|%4UWR>2n}vWlPt;)Go$^m8_Ty3Y_<^TWy07*qoM6N<$f~7OjegFUf literal 0 HcmV?d00001 diff --git a/data/images/starred.png b/data/images/starred.png new file mode 100644 index 0000000000000000000000000000000000000000..a93e9f6da08f6f9b664d9b143bf6cae3729c9508 GIT binary patch literal 2228 zcmV;l2ut^gP)1F{4SFbXs$VThB2QeYL} z8sE*prxUUz5&WLu@B7aqiCR=goCSCkHozG0rg|Hb#1L2wsQmkD!14ThBkEq#T77VUz|kKV z^sNT{nFQ>r3qC}+`=4jmy`( z4gT}>Gp#=bhUAbOHKrO^PqLEu==6tdr^aG5;i zv4U`*^Y$rZ7Z4r>i)(IO9q<5wLr z#?xSZPem_A`+%YAS4hkcz^kcDhoe+G(B9`}mUQPvcjs9z0e=84$ba_(`;Z3AMm$k; zo0bE{E!rVqzYA;vZjRk_@e%6&j!Jb-ekivS*lo%B4e;LlQ*CHqtpj|#29?`5ijnf_ zg+{GdY1q;^7#{0C0Z!D|CIwvVA~E`hDa^`_0Ea2Pn-!ygr`o34~P zXSqrbJ?5RPhSLCT!2Q701j9=Mw<9ah8xSNXO?(LnKxP=UzaTBPzg%l>qj`>UQ#U#h z&YRHMyQMLEZ1WW`T&^x;_4z5`P1iACU7kLPs0IKy9~lzwHfSTjmyvZkgqxwc$!+b? z;A*AX(K=)Dl~VJ7^OaIfrC6`E9s~Ahtq+9jVF=9-sL}D<@Rn=Mc_qM=$h>Ci`ZMwa z|85HxYXE>&BvrM_v<=t-T!pNwlju#iEmWxON-=keIxB|u^b3y4t=^D5zRzN1kX`2* z%igU(H*)S!fTzo2t%I8USDsvNoS((1w6701w;3y>8oeO0iif<=VV*ptT-D>z?l1vAZJJ zUC6{X)1d7`dhUzU)m>@>fE-)hNB9s^1GfR!A#465`rOPCRBF3Y>a-X-3Lx`<>g>)A z?X_4l5y!hM`j3IH5IsK>AWj4L^4B2QnzTWG2KXHCPgD3-THcdNJHJyB^T&qP9Q3l; z#XTH<&0@_%CTTNmb^;l$_r%c=cQ>ekTaYO2kU?JzJO?Z{g|A{{zrx!TQ%7K&r`JU| zzXsVXna=+WIc19FJe0p3-i@raj~levzz(E$Ox8OmJF-n{Zz!$;t@VKoL1+vTnB9p4 zH!TKz5cnW+<`^55(8Uogos8GnV&?`-99qW;-y0shTdkK|3x-%w^ypCS{b2XtFA}GY&DOV&=QTBc+7a8 z0lXf!&L~u?0nDZGuNWccfZK9GIZL5()cgUO&NN6*BbzpmVX&gGRD4vc0Ze0dn2ZVK zblAdL>mz7AfTl}py-s`HR;?+RD7D*Qmi2(0MRb;pYD8*h5bmy_22fgepn`Bid*0T@ zTx!!595r`)_w>{94V_k7lyW9hWu8(i36Jv~1cA>oWHl&z0)+U1P!!e!cjVuXAa?*K z0PbYQJ8}(;hamsgJ+G^KVq|A@HG*p2DfKtrTT91uqhue+VKZ6Vdf2X$!*j|b8 z)ffWi_IF|0Ji=WcH_9AMQ)HeX&T{_amwDM+oN~g7WUHjeTzG4=wU~L*HQ%zVLmiVayoe z2#tPPW=E89kj>MWQFaswataVp#~Fn08GfXE^DD=_h9QqnBMY*f{;g5Qes&^r$aHwl zC}Sr)>jno2MtnoQI*t5VBw#Wf9!8=%lXjTtFHC;dke_zXUn?vzjPQ``aTMNyBu(tU zy$d)KIrZ6N@jN6;-CCs1g_is|l{!-nZZr%iw%O@G4ms>Q!J7!LKxyE6gs;$R;2^NH zNZp4FxogUIqkQZ$47kDKH3N51cqw`>;p=fWE=0m;vrLY{oFvHB*q8ZD1%8x;vk5!5 z$lw)o;wEHIKOIVKyyXTj3%t2(Z^}TAq5KsjqD&)KVeM}GGVswdbbN~N-9dl&T#F2! zCS>{ad6$>%O&NH~P<%JVC$jq}K9QAzcHrk$y?&RUYw-pv&=U)@kP~2E@h^#9$}X*< zΜt&?k)VAxax!6=MyBf25pXCNAb8e|{?6pQwS}0+_eH%%^BLTSYj)*9nKw=F?YW z{kX`*0$cIZ6xqdrawText( btnRect, Qt::AlignCenter, actionText ); painter->setPen( saved ); + // rating stars int rating = index.data( GetNewStuffModel::RatingRole ).toInt(); const int ratingWidth = 5 * ( m_ratingStarPositive.width() + PADDING_BETWEEN_STARS ); @@ -185,10 +190,21 @@ GetNewStuffDelegate::paint( QPainter* painter, const QStyleOptionViewItem& optio if ( i == 1 ) m_cachedStarRects[ QPair(index.row(), index.column()) ] = r; - if ( i <= rating ) // positive star - painter->drawPixmap( r, m_ratingStarPositive ); + QPixmap pm; + if ( m_hoveringOver > -1 ) + { + if ( i <= m_hoveringOver ) // positive star + painter->drawPixmap( r, m_onHoverStar ); + else + painter->drawPixmap( r, m_ratingStarNegative ); + } else - painter->drawPixmap( r, m_ratingStarNegative ); + { + if ( i <= rating ) // positive star + painter->drawPixmap( r, m_ratingStarPositive ); + else + painter->drawPixmap( r, m_ratingStarNegative ); + } runningEdge += m_ratingStarPositive.width() + PADDING_BETWEEN_STARS; } @@ -242,10 +258,13 @@ bool GetNewStuffDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ) { Q_UNUSED( option ); - if ( event->type() != QEvent::MouseButtonRelease ) + m_hoveringOver = -1; + + if ( event->type() != QEvent::MouseButtonRelease && + event->type() != QEvent::MouseMove ) return false; - if ( m_cachedButtonRects.contains( QPair( index.row(), index.column() ) ) ) + if ( event->type() == QEvent::MouseButtonRelease && m_cachedButtonRects.contains( QPair( index.row(), index.column() ) ) ) { QRect rect = m_cachedButtonRects[ QPair( index.row(), index.column() ) ]; QMouseEvent* me = static_cast< QMouseEvent* >( event ); @@ -273,8 +292,17 @@ GetNewStuffDelegate::editorEvent( QEvent* event, QAbstractItemModel* model, cons const int eachStar = starsWidth / 5; const int clickOffset = me->pos().x() - fullStars.x(); const int whichStar = (clickOffset / eachStar) + 1; - tDebug() << "Clicked on:" << whichStar; - model->setData( index, whichStar, GetNewStuffModel::RatingRole ); + + if ( event->type() == QEvent::MouseButtonRelease ) + { + tDebug() << "Clicked on:" << whichStar; + model->setData( index, whichStar, GetNewStuffModel::RatingRole ); + } + else if ( event->type() == QEvent::MouseMove ) + { + // 0-indexed + m_hoveringOver = whichStar; + } return true; } diff --git a/src/GetNewStuffDelegate.h b/src/GetNewStuffDelegate.h index a1976a8b5..e2b71afaa 100644 --- a/src/GetNewStuffDelegate.h +++ b/src/GetNewStuffDelegate.h @@ -35,11 +35,10 @@ protected: virtual bool editorEvent( QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index ); private: - QPixmap m_defaultCover; - QPixmap m_ratingStarPositive; - QPixmap m_ratingStarNegative; + QPixmap m_defaultCover, m_onHoverStar, m_ratingStarPositive, m_ratingStarNegative; int m_widestTextWidth; + int m_hoveringOver; mutable QHash< QPair, QRect > m_cachedButtonRects; mutable QHash< QPair, QRect > m_cachedStarRects; }; diff --git a/src/GetNewStuffDialog.cpp b/src/GetNewStuffDialog.cpp index d27604150..a0102c648 100644 --- a/src/GetNewStuffDialog.cpp +++ b/src/GetNewStuffDialog.cpp @@ -33,6 +33,8 @@ GetNewStuffDialog::GetNewStuffDialog( QWidget *parent, Qt::WindowFlags f ) ui->listView->setItemDelegate( new GetNewStuffDelegate( ui->listView ) ); ui->listView->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); + ui->listView->setMouseTracking( true ); + #ifdef Q_WS_MAC setMinimumSize( 510, 350 ); setMaximumSize( 510, 350 ); From 08610eee13a5c12610c16a6bd8fad7a541de887d Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 17:34:01 -0400 Subject: [PATCH 8/9] Use artist and album icons for temp pages --- resources.qrc | 3 +++ src/sourcetree/items/temporarypageitem.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/resources.qrc b/resources.qrc index f994d9456..02ee5f9ab 100644 --- a/resources.qrc +++ b/resources.qrc @@ -92,6 +92,9 @@ data/images/artist-icon.png data/images/album-icon.png data/images/search-icon.png + data/images/star-hover.png + data/images/starred.png + data/images/star-unstarred.png data/images/track-icon-22x22.png data/images/track-icon-32x32.png data/images/track-icon-16x16.png diff --git a/src/sourcetree/items/temporarypageitem.cpp b/src/sourcetree/items/temporarypageitem.cpp index 6ae083aa1..d1d4beaca 100644 --- a/src/sourcetree/items/temporarypageitem.cpp +++ b/src/sourcetree/items/temporarypageitem.cpp @@ -17,7 +17,9 @@ */ #include "temporarypageitem.h" -#include +#include "viewmanager.h" +#include "widgets/infowidgets/AlbumInfoWidget.h" +#include "widgets/infowidgets/ArtistInfoWidget.h" using namespace Tomahawk; @@ -27,6 +29,11 @@ TemporaryPageItem::TemporaryPageItem ( SourcesModel* mdl, SourceTreeItem* parent , m_icon( QIcon( RESPATH "images/playlist-icon.png" ) ) , m_sortValue( sortValue ) { + if ( dynamic_cast< ArtistInfoWidget* >( page ) ) + m_icon = QIcon( RESPATH "images/artist-icon.png" ); + else if ( dynamic_cast< AlbumInfoWidget* >( page ) ) + m_icon = QIcon( RESPATH "images/album-icon.png" ); + model()->linkSourceItemToPage( this, page ); } From 1c66534cb8784e3e61ec2b1595dd1ea0071bec76 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 21 Oct 2011 17:45:29 -0400 Subject: [PATCH 9/9] search pages too --- src/sourcetree/items/temporarypageitem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/sourcetree/items/temporarypageitem.cpp b/src/sourcetree/items/temporarypageitem.cpp index d1d4beaca..39aee2d1b 100644 --- a/src/sourcetree/items/temporarypageitem.cpp +++ b/src/sourcetree/items/temporarypageitem.cpp @@ -20,6 +20,7 @@ #include "viewmanager.h" #include "widgets/infowidgets/AlbumInfoWidget.h" #include "widgets/infowidgets/ArtistInfoWidget.h" +#include "widgets/searchwidget.h" using namespace Tomahawk; @@ -33,6 +34,8 @@ TemporaryPageItem::TemporaryPageItem ( SourcesModel* mdl, SourceTreeItem* parent m_icon = QIcon( RESPATH "images/artist-icon.png" ); else if ( dynamic_cast< AlbumInfoWidget* >( page ) ) m_icon = QIcon( RESPATH "images/album-icon.png" ); + else if ( dynamic_cast< SearchWidget* >( page ) ) + m_icon = QIcon( RESPATH "images/search-icon.png" ); model()->linkSourceItemToPage( this, page ); }