From f16451196bc7e5bec87b0da95cb4f39b7ff4214f Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Wed, 18 May 2011 18:13:41 -0400 Subject: [PATCH] Don't allow dropping of playlist items onto the current playlist in the sourcetree. --- src/libtomahawk/playlist/playlistmodel.cpp | 14 +++++++++++++- src/libtomahawk/playlist/playlistmodel.h | 2 ++ src/sourcetree/items/playlistitems.cpp | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/playlist/playlistmodel.cpp b/src/libtomahawk/playlist/playlistmodel.cpp index c6b246749..7c4b11f31 100644 --- a/src/libtomahawk/playlist/playlistmodel.cpp +++ b/src/libtomahawk/playlist/playlistmodel.cpp @@ -296,11 +296,19 @@ PlaylistModel::onRevisionLoaded( Tomahawk::PlaylistRevision revision ) loadPlaylist( m_playlist ); } +QMimeData* +PlaylistModel::mimeData( const QModelIndexList& indexes ) const +{ + // Add the playlist id to the mime data so that we can detect dropping on ourselves + QMimeData* d = TrackModel::mimeData( indexes ); + d->setData( "application/tomahawk.playlist.id", m_playlist->guid().toLatin1() ); + + return d; +} bool PlaylistModel::dropMimeData( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) { - qDebug() << "LALALA"; Q_UNUSED( column ); if ( action == Qt::IgnoreAction || isReadOnly() ) return true; @@ -310,6 +318,10 @@ PlaylistModel::dropMimeData( const QMimeData* data, Qt::DropAction action, int r && !data->hasFormat( "application/tomahawk.result.list" ) ) return false; + if ( data->hasFormat( "application/tomahawk.playlist.id" ) && + data->data( "application/tomahawk.playlist.id" ) == m_playlist->guid() ) + return false; // don't allow dropping on ourselves + int beginRow; if ( row != -1 ) beginRow = row; diff --git a/src/libtomahawk/playlist/playlistmodel.h b/src/libtomahawk/playlist/playlistmodel.h index bc2af7868..1de86af97 100644 --- a/src/libtomahawk/playlist/playlistmodel.h +++ b/src/libtomahawk/playlist/playlistmodel.h @@ -32,6 +32,7 @@ #include "dllmacro.h" +class QMimeData; class QMetaData; class DLLEXPORT PlaylistModel : public TrackModel @@ -47,6 +48,7 @@ public: QVariant data( const QModelIndex& index, int role ) const; QVariant headerData( int section, Qt::Orientation orientation, int role ) const; + virtual QMimeData* mimeData ( const QModelIndexList& indexes ) const; virtual bool dropMimeData( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ); Tomahawk::playlist_ptr playlist() const { return m_playlist; } diff --git a/src/sourcetree/items/playlistitems.cpp b/src/sourcetree/items/playlistitems.cpp index d73d6ada0..eb164df63 100644 --- a/src/sourcetree/items/playlistitems.cpp +++ b/src/sourcetree/items/playlistitems.cpp @@ -112,6 +112,12 @@ bool PlaylistItem::dropMimeData( const QMimeData* data, Qt::DropAction action ) { QList< Tomahawk::query_ptr > queries; + + if ( data->hasFormat( "application/tomahawk.playlist.id" ) && + data->data( "application/tomahawk.playlist.id" ) == m_playlist->guid() ) + return false; // don't allow dropping on ourselves + + if ( data->hasFormat( "application/tomahawk.result.list" ) ) { QByteArray itemData = data->data( "application/tomahawk.result.list" );