[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/amarok/src
From:       Bart Cerneels <bart.cerneels () kde ! org>
Date:       2009-07-13 20:59:40
Message-ID: 1247518780.230923.20761.nullmailer () svn ! kde ! org
[Download RAW message or body]

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 <KIcon>
 
@@ -32,7 +31,8 @@
 #include <typeinfo>
 
 //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<UserPlaylistProvider *>(
-                        The::playlistManager()->getProviderForPlaylist(
-                                    m_selectedPlaylists.front()
-                                )
+        actions += QSet<PopupDropperAction *>::fromList(
+                            The::playlistManager()->playlistActions( m_selectedPlaylists )
                         );
-
-        if( provider && !selectedPlaylists().isEmpty() )
-            actions +=
-                    QSet<PopupDropperAction *>::fromList(
-                                provider->playlistActions( m_selectedPlaylists )
-                            );
     }
+    else
+    {
+        foreach( const QModelIndex &idx, indices )
+        {
+            actions += QSet<PopupDropperAction *>::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<PopupDropperAction *>
+PlaylistManager::playlistActions( const Meta::PlaylistList lists )
+{
+    return QList<PopupDropperAction *>();
+}
+
+QList<PopupDropperAction *>
+PlaylistManager::trackActions( const Meta::PlaylistPtr playlist, int trackIndex )
+{
+    return QList<PopupDropperAction *>();
+}
+
 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<PlaylistProvider *> 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<PopupDropperAction *> playlistActions( const Meta::PlaylistList lists );
+        QList<PopupDropperAction *> 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<PopupDropperAction *>
 SqlUserPlaylistProvider::playlistActions( Meta::PlaylistList list )
 {
-    Q_UNUSED( list )
     QList<PopupDropperAction *> actions;
 
     m_selectedPlaylists.clear();
@@ -128,6 +128,27 @@
     return actions;
 }
 
+QList<PopupDropperAction *>
+SqlUserPlaylistProvider::trackActions( Meta::PlaylistPtr playlist, Meta::TrackList list )
+{
+    QList<PopupDropperAction *> 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<PopupDropperAction *> playlistActions( Meta::PlaylistList list );
+        QList<PopupDropperAction *> 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
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic