summaryrefslogtreecommitdiffstats
path: root/src/effects/effectchainmanager.cpp
diff options
context:
space:
mode:
authorbe_ <be.0@gmx.com>2017-06-13 12:30:43 -0500
committerbe_ <be.0@gmx.com>2017-06-13 12:30:43 -0500
commit412a6661bd8230905ef240e89304812bab6ef0d8 (patch)
treecac50a88c772e780c156732d4019b10ee07d8d04 /src/effects/effectchainmanager.cpp
parente15afaaf1148113822d1103181b3be7df4a2c750 (diff)
parent1b27e0eb07ca5f032eddd5f8f2b4f30fa3c8efa0 (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.cpp39
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;
}