diff options
-rw-r--r-- | src/mixer/playermanager.cpp | 11 | ||||
-rw-r--r-- | src/mixer/playermanager.h | 1 | ||||
-rw-r--r-- | src/skin/legacyskinparser.cpp | 12 | ||||
-rw-r--r-- | src/util/dnd.h | 18 | ||||
-rw-r--r-- | src/widget/wcoverart.cpp | 14 | ||||
-rw-r--r-- | src/widget/wcoverart.h | 1 | ||||
-rw-r--r-- | src/widget/woverview.cpp | 14 | ||||
-rw-r--r-- | src/widget/woverview.h | 1 | ||||
-rw-r--r-- | src/widget/wspinny.cpp | 14 | ||||
-rw-r--r-- | src/widget/wspinny.h | 1 | ||||
-rw-r--r-- | src/widget/wtrackproperty.cpp | 14 | ||||
-rw-r--r-- | src/widget/wtrackproperty.h | 1 | ||||
-rw-r--r-- | src/widget/wtracktext.cpp | 14 | ||||
-rw-r--r-- | src/widget/wtracktext.h | 1 | ||||
-rw-r--r-- | src/widget/wwaveformviewer.cpp | 14 | ||||
-rw-r--r-- | src/widget/wwaveformviewer.h | 1 |
16 files changed, 108 insertions, 24 deletions
diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp index aa05ba3341..6938bc871b 100644 --- a/src/mixer/playermanager.cpp +++ b/src/mixer/playermanager.cpp @@ -556,6 +556,17 @@ Auxiliary* PlayerManager::getAuxiliary(unsigned int auxiliary) const { return m_auxiliaries[auxiliary - 1]; } +void PlayerManager::slotCloneDeck(QString source_group, QString target_group) { + BaseTrackPlayer* pPlayer = getPlayer(target_group); + + if (pPlayer == NULL) { + qWarning() << "Invalid group argument " << target_group << " to slotCloneDeck."; + return; + } + + pPlayer->slotCloneDeck(source_group); +} + void PlayerManager::slotLoadTrackToPlayer(TrackPointer pTrack, QString group, bool play) { // Do not lock mutex in this method unless it is changed to access // PlayerManager state. diff --git a/src/mixer/playermanager.h b/src/mixer/playermanager.h index 3fc42e375a..a80731c041 100644 --- a/src/mixer/playermanager.h +++ b/src/mixer/playermanager.h @@ -182,6 +182,7 @@ class PlayerManager : public QObject, public PlayerManagerInterface { // Slots for loading tracks into a Player, which is either a Sampler or a Deck void slotLoadTrackToPlayer(TrackPointer pTrack, QString group, bool play = false); void slotLoadToPlayer(QString location, QString group); + void slotCloneDeck(QString source_group, QString target_group); // Slots for loading tracks to decks void slotLoadTrackIntoNextAvailableDeck(TrackPointer pTrack); diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp index 8b37001627..c8778b3aed 100644 --- a/src/skin/legacyskinparser.cpp +++ b/src/skin/legacyskinparser.cpp @@ -937,6 +937,8 @@ QWidget* LegacySkinParser::parseOverview(const QDomElement& node) { connect(overviewWidget, SIGNAL(trackDropped(QString, QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString, QString))); + connect(overviewWidget, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); commonWidgetSetup(node, overviewWidget); overviewWidget->setup(node, *m_pContext); @@ -987,6 +989,8 @@ QWidget* LegacySkinParser::parseVisual(const QDomElement& node) { connect(viewer, SIGNAL(trackDropped(QString, QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString, QString))); + connect(viewer, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); // if any already loaded viewer->slotTrackLoaded(pPlayer->getLoadedTrack()); @@ -1012,6 +1016,8 @@ QWidget* LegacySkinParser::parseText(const QDomElement& node) { p, SLOT(slotLoadingTrack(TrackPointer, TrackPointer))); connect(p, SIGNAL(trackDropped(QString,QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString,QString))); + connect(p, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); TrackPointer pTrack = pPlayer->getLoadedTrack(); if (pTrack) { @@ -1039,6 +1045,8 @@ QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) { p, SLOT(slotLoadingTrack(TrackPointer, TrackPointer))); connect(p, SIGNAL(trackDropped(QString,QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString,QString))); + connect(p, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); TrackPointer pTrack = pPlayer->getLoadedTrack(); if (pTrack) { @@ -1189,6 +1197,8 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) { spinny, SLOT(swap())); connect(spinny, SIGNAL(trackDropped(QString, QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString, QString))); + connect(spinny, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); spinny->setup(node, *m_pContext); spinny->installEventFilter(m_pKeyboard); @@ -1243,6 +1253,8 @@ QWidget* LegacySkinParser::parseCoverArt(const QDomElement& node) { } else if (pPlayer != nullptr) { connect(pCoverArt, SIGNAL(trackDropped(QString, QString)), m_pPlayerManager, SLOT(slotLoadToPlayer(QString, QString))); + connect(pCoverArt, SIGNAL(cloneDeck(QString,QString)), + m_pPlayerManager, SLOT(slotCloneDeck(QString,QString))); } return pCoverArt; diff --git a/src/util/dnd.h b/src/util/dnd.h index 9b08fc8138..462fae94e6 100644 --- a/src/util/dnd.h +++ b/src/util/dnd.h @@ -96,6 +96,24 @@ class DragAndDropHelper { "AllowTrackLoadToPlayingDeck")).toInt(); } + static bool allowDeckCloneAttempt(const QMimeData& mimeData, + const QString& group) { + // only allow clones to decks + if (!PlayerManager::isDeckGroup(group, NULL)) { + return false; + } + + if (!mimeData.hasText() || + // prevent cloning to ourself + mimeData.text() == group || + // only allow clone from decks + !PlayerManager::isDeckGroup(mimeData.text(), NULL)) { + return false; + } + + return true; + } + static bool dragEnterAccept(const QMimeData& mimeData, const QString& sourceIdentifier, bool firstOnly, diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp index baa7d2cfe4..d0195f4c42 100644 --- a/src/widget/wcoverart.cpp +++ b/src/widget/wcoverart.cpp @@ -264,12 +264,18 @@ void WCoverArt::dropEvent(QDropEvent *event) { // accept track drops. if (!m_group.isEmpty() && DragAndDropHelper::allowLoadToPlayer(m_group, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_group, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_group)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + emit(cloneDeck(event->mimeData()->text(), m_group)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_group, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + return; + } } } event->ignore(); diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h index e4cdf2f91c..40e4737191 100644 --- a/src/widget/wcoverart.h +++ b/src/widget/wcoverart.h @@ -33,6 +33,7 @@ class WCoverArt : public QWidget, public WBaseWidget { signals: void trackDropped(QString filename, QString group); + void cloneDeck(QString source_group, QString target_group); private slots: void slotCoverFound(const QObject* pRequestor, diff --git a/src/widget/woverview.cpp b/src/widget/woverview.cpp index 3bf5adf313..b50501b55a 100644 --- a/src/widget/woverview.cpp +++ b/src/widget/woverview.cpp @@ -600,12 +600,18 @@ void WOverview::dragEnterEvent(QDragEnterEvent* event) { void WOverview::dropEvent(QDropEvent* event) { if (DragAndDropHelper::allowLoadToPlayer(m_group, m_playControl->get() > 0.0, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_group, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_group)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + emit(cloneDeck(event->mimeData()->text(), m_group)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_group, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + return; + } } } event->ignore(); diff --git a/src/widget/woverview.h b/src/widget/woverview.h index 625a5bbf26..6d9483862a 100644 --- a/src/widget/woverview.h +++ b/src/widget/woverview.h @@ -42,6 +42,7 @@ class WOverview : public WWidget { signals: void trackDropped(QString filename, QString group); + void cloneDeck(QString source_group, QString target_group); protected: WOverview( diff --git a/src/widget/wspinny.cpp b/src/widget/wspinny.cpp index 06090d2631..1cec5a1389 100644 --- a/src/widget/wspinny.cpp +++ b/src/widget/wspinny.cpp @@ -688,12 +688,18 @@ void WSpinny::dragEnterEvent(QDragEnterEvent* event) { void WSpinny::dropEvent(QDropEvent * event) { if (DragAndDropHelper::allowLoadToPlayer(m_group, m_pPlay->get() > 0.0, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_group, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_group)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + emit(cloneDeck(event->mimeData()->text(), m_group)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_group, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_group)); + return; + } } } event->ignore(); diff --git a/src/widget/wspinny.h b/src/widget/wspinny.h index ef520c534a..f80c5c4f73 100644 --- a/src/widget/wspinny.h +++ b/src/widget/wspinny.h @@ -56,6 +56,7 @@ class WSpinny : public QGLWidget, public WBaseWidget, public VinylSignalQualityL signals: void trackDropped(QString filename, QString group); + void cloneDeck(QString source_group, QString target_group); protected: //QWidget: diff --git a/src/widget/wtrackproperty.cpp b/src/widget/wtrackproperty.cpp index 6f83a4561b..4b4e9bec43 100644 --- a/src/widget/wtrackproperty.cpp +++ b/src/widget/wtrackproperty.cpp @@ -67,12 +67,18 @@ void WTrackProperty::dragEnterEvent(QDragEnterEvent *event) { void WTrackProperty::dropEvent(QDropEvent *event) { if (DragAndDropHelper::allowLoadToPlayer(m_pGroup, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_pGroup, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_pGroup)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + emit(cloneDeck(event->mimeData()->text(), m_pGroup)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_pGroup, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + return; + } } } event->ignore(); diff --git a/src/widget/wtrackproperty.h b/src/widget/wtrackproperty.h index c50c8b9177..8653832ecc 100644 --- a/src/widget/wtrackproperty.h +++ b/src/widget/wtrackproperty.h @@ -19,6 +19,7 @@ class WTrackProperty : public WLabel { signals: void trackDropped(QString filename, QString group); + void cloneDeck(QString source_group, QString target_group); public slots: void slotTrackLoaded(TrackPointer track); diff --git a/src/widget/wtracktext.cpp b/src/widget/wtracktext.cpp index 5c843229cd..f3314d06e6 100644 --- a/src/widget/wtracktext.cpp +++ b/src/widget/wtracktext.cpp @@ -56,12 +56,18 @@ void WTrackText::dragEnterEvent(QDragEnterEvent *event) { void WTrackText::dropEvent(QDropEvent *event) { if (DragAndDropHelper::allowLoadToPlayer(m_pGroup, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_pGroup, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_pGroup)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + emit(cloneDeck(event->mimeData()->text(), m_pGroup)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_pGroup, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + return; + } } } event->ignore(); diff --git a/src/widget/wtracktext.h b/src/widget/wtracktext.h index 2cd0977b31..2fd1122039 100644 --- a/src/widget/wtracktext.h +++ b/src/widget/wtracktext.h @@ -16,6 +16,7 @@ class WTrackText : public WLabel { signals: void trackDropped(QString fileName, QString group); + void cloneDeck(QString source_group, QString target_group); public slots: void slotTrackLoaded(TrackPointer track); diff --git a/src/widget/wwaveformviewer.cpp b/src/widget/wwaveformviewer.cpp index 5074825475..1cbfe80751 100644 --- a/src/widget/wwaveformviewer.cpp +++ b/src/widget/wwaveformviewer.cpp @@ -161,12 +161,18 @@ void WWaveformViewer::dragEnterEvent(QDragEnterEvent* event) { void WWaveformViewer::dropEvent(QDropEvent* event) { if (DragAndDropHelper::allowLoadToPlayer(m_pGroup, m_pConfig)) { - QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( - *event->mimeData(), m_pGroup, true, false); - if (!files.isEmpty()) { + if (DragAndDropHelper::allowDeckCloneAttempt(*event->mimeData(), m_pGroup)) { event->accept(); - emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + emit(cloneDeck(event->mimeData()->text(), m_pGroup)); return; + } else { + QList<QFileInfo> files = DragAndDropHelper::dropEventFiles( + *event->mimeData(), m_pGroup, true, false); + if (!files.isEmpty()) { + event->accept(); + emit(trackDropped(files.at(0).absoluteFilePath(), m_pGroup)); + return; + } } } event->ignore(); diff --git a/src/widget/wwaveformviewer.h b/src/widget/wwaveformviewer.h index 7d090080be..0609529c3a 100644 --- a/src/widget/wwaveformviewer.h +++ b/src/widget/wwaveformviewer.h @@ -34,6 +34,7 @@ class WWaveformViewer : public WWidget { signals: void trackDropped(QString filename, QString group); + void cloneDeck(QString source_group, QString target_group); public slots: void slotTrackLoaded(TrackPointer track); |