diff options
author | be_ <be.0@gmx.com> | 2017-06-13 12:30:43 -0500 |
---|---|---|
committer | be_ <be.0@gmx.com> | 2017-06-13 12:30:43 -0500 |
commit | 412a6661bd8230905ef240e89304812bab6ef0d8 (patch) | |
tree | cac50a88c772e780c156732d4019b10ee07d8d04 /src/effects/effectchainmanager.cpp | |
parent | e15afaaf1148113822d1103181b3be7df4a2c750 (diff) | |
parent | 1b27e0eb07ca5f032eddd5f8f2b4f30fa3c8efa0 (diff) |
Merge remote-tracking branch 'upstream/pr/1275' into postfader_effects
EngineEffect creation and loading of saved state on startup need
to be decoupled so the saved state can be loaded after all input
and output channels have been registered in the engine.
Diffstat (limited to 'src/effects/effectchainmanager.cpp')
-rw-r--r-- | src/effects/effectchainmanager.cpp | 39 |
1 files changed, 12 insertions, 27 deletions
diff --git a/src/effects/effectchainmanager.cpp b/src/effects/effectchainmanager.cpp index d6ab631039..bf3ed3b0fe 100644 --- a/src/effects/effectchainmanager.cpp +++ b/src/effects/effectchainmanager.cpp @@ -57,7 +57,7 @@ StandardEffectRackPointer EffectChainManager::getStandardEffectRack(int i) { EqualizerRackPointer EffectChainManager::addEqualizerRack() { EqualizerRackPointer pRack(new EqualizerRack( - m_pEffectsManager, this, m_equalizerEffectRacks.size())); + m_pEffectsManager, this, m_equalizerEffectRacks.size())); m_equalizerEffectRacks.append(pRack); m_effectRacksByGroup.insert(pRack->getGroup(), pRack); return pRack; @@ -173,12 +173,8 @@ bool EffectChainManager::saveEffectChains() { return true; } -QList<std::pair<EffectChainPointer, QDomElement>> EffectChainManager::loadEffectChains() { - // StandardEffectRack::addEffectChainSlot uses both the EffectChainPointer - // and the saved state from the XML to initialize the respective - // EffectChain/Effect/EffectParameter/EffectButtonParameter Slots - QList<std::pair<EffectChainPointer, QDomElement>> loadedChains; - +void EffectChainManager::loadEffectChains( + StandardEffectRack* pRack) { QDir settingsPath(m_pConfig->getSettingsPath()); QFile file(settingsPath.absoluteFilePath("effects.xml")); QDomDocument doc; @@ -186,12 +182,7 @@ QList<std::pair<EffectChainPointer, QDomElement>> EffectChainManager::loadEffect QDomElement emptyChainElement = doc.createElement(EffectXml::Chain); // Check that XML file can be opened and is valid XML if (!file.open(QIODevice::ReadOnly) || !doc.setContent(&file)) { - for (int i = 0; i < kNumStandardEffectChains; ++i) { - EffectChainPointer pEmptyChain = EffectChainPointer( - new EffectChain(m_pEffectsManager, QString(), EffectChainPointer())); - loadedChains.append(std::make_pair(pEmptyChain, emptyChainElement)); - } - return loadedChains; + return; } QDomElement root = doc.documentElement(); @@ -205,20 +196,14 @@ QList<std::pair<EffectChainPointer, QDomElement>> EffectChainManager::loadEffect if (chainNode.isElement()) { QDomElement chainElement = chainNode.toElement(); EffectChainPointer pChain = EffectChain::createFromXml( - m_pEffectsManager, chainElement); - - loadedChains.append(std::make_pair(pChain, chainElement)); - m_effectChains.append(pChain); + m_pEffectsManager, chainElement); + if (!pChain->name().isEmpty()) { // skip unnamed = ejected chains. + EffectChainSlotPointer pChainSlot = pRack->getEffectChainSlot(i); + if (pChainSlot) { + pChainSlot->loadEffectChain(pChain); + pChainSlot->loadChainSlotFromXml(chainElement); + } + } } } - - // Make sure there are enough chains if the XML file does not have - // enough <EffectChain> elements - for (int i = loadedChains.size(); i < kNumStandardEffectChains; ++i) { - EffectChainPointer pEmptyChain = EffectChainPointer( - new EffectChain(m_pEffectsManager, QString(), EffectChainPointer())); - loadedChains.append(std::make_pair(pEmptyChain, emptyChainElement)); - } - - return loadedChains; } |