diff options
Diffstat (limited to 'src/qml/qmlplayermanagerproxy.cpp')
-rw-r--r-- | src/qml/qmlplayermanagerproxy.cpp | 49 |
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 |