summaryrefslogtreecommitdiffstats
path: root/src/qml/qmlplayermanagerproxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qmlplayermanagerproxy.cpp')
-rw-r--r--src/qml/qmlplayermanagerproxy.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/qml/qmlplayermanagerproxy.cpp b/src/qml/qmlplayermanagerproxy.cpp
new file mode 100644
index 0000000000..b64053ce71
--- /dev/null
+++ b/src/qml/qmlplayermanagerproxy.cpp
@@ -0,0 +1,49 @@
+#include "qml/qmlplayermanagerproxy.h"
+
+#include <QQmlEngine>
+
+#include "mixer/playermanager.h"
+#include "qml/qmlplayerproxy.h"
+
+namespace mixxx {
+namespace skin {
+namespace qml {
+
+QmlPlayerManagerProxy::QmlPlayerManagerProxy(
+ std::shared_ptr<PlayerManager> pPlayerManager, QObject* parent)
+ : QObject(parent), m_pPlayerManager(pPlayerManager) {
+ connect(this,
+ &QmlPlayerManagerProxy::loadLocationToPlayer,
+ m_pPlayerManager.get(),
+ &PlayerManager::loadLocationToPlayer);
+}
+
+QObject* QmlPlayerManagerProxy::getPlayer(const QString& group) {
+ BaseTrackPlayer* pPlayer = m_pPlayerManager->getPlayer(group);
+ if (!pPlayer) {
+ qWarning() << "PlayerManagerProxy failed to find player for group" << group;
+ return nullptr;
+ }
+
+ // Don't set a parent here, so that the QML engine deletes the object when
+ // the corresponding JS object is garbage collected.
+ QmlPlayerProxy* pPlayerProxy = new QmlPlayerProxy(pPlayer);
+ QQmlEngine::setObjectOwnership(pPlayerProxy, QQmlEngine::JavaScriptOwnership);
+ connect(pPlayerProxy,
+ &QmlPlayerProxy::loadTrackFromLocationRequested,
+ this,
+ [this, group](const QString& trackLocation) {
+ emit loadLocationToPlayer(trackLocation, group);
+ });
+ connect(pPlayerProxy,
+ &QmlPlayerProxy::cloneFromGroup,
+ this,
+ [this, group](const QString& sourceGroup) {
+ m_pPlayerManager->slotCloneDeck(sourceGroup, group);
+ });
+ return pPlayerProxy;
+}
+
+} // namespace qml
+} // namespace skin
+} // namespace mixxx