SVN commit 996111 by shanachie: Move the actionsFor stuff to PlaylistManager where it will map to the individual providers. WIP. M +16 -13 browsers/playlistbrowser/UserPlaylistModel.cpp M +0 -1 browsers/playlistbrowser/UserPlaylistModel.h M +12 -0 playlistmanager/PlaylistManager.cpp M +5 -1 playlistmanager/PlaylistManager.h M +22 -1 playlistmanager/sql/SqlUserPlaylistProvider.cpp M +3 -0 playlistmanager/sql/SqlUserPlaylistProvider.h --- trunk/extragear/multimedia/amarok/src/browsers/playlistbrowser/UserPlaylistModel.cpp #996110:996111 @@ -23,7 +23,6 @@ #include "CollectionManager.h" #include "context/popupdropper/libpud/PopupDropperAction.h" #include "SvgHandler.h" -#include "UserPlaylistProvider.h" #include @@ -32,7 +31,8 @@ #include //Playlist & Track index differentiator macros -#define TRACK_MASK (0x1<<31) +//QModelIndex::intenalId() is a qint64 to support 64-bit pointers in a union with the ID +#define TRACK_MASK (0x1<<63) #define IS_TRACK(x) ((x.internalId()) & (TRACK_MASK))?true:false #define SET_TRACK_MASK(x) ((x) | (TRACK_MASK)) #define REMOVE_TRACK_MASK(x) ((x) & ~(TRACK_MASK)) @@ -408,19 +408,22 @@ if( !m_selectedPlaylists.isEmpty() ) { - UserPlaylistProvider *provider = - qobject_cast( - The::playlistManager()->getProviderForPlaylist( - m_selectedPlaylists.front() - ) + actions += QSet::fromList( + The::playlistManager()->playlistActions( m_selectedPlaylists ) ); - - if( provider && !selectedPlaylists().isEmpty() ) - actions += - QSet::fromList( - provider->playlistActions( m_selectedPlaylists ) - ); } + else + { + foreach( const QModelIndex &idx, indices ) + { + actions += QSet::fromList( + The::playlistManager()->trackActions( + m_playlists.value( idx.parent().internalId() ), + idx.row() + ) + ); + } + } actionList = actions.toList(); actionList << createCommonActions( indices ); --- trunk/extragear/multimedia/amarok/src/browsers/playlistbrowser/UserPlaylistModel.h #996110:996111 @@ -27,7 +27,6 @@ #define PLAYLIST_DB_VERSION 1 -class PlaylistProvider; class PopupDropperAction; namespace PlaylistBrowserNS { --- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistManager.cpp #996110:996111 @@ -398,6 +398,18 @@ return 0; } +QList +PlaylistManager::playlistActions( const Meta::PlaylistList lists ) +{ + return QList(); +} + +QList +PlaylistManager::trackActions( const Meta::PlaylistPtr playlist, int trackIndex ) +{ + return QList(); +} + namespace Amarok { //this function (C) Copyright 2003-4 Max Howell, (C) Copyright 2004 Mark Kretschmann --- trunk/extragear/multimedia/amarok/src/playlistmanager/PlaylistManager.h #996110:996111 @@ -30,6 +30,7 @@ class PlaylistProvider; typedef QList PlaylistProviderList; class PodcastProvider; +class PopupDropperAction; class UserPlaylistProvider; namespace The { @@ -151,9 +152,12 @@ * Retrieves the provider owning the given playlist * @arg playlist the playlist whose provider we want */ - PlaylistProvider* getProviderForPlaylist( const Meta::PlaylistPtr &playlist ); + QList playlistActions( const Meta::PlaylistList lists ); + QList trackActions( const Meta::PlaylistPtr playlist, + int trackIndex ); + signals: void updated(); void categoryAdded( int category ); --- trunk/extragear/multimedia/amarok/src/playlistmanager/sql/SqlUserPlaylistProvider.cpp #996110:996111 @@ -42,6 +42,7 @@ : UserPlaylistProvider() , m_renameAction( 0 ) , m_deleteAction( 0 ) + , m_removeTrackAction( 0 ) { checkTables(); m_root = Meta::SqlPlaylistGroupPtr( new Meta::SqlPlaylistGroup( "", @@ -105,7 +106,6 @@ QList SqlUserPlaylistProvider::playlistActions( Meta::PlaylistList list ) { - Q_UNUSED( list ) QList actions; m_selectedPlaylists.clear(); @@ -128,6 +128,27 @@ return actions; } +QList +SqlUserPlaylistProvider::trackActions( Meta::PlaylistPtr playlist, Meta::TrackList list ) +{ + QList actions; + + if( m_removeTrackAction == 0 ) + { + m_removeTrackAction = new PopupDropperAction( + The::svgHandler()->getRenderer( "amarok/images/pud_items.svg" ), + "delete", + KIcon( "media-track-remove-amarok" ), + i18n( "Remove From Playlist" ), + this + ); + connect( m_deleteAction, SIGNAL( triggered() ), SLOT( slotDelete() ) ); + } + actions << m_removeTrackAction; + + return actions; +} + Meta::PlaylistPtr SqlUserPlaylistProvider::save( const Meta::TrackList &tracks ) { --- trunk/extragear/multimedia/amarok/src/playlistmanager/sql/SqlUserPlaylistProvider.h #996110:996111 @@ -45,6 +45,8 @@ virtual bool supportsEmptyGroups() { return true; } QList playlistActions( Meta::PlaylistList list ); + QList trackActions( Meta::PlaylistPtr playlist, + Meta::TrackList list ); Meta::SqlPlaylistGroupPtr group( const QString &name ); bool import( const QString& fromLocation ); @@ -72,6 +74,7 @@ Meta::SqlPlaylistList m_selectedPlaylists; PopupDropperAction *m_renameAction; PopupDropperAction *m_deleteAction; + PopupDropperAction *m_removeTrackAction; }; #endif