summaryrefslogtreecommitdiffstats
path: root/src/widget
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2014-01-29 01:40:48 -0500
committerRJ Ryan <rryan@mixxx.org>2014-02-13 23:31:31 -0500
commit3fa83e6f2d91ee63f40994c2c4171db09f04d983 (patch)
treee0810bb27026ed45d6caaac8ab64c78be31a9176 /src/widget
parent47970a144612700e9f1b31617f11c815c6b37cc7 (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.cpp2
-rw-r--r--src/widget/woverview.cpp21
-rw-r--r--src/widget/wspinny.cpp23
-rw-r--r--src/widget/wtracktableview.cpp32
-rw-r--r--src/widget/wwaveformviewer.cpp23
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) {