diff options
author | RJ Ryan <rryan@mixxx.org> | 2014-01-29 01:40:48 -0500 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2014-02-13 23:31:31 -0500 |
commit | 3fa83e6f2d91ee63f40994c2c4171db09f04d983 (patch) | |
tree | e0810bb27026ed45d6caaac8ab64c78be31a9176 /src/widget | |
parent | 47970a144612700e9f1b31617f11c815c6b37cc7 (diff) |
Handle creation of scoped bookmarks on drop of files in Mixxx.
* Clean up / unify processing of dropped URLs across all drop handlers.
* Support dropping of playlists on the analysis, playlists, crate, autodj, and
track table sections of the library (previously was only supported in
playlists).
Diffstat (limited to 'src/widget')
-rw-r--r-- | src/widget/wlibrarysidebar.cpp | 2 | ||||
-rw-r--r-- | src/widget/woverview.cpp | 21 | ||||
-rw-r--r-- | src/widget/wspinny.cpp | 23 | ||||
-rw-r--r-- | src/widget/wtracktableview.cpp | 32 | ||||
-rw-r--r-- | src/widget/wwaveformviewer.cpp | 23 |
5 files changed, 41 insertions, 60 deletions
diff --git a/src/widget/wlibrarysidebar.cpp b/src/widget/wlibrarysidebar.cpp index f650eb3462..4d1a0625d6 100644 --- a/src/widget/wlibrarysidebar.cpp +++ b/src/widget/wlibrarysidebar.cpp @@ -111,7 +111,6 @@ void WLibrarySidebar::timerEvent(QTimerEvent *event) { // Drag-and-drop "drop" event. Occurs when something is dropped onto the track sources view void WLibrarySidebar::dropEvent(QDropEvent * event) { if (event->mimeData()->hasUrls()) { - QList<QUrl> urls(event->mimeData()->urls()); // Drag and drop within this widget if ((event->source() == this) && (event->possibleActions() & Qt::MoveAction)) { @@ -127,6 +126,7 @@ void WLibrarySidebar::dropEvent(QDropEvent * event) { QModelIndex destIndex = indexAt(event->pos()); // event->source() will return NULL if something is droped from // a different application + QList<QUrl> urls(event->mimeData()->urls()); if (sidebarModel->dropAccept(destIndex, urls, event->source())) { event->acceptProposedAction(); } else { diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 134cf76d2c..b02cab4e5b 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -27,6 +27,7 @@ #include "trackinfoobject.h" #include "mathstuff.h" #include "util/timer.h" +#include "util/dnd.h" #include "waveform/waveform.h" #include "waveform/waveformwidgetfactory.h" @@ -499,18 +500,14 @@ void WOverview::dragEnterEvent(QDragEnterEvent* event) { } void WOverview::dropEvent(QDropEvent* event) { - if (event->mimeData()->hasUrls() && - event->mimeData()->urls().size() > 0) { - QList<QUrl> urls(event->mimeData()->urls()); - QUrl url = urls.first(); - QString name = url.toLocalFile(); - //If the file is on a network share, try just converting the URL to a string... - if (name == "") { - name = url.toString(); + if (event->mimeData()->hasUrls()) { + QList<QFileInfo> files = DragAndDropHelper::supportedTracksFromUrls( + event->mimeData()->urls(), true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).canonicalFilePath(), m_group)); + return; } - event->accept(); - emit(trackDropped(name, m_group)); - } else { - event->ignore(); } + event->ignore(); } diff --git a/src/widget/wspinny.cpp b/src/widget/wspinny.cpp index 212ab27561..8036acbd27 100644 --- a/src/widget/wspinny.cpp +++ b/src/widget/wspinny.cpp @@ -15,6 +15,7 @@ #include "widget/wspinny.h" #include "vinylcontrol/vinylcontrolmanager.h" #include "vinylcontrol/vinylcontrol.h" +#include "util/dnd.h" WSpinny::WSpinny(QWidget* parent, VinylControlManager* pVCMan) : QGLWidget(parent, SharedGLContext::getWidget()), @@ -498,19 +499,15 @@ void WSpinny::dragEnterEvent(QDragEnterEvent * event) } } -void WSpinny::dropEvent(QDropEvent * event) -{ +void WSpinny::dropEvent(QDropEvent * event) { if (event->mimeData()->hasUrls()) { - QList<QUrl> urls(event->mimeData()->urls()); - QUrl url = urls.first(); - QString name = url.toLocalFile(); - //If the file is on a network share, try just converting the URL to a string... - if (name == "") - name = url.toString(); - - event->accept(); - emit(trackDropped(name, m_group)); - } else { - event->ignore(); + QList<QFileInfo> files = DragAndDropHelper::supportedTracksFromUrls( + event->mimeData()->urls(), true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).canonicalFilePath(), m_group)); + return; + } } + event->ignore(); } diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index 0d7d44be27..3091f30038 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -16,6 +16,7 @@ #include "dlgtrackinfo.h" #include "soundsourceproxy.h" #include "playermanager.h" +#include "util/dnd.h" WTrackTableView::WTrackTableView(QWidget * parent, ConfigObject<ConfigValue> * pConfig, @@ -902,20 +903,6 @@ void WTrackTableView::dropEvent(QDropEvent * event) { event->ignore(); return; } - QList<QUrl> urls(event->mimeData()->urls()); - QUrl url; - QModelIndex selectedIndex; //Index of a selected track (iterator) - - // Filter out invalid URLs (eg. files that aren't supported audio filetypes, etc.) - QRegExp fileRx(SoundSourceProxy::supportedFileExtensionsRegex(), - Qt::CaseInsensitive); - for (int i = 0; i < urls.size(); ++i) { - if (fileRx.indexIn(urls.at(i).path()) == -1) { - // remove invalid urls and decrease i because the size of - // urls has changed. - urls.removeAt(--i); - } - } // Save the vertical scrollbar position. Adding new tracks and moving tracks in // the SQL data models causes a select() (ie. generation of a new result set), @@ -1038,9 +1025,18 @@ void WTrackTableView::dropEvent(QDropEvent * event) { // clears them) this->selectionModel()->clear(); + // Add all the dropped URLs/tracks to the track model (playlist/crate) + QList<QFileInfo> fileList = DragAndDropHelper::supportedTracksFromUrls( + event->mimeData()->urls(), false, true); + + QList<QString> fileLocationList; + foreach (const QFileInfo& fileInfo, fileList) { + fileLocationList.append(fileInfo.canonicalFilePath()); + } + // Drag-and-drop from an external application // eg. dragging a track from Windows Explorer onto the track table. - int numNewRows = urls.count(); + int numNewRows = fileLocationList.count(); // Have to do this here because the index is invalid after // addTrack @@ -1061,12 +1057,6 @@ void WTrackTableView::dropEvent(QDropEvent * event) { selectionStartRow = model()->rowCount(); } - // Add all the dropped URLs/tracks to the track model (playlist/crate) - QList<QString> fileLocationList; - foreach(url, urls) { - QString file(url.toLocalFile()); - fileLocationList.append(file); - } // calling the addTracks returns number of failed additions int tracksAdded = trackModel->addTracks(destIndex, fileLocationList); diff --git a/src/widget/wwaveformviewer.cpp b/src/widget/wwaveformviewer.cpp index f61368ffe8..ff0ed311b7 100644 --- a/src/widget/wwaveformviewer.cpp +++ b/src/widget/wwaveformviewer.cpp @@ -13,6 +13,7 @@ #include "waveform/widgets/waveformwidgetabstract.h" #include "widget/wwaveformviewer.h" #include "waveform/waveformwidgetfactory.h" +#include "util/dnd.h" WWaveformViewer::WWaveformViewer(const char *group, ConfigObject<ConfigValue>* pConfig, QWidget * parent) : WWidget(parent), @@ -161,20 +162,16 @@ void WWaveformViewer::dragEnterEvent(QDragEnterEvent * event) { } void WWaveformViewer::dropEvent(QDropEvent * event) { - if (event->mimeData()->hasUrls() && - event->mimeData()->urls().size() > 0) { - QList<QUrl> urls(event->mimeData()->urls()); - QUrl url = urls.first(); - QString name = url.toLocalFile(); - //If the file is on a network share, try just converting the URL to a string... - if (name == "") - name = url.toString(); - - event->accept(); - emit(trackDropped(name, m_pGroup)); - } else { - event->ignore(); + if (event->mimeData()->hasUrls()) { + QList<QFileInfo> files = DragAndDropHelper::supportedTracksFromUrls( + event->mimeData()->urls(), true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).canonicalFilePath(), m_pGroup)); + return; + } } + event->ignore(); } void WWaveformViewer::onTrackLoaded( TrackPointer track) { |