From 6aa75316232ef9317361ef701c8dcca041f499c7 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 20 Aug 2011 22:31:37 +0200 Subject: [PATCH] dropping "All items" and "Only local items" works now --- src/libtomahawk/dropjob.cpp | 22 +++++++++++++++++++++- src/libtomahawk/dropjob.h | 4 +++- src/sourcetree/items/playlistitems.cpp | 6 +++++- src/sourcetree/items/sourcetreeitem.h | 1 + src/sourcetree/sourcetreeview.cpp | 4 ++-- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/dropjob.cpp b/src/libtomahawk/dropjob.cpp index 3de1ea050..8fff1080d 100644 --- a/src/libtomahawk/dropjob.cpp +++ b/src/libtomahawk/dropjob.cpp @@ -96,9 +96,10 @@ DropJob::acceptsMimeData( const QMimeData* data, bool tracksOnly ) void -DropJob::tracksFromMimeData( const QMimeData* data, bool allowDuplicates ) +DropJob::tracksFromMimeData( const QMimeData* data, bool allowDuplicates, bool onlyLocal ) { m_allowDuplicates = allowDuplicates; + m_onlyLocal = onlyLocal; parseMimeData( data ); @@ -107,6 +108,9 @@ DropJob::tracksFromMimeData( const QMimeData* data, bool allowDuplicates ) if ( !allowDuplicates ) removeDuplicates(); + if ( onlyLocal ) + removeRemoteSources(); + emit tracks( m_resultList ); deleteLater(); } @@ -339,6 +343,9 @@ DropJob::onTracksAdded( const QList& tracksList ) if ( !m_allowDuplicates ) removeDuplicates(); + if ( m_onlyLocal ) + removeRemoteSources(); + emit tracks( m_resultList ); deleteLater(); } @@ -361,3 +368,16 @@ DropJob::removeDuplicates() } m_resultList = list; } + +void +DropJob::removeRemoteSources() +{ + QList< Tomahawk::query_ptr > list; + foreach ( const Tomahawk::query_ptr& item, m_resultList ) + { + if ( !item->results().isEmpty() && item->results().first()->collection()->source() ) + if ( item->results().first()->collection()->source()->isLocal() ) + list.append( item ); + } + m_resultList = list; +} diff --git a/src/libtomahawk/dropjob.h b/src/libtomahawk/dropjob.h index 186417f9b..aab952cb0 100644 --- a/src/libtomahawk/dropjob.h +++ b/src/libtomahawk/dropjob.h @@ -43,7 +43,7 @@ public: */ static bool acceptsMimeData( const QMimeData* data, bool tracksOnly = true ); static QStringList mimeTypes(); - void tracksFromMimeData( const QMimeData* data, bool allowDuplicates = false ); + void tracksFromMimeData( const QMimeData* data, bool allowDuplicates = false, bool onlyLocal = false ); signals: /// QMimeData parsing results @@ -66,9 +66,11 @@ private: QList< Tomahawk::query_ptr > tracksFromMixedData( const QMimeData* d ); void removeDuplicates(); + void removeRemoteSources(); int m_queryCount; bool m_allowDuplicates; + bool m_onlyLocal; QList< Tomahawk::query_ptr > m_resultList; }; diff --git a/src/sourcetree/items/playlistitems.cpp b/src/sourcetree/items/playlistitems.cpp index 1e60efa9b..b3a55ef92 100644 --- a/src/sourcetree/items/playlistitems.cpp +++ b/src/sourcetree/items/playlistitems.cpp @@ -158,7 +158,11 @@ PlaylistItem::dropMimeData( const QMimeData* data, Qt::DropAction action ) DropJob *dj = new DropJob(); connect( dj, SIGNAL( tracks( QList< Tomahawk::query_ptr > ) ), this, SLOT( parsedDroppedTracks( QList< Tomahawk::query_ptr > ) ) ); - dj->tracksFromMimeData( data ); + + if ( dropType() == DropTypeLocalItems ) + dj->tracksFromMimeData( data, false, true ); + else + dj->tracksFromMimeData( data, false, false ); // TODO cant' know if it works or not yet... return true; diff --git a/src/sourcetree/items/sourcetreeitem.h b/src/sourcetree/items/sourcetreeitem.h index 4c5ea93f8..2c174f220 100644 --- a/src/sourcetree/items/sourcetreeitem.h +++ b/src/sourcetree/items/sourcetreeitem.h @@ -68,6 +68,7 @@ public: virtual int IDValue() const { return 0; } virtual DropTypes supportedDropTypes() const { return DropTypesNone; } virtual void setDropType( DropType type ) { m_dropType = type; } + virtual DropType dropType() const { return m_dropType; } /// don't call me unless you are a sourcetreeitem. i prefer this to making everyone a friend void beginRowsAdded( int from, int to ) { emit beginChildRowsAdded( from, to ); } diff --git a/src/sourcetree/sourcetreeview.cpp b/src/sourcetree/sourcetreeview.cpp index feaf44efb..fd71166c8 100644 --- a/src/sourcetree/sourcetreeview.cpp +++ b/src/sourcetree/sourcetreeview.cpp @@ -501,11 +501,11 @@ SourceTreeView::dropEvent( QDropEvent* event ) item->setDropType( m_delegate->hoveredDropType() ); qDebug() << "dropType is " << m_delegate->hoveredDropType(); - m_delegate->setDropHoverIndex( QModelIndex() ); - dataChanged( index, index ); QTreeView::dropEvent( event ); m_dragging = false; m_dropIndex = QPersistentModelIndex(); + m_delegate->setDropHoverIndex( QModelIndex() ); + dataChanged( index, index ); }