diff --git a/src/effects/chains/quickeffectchain.cpp b/src/effects/chains/quickeffectchain.cpp index 8ecd64261030..735c5792a0fc 100644 --- a/src/effects/chains/quickeffectchain.cpp +++ b/src/effects/chains/quickeffectchain.cpp @@ -2,6 +2,7 @@ #include "control/controlobject.h" #include "effects/effectslot.h" +#include "effects/effectsmanager.h" #include "effects/presets/effectchainpreset.h" #include "effects/presets/effectchainpresetmanager.h" #include "moc_quickeffectchain.cpp" @@ -54,8 +55,16 @@ EffectChainPresetPointer QuickEffectChain::presetAtIndex(int index) const { } void QuickEffectChain::loadChainPreset(EffectChainPresetPointer pPreset) { + // Loading a chain preset sets the super knob's value to the value it was at + // when the chain preset was saved. It may be desirable to keep the knob's + // value as is, for instance when changing between multiple presets that + // contain a filter and an additional additional effect. + const double old_super_knob_value = getSuperParameter(); + EffectChain::loadChainPreset(pPreset); - if (pPreset) { + if (m_pEffectsManager->isAdoptSuperknobSettingEnabled()) { + setSuperParameter(old_super_knob_value, true); + } else if (pPreset) { setSuperParameter(pPreset->superKnob(), true); } } diff --git a/src/effects/effectsmanager.cpp b/src/effects/effectsmanager.cpp index ec75b814a898..1468c91bab25 100644 --- a/src/effects/effectsmanager.cpp +++ b/src/effects/effectsmanager.cpp @@ -180,6 +180,10 @@ bool EffectsManager::isAdoptMetaknobSettingEnabled() const { return m_pConfig->getValue(ConfigKey("[Effects]", "AdoptMetaknobValue"), true); } +bool EffectsManager::isAdoptSuperknobSettingEnabled() const { + return m_pConfig->getValue(ConfigKey("[Effects]", "AdoptSuperknobValue"), false); +} + void EffectsManager::readEffectsXml() { QDir settingsPath(m_pConfig->getSettingsPath()); QFile file(settingsPath.absoluteFilePath(kEffectsXmlFile)); diff --git a/src/effects/effectsmanager.h b/src/effects/effectsmanager.h index de5109ab3316..abd5dc5ebe7a 100644 --- a/src/effects/effectsmanager.h +++ b/src/effects/effectsmanager.h @@ -76,6 +76,7 @@ class EffectsManager { } bool isAdoptMetaknobSettingEnabled() const; + bool isAdoptSuperknobSettingEnabled() const; private: void addStandardEffectChains(); diff --git a/src/preferences/dialog/dlgprefeffects.cpp b/src/preferences/dialog/dlgprefeffects.cpp index 5daaca2b51ed..8702e331f5dd 100644 --- a/src/preferences/dialog/dlgprefeffects.cpp +++ b/src/preferences/dialog/dlgprefeffects.cpp @@ -118,7 +118,12 @@ void DlgPrefEffects::slotUpdate() { loadChainPresetLists(); - bool effectAdoptMetaknobValue = m_pConfig->getValue( + const bool effectAdoptSuperknobValue = m_pConfig->getValue( + ConfigKey("[Effects]", "AdoptSuperknobValue"), false); + radioButtonKeepSuperknobPosition->setChecked(effectAdoptSuperknobValue); + radioButtonSuperknobLoadDefault->setChecked(!effectAdoptSuperknobValue); + + const bool effectAdoptMetaknobValue = m_pConfig->getValue( ConfigKey("[Effects]", "AdoptMetaknobValue"), true); radioButtonKeepMetaknobPosition->setChecked(effectAdoptMetaknobValue); radioButtonMetaknobLoadDefault->setChecked(!effectAdoptMetaknobValue); @@ -128,6 +133,8 @@ void DlgPrefEffects::slotApply() { m_pVisibleEffectsList->setList(m_pVisibleEffectsModel->getList()); saveChainPresetLists(); + m_pConfig->set(ConfigKey("[Effects]", "AdoptSuperknobValue"), + ConfigValue(radioButtonKeepSuperknobPosition->isChecked())); m_pConfig->set(ConfigKey("[Effects]", "AdoptMetaknobValue"), ConfigValue(radioButtonKeepMetaknobPosition->isChecked())); } @@ -141,6 +148,7 @@ void DlgPrefEffects::saveChainPresetLists() { } void DlgPrefEffects::slotResetToDefaults() { + radioButtonSuperknobLoadDefault->setChecked(true); radioButtonKeepMetaknobPosition->setChecked(true); m_pChainPresetManager->resetToDefaults(); diff --git a/src/preferences/dialog/dlgprefeffectsdlg.ui b/src/preferences/dialog/dlgprefeffectsdlg.ui index a59bf462a104..00a465ebdf7b 100644 --- a/src/preferences/dialog/dlgprefeffectsdlg.ui +++ b/src/preferences/dialog/dlgprefeffectsdlg.ui @@ -470,12 +470,32 @@ - + Effect load behavior - - + + + + + Keep superknob position + + + buttonGroupSuperKnob + + + + + + + Reset superknob to preset default + + + buttonGroupSuperKnob + + + + Keep metaknob position @@ -485,7 +505,7 @@ - + Reset metaknob to effect default @@ -509,11 +529,14 @@ chainPresetExportButton chainPresetRenameButton chainPresetDeleteButton + radioButtonKeepSuperknobPosition + radioButtonSuperknobLoadDefault radioButtonKeepMetaknobPosition radioButtonMetaknobLoadDefault +