summaryrefslogtreecommitdiffstats
path: root/src/effects/effectchainslot.cpp
diff options
context:
space:
mode:
authorBe <be@mixxx.org>2020-05-01 18:19:55 -0500
committerBe <be@mixxx.org>2020-05-01 18:19:55 -0500
commit9b8aeebd256f3f77d5f7f33c944f2f6f19c72a2b (patch)
treeb22a5e63e094d14dbcf1ec03bdc5c06bc1876722 /src/effects/effectchainslot.cpp
parenta9e963fc431dbc52f4704faec94f07906c32643d (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.cpp54
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));
}
}