diff options
Diffstat (limited to 'src/qml/qmleffectsmanagerproxy.cpp')
-rw-r--r-- | src/qml/qmleffectsmanagerproxy.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/qml/qmleffectsmanagerproxy.cpp b/src/qml/qmleffectsmanagerproxy.cpp new file mode 100644 index 0000000000..8ea0624a07 --- /dev/null +++ b/src/qml/qmleffectsmanagerproxy.cpp @@ -0,0 +1,60 @@ +#include "qml/qmleffectsmanagerproxy.h" + +#include <QQmlEngine> +#include <memory> + +#include "effects/effectchainslot.h" +#include "effects/effectrack.h" +#include "qml/qmleffectslotproxy.h" +#include "qml/qmlvisibleeffectsmodel.h" + +namespace mixxx { +namespace skin { +namespace qml { + +QmlEffectsManagerProxy::QmlEffectsManagerProxy( + std::shared_ptr<EffectsManager> pEffectsManager, QObject* parent) + : QObject(parent), + m_pEffectsManager(pEffectsManager), + m_pVisibleEffectsModel( + new QmlVisibleEffectsModel(pEffectsManager, this)) { +} + +QmlEffectSlotProxy* QmlEffectsManagerProxy::getEffectSlot( + int rackNumber, int unitNumber, int effectNumber) const { + // Subtract 1 from all numbers, because internally our indices are + // zero-based + const int rackIndex = rackNumber - 1; + const auto pRack = m_pEffectsManager->getStandardEffectRack(rackIndex); + if (!pRack) { + qWarning() << "QmlEffectsManagerProxy: Effect Rack" << rackNumber << "not found!"; + return nullptr; + } + + const int unitIndex = unitNumber - 1; + const auto pEffectUnit = pRack->getEffectChainSlot(unitIndex); + if (!pEffectUnit) { + qWarning() << "QmlEffectsManagerProxy: Effect Unit" << unitNumber + << "in Rack" << rackNumber << "not found!"; + return nullptr; + } + + const int effectIndex = effectNumber - 1; + const auto pEffectSlot = pEffectUnit->getEffectSlot(effectIndex); + if (!pEffectSlot) { + qWarning() << "QmlEffectsManagerProxy: Effect Slot" << effectNumber + << "in Unit" << unitNumber << "of Rack" << rackNumber + << "not found!"; + return nullptr; + } + + // Don't set a parent here, so that the QML engine deletes the object when + // the corresponding JS object is garbage collected. + QmlEffectSlotProxy* pEffectSlotProxy = new QmlEffectSlotProxy(pRack, pEffectUnit, pEffectSlot); + QQmlEngine::setObjectOwnership(pEffectSlotProxy, QQmlEngine::JavaScriptOwnership); + return pEffectSlotProxy; +} + +} // namespace qml +} // namespace skin +} // namespace mixxx |