diff options
author | Be <be@mixxx.org> | 2020-05-01 18:19:55 -0500 |
---|---|---|
committer | Be <be@mixxx.org> | 2020-05-01 18:19:55 -0500 |
commit | 9b8aeebd256f3f77d5f7f33c944f2f6f19c72a2b (patch) | |
tree | b22a5e63e094d14dbcf1ec03bdc5c06bc1876722 /src/effects/effectchainslot.cpp | |
parent | a9e963fc431dbc52f4704faec94f07906c32643d (diff) |
move loadEffectChainPreset from EffectsManager to EffectChainSlot
This allows for getting rid of the signaling back and forth
between EffectChainSlot and EffectsManager, significantly
simplifying the code.
Diffstat (limited to 'src/effects/effectchainslot.cpp')
-rw-r--r-- | src/effects/effectchainslot.cpp | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/src/effects/effectchainslot.cpp b/src/effects/effectchainslot.cpp index 24c5d1e9a3..befca4e749 100644 --- a/src/effects/effectchainslot.cpp +++ b/src/effects/effectchainslot.cpp @@ -4,9 +4,11 @@ #include "control/controlpotmeter.h" #include "control/controlpushbutton.h" #include "effects/backends/effectprocessor.h" +#include "effects/backends/effectsbackendmanager.h" #include "effects/effectslot.h" #include "effects/effectsmanager.h" #include "effects/effectsmessenger.h" +#include "effects/presets/effectchainpresetmanager.h" #include "engine/effects/engineeffectchain.h" #include "engine/engine.h" #include "mixer/playermanager.h" @@ -23,6 +25,8 @@ EffectChainSlot::EffectChainSlot(const QString& group, : // The control group names are 1-indexed while internally everything // is 0-indexed. m_pEffectsManager(pEffectsManager), + m_pBackendManager(pEffectsManager->getBackendManager()), + m_pChainPresetManager(pEffectsManager->getChainPresetManager()), m_pMessenger(pEffectsMessenger), m_group(group), m_presetName(""), @@ -192,10 +196,6 @@ void EffectChainSlot::setPresetName(const QString& name) { emit nameChanged(name); } -void EffectChainSlot::setLoadedPresetIndex(int index) { - m_pControlLoadedPreset->setAndConfirm(index); -} - void EffectChainSlot::loadEffect(const unsigned int iEffectSlotNumber, const EffectManifestPointer pManifest, std::unique_ptr<EffectProcessor> pProcessor, @@ -209,6 +209,34 @@ void EffectChainSlot::loadEffect(const unsigned int iEffectSlotNumber, adoptMetaknobFromPreset); } +void EffectChainSlot::loadChainPreset(EffectChainPresetPointer pPreset) { + VERIFY_OR_DEBUG_ASSERT(pPreset) { + return; + } + slotControlClear(1); + + int effectSlot = 0; + for (const auto& pEffectPreset : pPreset->effectPresets()) { + if (pEffectPreset->isEmpty()) { + loadEffect(effectSlot, nullptr, nullptr, nullptr, true); + effectSlot++; + continue; + } + EffectManifestPointer pManifest = m_pBackendManager->getManifest( + pEffectPreset->id(), pEffectPreset->backendType()); + std::unique_ptr<EffectProcessor> pProcessor = m_pBackendManager->createProcessor(pManifest); + loadEffect(effectSlot, pManifest, std::move(pProcessor), pEffectPreset, true); + effectSlot++; + } + + setMixMode(pPreset->mixMode()); + setSuperParameter(pPreset->superKnob()); + m_pControlChainSuperParameter->setDefaultValue(pPreset->superKnob()); + + setPresetName(pPreset->name()); + m_pControlLoadedPreset->setAndConfirm(m_pChainPresetManager->presetIndex(pPreset)); +} + void EffectChainSlot::sendParameterUpdate() { EffectsRequest* pRequest = new EffectsRequest(); pRequest->type = EffectsRequest::SET_EFFECT_CHAIN_PARAMETERS; @@ -233,10 +261,6 @@ void EffectChainSlot::setSuperParameter(double value, bool force) { slotControlChainSuperParameter(value, force); } -void EffectChainSlot::setSuperParameterDefaultValue(double value) { - m_pControlChainSuperParameter->setDefaultValue(value); -} - void EffectChainSlot::setMixMode(EffectChainMixMode mixMode) { m_pControlChainMixMode->set(static_cast<int>(mixMode)); sendParameterUpdate(); @@ -307,27 +331,31 @@ void EffectChainSlot::slotControlChainSuperParameter(double v, bool force) { } void EffectChainSlot::slotControlChainSelector(double value) { + int presetIndex = m_pChainPresetManager->presetIndex(m_presetName); if (value > 0) { - emit selectChainPreset(this, 1); + presetIndex++; } else { - emit selectChainPreset(this, -1); + presetIndex--; } + loadChainPreset(m_pChainPresetManager->presetAtIndex(presetIndex)); } void EffectChainSlot::slotControlLoadChainPreset(double value) { // subtract 1 to make the ControlObject 1-indexed like other ControlObjects - emit loadChainPreset(this, value - 1); + loadChainPreset(m_pChainPresetManager->presetAtIndex(value - 1)); } void EffectChainSlot::slotControlChainNextPreset(double value) { if (value > 0) { - emit selectChainPreset(this, 1); + int presetIndex = m_pChainPresetManager->presetIndex(m_presetName); + loadChainPreset(m_pChainPresetManager->presetAtIndex(presetIndex + 1)); } } void EffectChainSlot::slotControlChainPrevPreset(double value) { if (value > 0) { - emit selectChainPreset(this, -1); + int presetIndex = m_pChainPresetManager->presetIndex(m_presetName); + loadChainPreset(m_pChainPresetManager->presetAtIndex(presetIndex - 1)); } } |