diff --git a/src/libtomahawk/playlist/albumview.cpp b/src/libtomahawk/playlist/albumview.cpp index 16eb7e0a8..101760fff 100644 --- a/src/libtomahawk/playlist/albumview.cpp +++ b/src/libtomahawk/playlist/albumview.cpp @@ -227,7 +227,7 @@ AlbumView::startDrag( Qt::DropActions supportedActions ) QDrag* drag = new QDrag( this ); drag->setMimeData( data ); - const QPixmap p = TomahawkUtils::createDragPixmap( indexes.count() ); + const QPixmap p = TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeAlbum, indexes.count() ); drag->setPixmap( p ); drag->setHotSpot( QPoint( -20, -20 ) ); diff --git a/src/libtomahawk/playlist/artistview.cpp b/src/libtomahawk/playlist/artistview.cpp index 199e8b1a4..07d616aac 100644 --- a/src/libtomahawk/playlist/artistview.cpp +++ b/src/libtomahawk/playlist/artistview.cpp @@ -215,7 +215,15 @@ ArtistView::startDrag( Qt::DropActions supportedActions ) QDrag* drag = new QDrag( this ); drag->setMimeData( data ); - const QPixmap p = TomahawkUtils::createDragPixmap( indexes.count() ); + + QPixmap p; + if ( data->hasFormat( "application/tomahawk.metadata.artist" ) ) + p = TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeArtist, indexes.count() ); + else if ( data->hasFormat( "application/tomahawk.metadata.album" ) ) + p = TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeAlbum, indexes.count() ); + else + p = TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeTrack, indexes.count() ); + drag->setPixmap( p ); drag->setHotSpot( QPoint( -20, -20 ) ); diff --git a/src/libtomahawk/playlist/trackview.cpp b/src/libtomahawk/playlist/trackview.cpp index 99c1d4cbc..f1cb6be0d 100644 --- a/src/libtomahawk/playlist/trackview.cpp +++ b/src/libtomahawk/playlist/trackview.cpp @@ -378,7 +378,7 @@ TrackView::startDrag( Qt::DropActions supportedActions ) QDrag* drag = new QDrag( this ); drag->setMimeData( data ); - const QPixmap p = TomahawkUtils::createDragPixmap( indexes.count() ); + const QPixmap p = TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeTrack, indexes.count() ); drag->setPixmap( p ); drag->setHotSpot( QPoint( -20, -20 ) ); diff --git a/src/libtomahawk/playlist/treemodel.cpp b/src/libtomahawk/playlist/treemodel.cpp index 6e0e2552b..dc4e0caec 100644 --- a/src/libtomahawk/playlist/treemodel.cpp +++ b/src/libtomahawk/playlist/treemodel.cpp @@ -349,6 +349,7 @@ TreeModel::mimeData( const QModelIndexList &indexes ) const // lets try with album only fail = false; + resultData.clear(); foreach ( const QModelIndex& i, indexes) { if ( i.column() > 0 || indexes.contains( i.parent() ) ) @@ -380,6 +381,7 @@ TreeModel::mimeData( const QModelIndexList &indexes ) const // lets try with tracks only fail = false; + resultData.clear(); foreach ( const QModelIndex& i, indexes) { if ( i.column() > 0 || indexes.contains( i.parent() ) ) @@ -408,6 +410,7 @@ TreeModel::mimeData( const QModelIndexList &indexes ) const } // Ok... we have to use mixed + resultData.clear(); foreach ( const QModelIndex& i, indexes ) { if ( i.column() > 0 || indexes.contains( i.parent() ) ) diff --git a/src/libtomahawk/utils/querylabel.cpp b/src/libtomahawk/utils/querylabel.cpp index 33a671a2a..2ded49c42 100644 --- a/src/libtomahawk/utils/querylabel.cpp +++ b/src/libtomahawk/utils/querylabel.cpp @@ -568,7 +568,7 @@ QueryLabel::startDrag() mimeData->setData( "application/tomahawk.query.list", queryData ); QDrag *drag = new QDrag( this ); drag->setMimeData( mimeData ); - drag->setPixmap( TomahawkUtils::createDragPixmap() ); + drag->setPixmap( TomahawkUtils::createDragPixmap( TomahawkUtils::MediaTypeTrack ) ); // QPoint hotSpot = event->pos() - child->pos(); // drag->setHotSpot( hotSpot ); diff --git a/src/libtomahawk/utils/tomahawkutils.cpp b/src/libtomahawk/utils/tomahawkutils.cpp index 6b698821e..6e991c98e 100644 --- a/src/libtomahawk/utils/tomahawkutils.cpp +++ b/src/libtomahawk/utils/tomahawkutils.cpp @@ -307,7 +307,7 @@ alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity ) QPixmap -createDragPixmap( int itemCount ) +createDragPixmap( MediaType type, int itemCount ) { // If more than one item is dragged, align the items inside a // rectangular grid. The maximum grid size is limited to 5 x 5 items. @@ -344,11 +344,26 @@ createDragPixmap( int itemCount ) QPainter painter( &dragPixmap ); painter.setRenderHint( QPainter::Antialiasing ); + + QPixmap pixmap; + switch ( type ) + { + case MediaTypeArtist: + pixmap = QPixmap( ":/data/images/artist-icon.png" ).scaledToWidth( size, Qt::SmoothTransformation ); + break; + case MediaTypeAlbum: + pixmap = QPixmap( ":/data/images/album-icon.png" ).scaledToWidth( size, Qt::SmoothTransformation ); + break; + case MediaTypeTrack: + pixmap = QPixmap( QString( ":/data/images/track-icon-%2x%2.png" ).arg( size ) ); + break; + } + int x = 0; int y = 0; for( int i = 0; i < itemCount; ++i ) { - const QPixmap pixmap = QPixmap( QString( ":/data/images/track-icon-%2x%2.png" ).arg( size ) ); + painter.drawPixmap( x, y, pixmap ); x += size + 1; diff --git a/src/libtomahawk/utils/tomahawkutils.h b/src/libtomahawk/utils/tomahawkutils.h index 1fe759bc5..3b3d5ea39 100644 --- a/src/libtomahawk/utils/tomahawkutils.h +++ b/src/libtomahawk/utils/tomahawkutils.h @@ -40,6 +40,13 @@ class QNetworkAccessManager; namespace TomahawkUtils { + enum MediaType + { + MediaTypeArtist, + MediaTypeAlbum, + MediaTypeTrack + }; + class DLLEXPORT NetworkProxyFactory : public QNetworkProxyFactory { public: @@ -74,7 +81,7 @@ namespace TomahawkUtils DLLEXPORT QString extensionToMimetype( const QString& extension ); DLLEXPORT QColor alphaBlend( const QColor& colorFrom, const QColor& colorTo, float opacity ); - DLLEXPORT QPixmap createDragPixmap( int itemCount = 1 ); + DLLEXPORT QPixmap createDragPixmap( MediaType type, int itemCount = 1 ); DLLEXPORT void drawBackgroundAndNumbers( QPainter* p, const QString& text, const QRect& rect );