From 9ee970489c4e8c6ce660e5e3add114802f3d1e6d Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 1 Apr 2011 15:44:03 -0400 Subject: [PATCH] add icon for playlists add recently played item in source list add create playlist icon, show playlists node for local source remove H ome from toolbar as it's in the sidebar now --- data/images/create-playlist.png | Bin 0 -> 1999 bytes resources.qrc | 1 + src/libtomahawk/playlist/playlistmanager.cpp | 3 +- src/sourcetree/sourcesmodel.cpp | 6 ++ src/sourcetree/sourcesmodel.h | 2 + src/sourcetree/sourcetreeitem.cpp | 74 +++++++++++++++++-- src/sourcetree/sourcetreeitem.h | 22 ++++++ src/tomahawkwindow.cpp | 1 - 8 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 data/images/create-playlist.png diff --git a/data/images/create-playlist.png b/data/images/create-playlist.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea11f467aac7b37a3e34c3834adc34402543994 GIT binary patch literal 1999 zcmV;=2Qc`FP)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9CMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx20?>!`FrQsdJlnHR>OPy zcd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_^6ZZ}PI-92wGS&j#91PI zKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3rn}7Ut74&?PWBFvy`A)a zPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C-srWU*6kiZcC!$nw*)9$7 zn6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3j}vF!)ZOnz+5)dI4jl{{ z44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z<8w`3e3jI8lUGNUta*C8 zn(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu-=A!MJ3Znq&n~srbFGPs zH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8F7cAsOREdwU~R_;ot1_u z(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<*4sZI8+sFJD270UUORdLHO0nA4V) z%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRcp*ceL#HUJSllrgm5wQKR zQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY0b&3E0b&7PC(u&>00f6gL_t(o z3B^}$Y*SSfKi6%ptz)~=RRtR~fKJf45+nPtXlH~kO5zHEPq@w$P-mi;s9#Y(_(A#5 z7(eJ@!q5*2Wa~`O#9#tbFc=~m{|qr8#WV}jkY0wX8(nj~=k}e~`?~hM0R~U>hUckX*kN(m;h-c%GM2nfukI5as7mB>KsWF|OndO1TdcBS^+K;BM!m+W5B=`!+N}v=!FRt%EZ)(Tr`J56Z z{@^u+iX!9}P*6lRlrIdOx-9pM|CNJR_m9E0y)9}DZssc8fxeMlaQmyoR7ZM6^SN)PAcb@ zyaFoicjyHP=}N;qb$z!K2r;zn$v*b_ce~~pXSmLh&2GRfR7<+kN zi@ST-Y65U8=w`!g+O9x|f%vKj)CCTeOSnrW06trkW+85c;u^`0Y{RFsq?4U*?OZH| z`d3F-d}Ie1-MFI(>+2XLGGnT(Y5RtqhXL*mKse~P{ngXK2VPhKOCJtySBvl2h8ltc zKn)-FM}{)1qj~Nz*#&Mm%C%TOj12b;pIVit!oJc19t*$4Q^**UE3gg z=Z8M|;hJYE3zPnz0XV+B6GBamlovVQ)Nv1VF5%rc>T8`J4ggjY*4%R|yTIg@Y%?s5 z|9rzIzm(Rd)ubGZ3ET=`bNwmMdY+F0SA;mc@6Iy*#f)xo;$ucmc3t_3hQcxPYgin*AK#3z1@NtuP$#(6af1#V=pGF4hkG z%BQXu4=rBcgNbX?aQfmwMEx z_)V3(b`xS^FCrh}UjFb?S^-1C51krBTc91DdaxPxyxAqpfplf6U_ZAcBS&iS)r*;8 zQ5^eo5<&4tLVi$xR2B5X9$Ysu)UdqN#b;czpBLMEfOKn)*iINM+d`pd}BZ@Xwt h!rNXP3;yo_{sp?CPlGUz0&oBT002ovPDHLkV1ktI#bp2h literal 0 HcmV?d00001 diff --git a/resources.qrc b/resources.qrc index 7442790aa..586b11a01 100644 --- a/resources.qrc +++ b/resources.qrc @@ -75,6 +75,7 @@ ./data/images/forward.png ./data/images/music-icon.png ./data/images/configure.png +./data/images/create-playlist.png ./data/topbar-radiobuttons.css ./data/icons/tomahawk-icon-16x16.png ./data/icons/tomahawk-icon-32x32.png diff --git a/src/libtomahawk/playlist/playlistmanager.cpp b/src/libtomahawk/playlist/playlistmanager.cpp index da1dbeaed..a056529a8 100644 --- a/src/libtomahawk/playlist/playlistmanager.cpp +++ b/src/libtomahawk/playlist/playlistmanager.cpp @@ -577,8 +577,9 @@ PlaylistManager::setPage( ViewPage* page, bool trackHistory ) emit superCollectionActivated(); else if( isNewPlaylistPageVisible() ) emit newPlaylistActivated(); + /* TODO refactor. now we have rows in the sourcetreeview that are connected to pages, e.g. Stations, Recently Updated, etc else if ( !currentPlaylistInterface() ) - emit tempPageActivated(); + emit tempPageActivated();*/ if ( !AudioEngine::instance()->isPlaying() ) AudioEngine::instance()->setPlaylist( currentPlaylistInterface() ); diff --git a/src/sourcetree/sourcesmodel.cpp b/src/sourcetree/sourcesmodel.cpp index 68cc8b102..adc6100ad 100644 --- a/src/sourcetree/sourcesmodel.cpp +++ b/src/sourcetree/sourcesmodel.cpp @@ -23,9 +23,11 @@ #include "playlist.h" #include "collection.h" #include "source.h" +#include "tomahawk/tomahawkapp.h" #include #include +#include using namespace Tomahawk; @@ -36,6 +38,10 @@ SourcesModel::SourcesModel( QObject* parent ) appendItem( source_ptr() ); + // add misc children of root node + GenericPageItem* recent = new GenericPageItem( this, m_rootItem->children().at( 0 ), tr( "Recently Played" ), QIcon( RESPATH "images/home.png" ) ); + connect( recent, SIGNAL( activated() ), PlaylistManager::instance(), SLOT( showWelcomePage() ) ); + onSourcesAdded( SourceList::instance()->sources() ); connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) ); diff --git a/src/sourcetree/sourcesmodel.h b/src/sourcetree/sourcesmodel.h index b91e6f324..eefc93ede 100644 --- a/src/sourcetree/sourcesmodel.h +++ b/src/sourcetree/sourcesmodel.h @@ -51,6 +51,8 @@ public: AutomaticPlaylist = 4, Stations = 5, + + GenericPage = 6 }; enum CategoryType { diff --git a/src/sourcetree/sourcetreeitem.cpp b/src/sourcetree/sourcetreeitem.cpp index 073a48f7b..1a09760f2 100644 --- a/src/sourcetree/sourcetreeitem.cpp +++ b/src/sourcetree/sourcetreeitem.cpp @@ -174,6 +174,12 @@ PlaylistItem::dropMimeData( const QMimeData* data, Qt::DropAction action ) return false; } +QIcon +PlaylistItem::icon() const +{ + return QIcon( RESPATH "images/playlist-icon.png" ); +} + /// Dynamic Playlist Item /* @@ -270,7 +276,7 @@ CategoryAddItem::flags() const QIcon CategoryAddItem::icon() const { - return QIcon( RESPATH "images/list-add.png" ); + return QIcon( RESPATH "images/create-playlist.png" ); } // CategoryItem @@ -316,19 +322,26 @@ CategoryItem::insertItems( QList< SourceTreeItem* > items ) CollectionItem::CollectionItem( SourcesModel* mdl, SourceTreeItem* parent, const Tomahawk::source_ptr& source ) : SourceTreeItem( mdl, parent, SourcesModel::Collection ) , m_source( source ) + , m_playlists( 0 ) + , m_stations( 0 ) { if( m_source.isNull() ) { // super collection return; } - // create category item - m_playlists = new CategoryItem( model(), this, SourcesModel::PlaylistsCategory, source->isLocal() ); + // create category items if there are playlists to show, or stations to show + QList< playlist_ptr > playlists = source->collection()->playlists(); - m_stations = new CategoryItem( model(), this, SourcesModel::StationsCategory, source->isLocal() ); + if( !playlists.isEmpty() || source->isLocal() ) { + m_playlists = new CategoryItem( model(), this, SourcesModel::PlaylistsCategory, source->isLocal() ); + // ugh :( we're being added by the model, no need to notify for added rows now +// m_playlists->blockSignals( true ); + onPlaylistsAdded( source->collection()->playlists() ); +// m_playlists->blockSignals( false ); + } + + // TODO always show for now, till we actually support stations +// m_stations = new CategoryItem( model(), this, SourcesModel::StationsCategory, source->isLocal() ); - // ugh :( we're being added by the model, no need to notify for added rows now - m_playlists->blockSignals( true ); - onPlaylistsAdded( source->collection()->playlists() ); - m_playlists->blockSignals( false ); // HACK to load only for now source->collection()->dynamicPlaylists(); @@ -368,6 +381,10 @@ CollectionItem::onPlaylistsAdded( const QList< playlist_ptr >& playlists ) if( playlists.isEmpty() ) return; + if( !m_playlists ) { // add the category too + m_playlists = new CategoryItem( model(), this, SourcesModel::PlaylistsCategory, source()->isLocal() ); + } + QList< SourceTreeItem* > items; int addOffset = playlists.first()->author()->isLocal() ? 1 : 0; @@ -386,6 +403,7 @@ CollectionItem::onPlaylistsAdded( const QList< playlist_ptr >& playlists ) void CollectionItem::onPlaylistsDeleted( const QList< playlist_ptr >& playlists ) { + Q_ASSERT( m_playlists ); // How can we delete playlists if we have none? QList< SourceTreeItem* > items; foreach( const playlist_ptr& playlist, playlists ) { int curCount = m_playlists->children().count(); @@ -400,3 +418,43 @@ CollectionItem::onPlaylistsDeleted( const QList< playlist_ptr >& playlists ) } } } + +/// Generic page item +GenericPageItem::GenericPageItem( SourcesModel* model, SourceTreeItem* parent, const QString& text, const QIcon& icon ) + : SourceTreeItem( model, parent, SourcesModel::GenericPage ) + , m_icon( icon ) + , m_text( text ) +{ + +} + +GenericPageItem::~GenericPageItem() +{ + +} + +void +GenericPageItem::activate() +{ + emit activated(); +} + +QString +GenericPageItem::text() const +{ + return m_text; +} + +QIcon +GenericPageItem::icon() const +{ + return m_icon; +} + + +bool +GenericPageItem::willAcceptDrag(const QMimeData* data) const +{ + return false; +} + diff --git a/src/sourcetree/sourcetreeitem.h b/src/sourcetree/sourcetreeitem.h index 3477e66a0..b0f5654fd 100644 --- a/src/sourcetree/sourcetreeitem.h +++ b/src/sourcetree/sourcetreeitem.h @@ -154,6 +154,7 @@ public: virtual void activate(); virtual bool willAcceptDrag( const QMimeData* data ) const; virtual bool dropMimeData( const QMimeData* data, Qt::DropAction action ); + virtual QIcon icon() const; protected: void setLoaded( bool loaded ); @@ -186,6 +187,27 @@ private: Tomahawk::dynplaylist_ptr m_dynplaylist; };*/ +// generic item that has some name, some text, and calls a certain slot when activated. badabing! +class GenericPageItem : public SourceTreeItem +{ + Q_OBJECT +public: + GenericPageItem( SourcesModel* model, SourceTreeItem* parent, const QString& text, const QIcon& icon ); + virtual ~GenericPageItem(); + + virtual QString text() const; + virtual void activate(); + virtual bool willAcceptDrag( const QMimeData* data ) const; + virtual QIcon icon() const; + +signals: + void activated(); + +private: + QIcon m_icon; + QString m_text; +}; + Q_DECLARE_METATYPE( SourceTreeItem* ); #endif // SOURCETREEITEM_H diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index 62a442946..cfdc431e9 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -169,7 +169,6 @@ TomahawkWindow::TomahawkWindow( QWidget* parent ) m_backAvailable = toolbar->addAction( QIcon( RESPATH "images/back.png" ), tr( "Back" ), PlaylistManager::instance(), SLOT( historyBack() ) ); m_forwardAvailable = toolbar->addAction( QIcon( RESPATH "images/forward.png" ), tr( "Forward" ), PlaylistManager::instance(), SLOT( historyForward() ) ); - toolbar->addAction( QIcon( RESPATH "images/home.png" ), tr( "Home" ), PlaylistManager::instance(), SLOT( showWelcomePage() ) ); statusBar()->addPermanentWidget( m_audioControls, 1 );