From 8c4b4cd5a923105a571d1f0551b729beb68e7640 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Tue, 16 Aug 2011 23:33:41 +0200 Subject: [PATCH] added drag capabilities to albumview ins sourceinfowidget and welcomewidget --- src/libtomahawk/dropjob.cpp | 10 +++- src/libtomahawk/dropjob.h | 1 + src/libtomahawk/playlist/albummodel.cpp | 6 ++- src/libtomahawk/playlist/albumview.cpp | 53 +++++++++---------- src/libtomahawk/playlist/albumview.h | 5 -- .../widgets/infowidgets/sourceinfowidget.ui | 19 +++++-- src/libtomahawk/widgets/welcomewidget.ui | 21 +++++--- 7 files changed, 66 insertions(+), 49 deletions(-) diff --git a/src/libtomahawk/dropjob.cpp b/src/libtomahawk/dropjob.cpp index bf0c90e80..be59f0166 100644 --- a/src/libtomahawk/dropjob.cpp +++ b/src/libtomahawk/dropjob.cpp @@ -32,6 +32,7 @@ using namespace Tomahawk; DropJob::DropJob( QObject *parent ) : QObject( parent ) + , m_queryCount( 0 ) { } @@ -187,8 +188,11 @@ DropJob::tracksFromAlbumMetaData( const QMimeData *data ) artist_ptr artistPtr = Artist::get( artist ); album_ptr albumPtr = Album::get( artistPtr, album ); if ( albumPtr->tracks().isEmpty() ) + { connect( albumPtr.data(), SIGNAL( tracksAdded( QList ) ), SLOT( onTracksAdded( QList ) ) ); + m_queryCount++; + } else queries << albumPtr->tracks(); } @@ -209,8 +213,11 @@ DropJob::tracksFromArtistMetaData( const QMimeData *data ) artist_ptr artistPtr = Artist::get( artist ); if ( artistPtr->tracks().isEmpty() ) + { connect( artistPtr.data(), SIGNAL( tracksAdded( QList ) ), SLOT( onTracksAdded( QList ) ) ); + m_queryCount++; + } else queries << artistPtr->tracks(); } @@ -309,5 +316,6 @@ DropJob::onTracksAdded( const QList& tracksList ) { qDebug() << "here i am with" << tracksList.count() << "tracks"; emit tracks( tracksList ); - deleteLater(); + if ( --m_queryCount == 0 ) + deleteLater(); } diff --git a/src/libtomahawk/dropjob.h b/src/libtomahawk/dropjob.h index 9c1b40fcf..ea48ccea3 100644 --- a/src/libtomahawk/dropjob.h +++ b/src/libtomahawk/dropjob.h @@ -63,6 +63,7 @@ private: QList< Tomahawk::query_ptr > tracksFromAlbumMetaData( const QMimeData* d ); QList< Tomahawk::query_ptr > tracksFromMixedData( const QMimeData* d ); + int m_queryCount; }; #endif // DROPJOB_H diff --git a/src/libtomahawk/playlist/albummodel.cpp b/src/libtomahawk/playlist/albummodel.cpp index d259df35e..4e84ca138 100644 --- a/src/libtomahawk/playlist/albummodel.cpp +++ b/src/libtomahawk/playlist/albummodel.cpp @@ -159,6 +159,7 @@ AlbumModel::headerData( int section, Qt::Orientation orientation, int role ) con Qt::ItemFlags AlbumModel::flags( const QModelIndex& index ) const { + qDebug() << "asking for flags for index" << index; Qt::ItemFlags defaultFlags = QAbstractItemModel::flags( index ); if ( index.isValid() && index.column() == 0 ) @@ -195,12 +196,13 @@ AlbumModel::mimeData( const QModelIndexList &indexes ) const if ( item ) { const album_ptr& album = item->album(); - queryStream << qlonglong( &album ); + queryStream << album->artist()->name(); + queryStream << album->name(); } } QMimeData* mimeData = new QMimeData(); - mimeData->setData( "application/tomahawk.query.list", queryData ); + mimeData->setData( "application/tomahawk.metadata.album", queryData ); return mimeData; } diff --git a/src/libtomahawk/playlist/albumview.cpp b/src/libtomahawk/playlist/albumview.cpp index 59ea90a7d..16eb7e0a8 100644 --- a/src/libtomahawk/playlist/albumview.cpp +++ b/src/libtomahawk/playlist/albumview.cpp @@ -188,27 +188,6 @@ AlbumView::onScrollTimeout() } -void -AlbumView::dragEnterEvent( QDragEnterEvent* event ) -{ - QListView::dragEnterEvent( event ); -} - - -void -AlbumView::dragMoveEvent( QDragMoveEvent* event ) -{ - QListView::dragMoveEvent( event ); -} - - -void -AlbumView::dropEvent( QDropEvent* event ) -{ - QListView::dropEvent( event ); -} - - void AlbumView::paintEvent( QPaintEvent* event ) { @@ -227,14 +206,30 @@ AlbumView::onFilterChanged( const QString& ) void AlbumView::startDrag( Qt::DropActions supportedActions ) { - Q_UNUSED( supportedActions ); -} + QList pindexes; + QModelIndexList indexes; + foreach( const QModelIndex& idx, selectedIndexes() ) + { + if ( ( m_proxyModel->flags( idx ) & Qt::ItemIsDragEnabled ) ) + { + indexes << idx; + pindexes << idx; + } + } + if ( indexes.count() == 0 ) + return; -// Inspired from dolphin's draganddrophelper.cpp -QPixmap -AlbumView::createDragPixmap( int itemCount ) const -{ - Q_UNUSED( itemCount ); - return QPixmap(); + qDebug() << "Dragging" << indexes.count() << "indexes"; + QMimeData* data = m_proxyModel->mimeData( indexes ); + if ( !data ) + return; + + QDrag* drag = new QDrag( this ); + drag->setMimeData( data ); + const QPixmap p = TomahawkUtils::createDragPixmap( indexes.count() ); + drag->setPixmap( p ); + drag->setHotSpot( QPoint( -20, -20 ) ); + + Qt::DropAction action = drag->exec( supportedActions, Qt::CopyAction ); } diff --git a/src/libtomahawk/playlist/albumview.h b/src/libtomahawk/playlist/albumview.h index 89bd72949..7b2e766e5 100644 --- a/src/libtomahawk/playlist/albumview.h +++ b/src/libtomahawk/playlist/albumview.h @@ -60,9 +60,6 @@ public slots: protected: virtual void startDrag( Qt::DropActions supportedActions ); - virtual void dragEnterEvent( QDragEnterEvent* event ); - virtual void dragMoveEvent( QDragMoveEvent* event ); - virtual void dropEvent( QDropEvent* event ); void paintEvent( QPaintEvent* event ); @@ -73,8 +70,6 @@ private slots: void onScrollTimeout(); private: - QPixmap createDragPixmap( int itemCount ) const; - AlbumModel* m_model; AlbumProxyModel* m_proxyModel; // PlaylistItemDelegate* m_delegate; diff --git a/src/libtomahawk/widgets/infowidgets/sourceinfowidget.ui b/src/libtomahawk/widgets/infowidgets/sourceinfowidget.ui index 42edd0331..5747377cd 100644 --- a/src/libtomahawk/widgets/infowidgets/sourceinfowidget.ui +++ b/src/libtomahawk/widgets/infowidgets/sourceinfowidget.ui @@ -40,6 +40,15 @@ 192 + + true + + + QAbstractItemView::DragDrop + + + QAbstractItemView::ExtendedSelection + @@ -84,16 +93,16 @@ QLabel
widgets/HeaderLabel.h
- - PlaylistView - QTreeView -
playlist/playlistview.h
-
AlbumView QListView
playlist/albumview.h
+ + PlaylistView + QTreeView +
playlist/playlistview.h
+
CollectionView QTreeView diff --git a/src/libtomahawk/widgets/welcomewidget.ui b/src/libtomahawk/widgets/welcomewidget.ui index 489ff9fb2..58cfeda28 100644 --- a/src/libtomahawk/widgets/welcomewidget.ui +++ b/src/libtomahawk/widgets/welcomewidget.ui @@ -30,7 +30,14 @@ - + + + true + + + QAbstractItemView::ExtendedSelection + + @@ -49,7 +56,7 @@ - + @@ -80,16 +87,16 @@ QLabel
widgets/HeaderLabel.h
- - PlaylistView - QTreeView -
playlist/playlistview.h
-
AlbumView QListView
playlist/albumview.h
+ + PlaylistView + QTreeView +
playlist/playlistview.h
+
PlaylistWidget QListWidget