diff options
author | RJ Ryan <rryan@mixxx.org> | 2013-12-17 01:45:00 -0500 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2013-12-17 01:45:23 -0500 |
commit | 4f40522fa1e3a90235a0fb78923af044cac6687c (patch) | |
tree | 3a4dd8e01af307890e5b80476a268e7101e9086d /src/effects/effectchainmanager.cpp | |
parent | 104372643b571d2e1e35d0ba97efe20f8f2a8b29 (diff) |
Add quick and dirty EffectChain / Effect / EffectParameter XML serialization/de-serialization support.
Diffstat (limited to 'src/effects/effectchainmanager.cpp')
-rw-r--r-- | src/effects/effectchainmanager.cpp | 79 |
1 files changed, 75 insertions, 4 deletions
diff --git a/src/effects/effectchainmanager.cpp b/src/effects/effectchainmanager.cpp index 6d0c9b0c01..71334838ed 100644 --- a/src/effects/effectchainmanager.cpp +++ b/src/effects/effectchainmanager.cpp @@ -1,10 +1,17 @@ - #include "effects/effectchainmanager.h" +#include <QtDebug> +#include <QDomDocument> +#include <QFile> +#include <QDir> + #include "effects/effectsmanager.h" +#include "xmlparse.h" -EffectChainManager::EffectChainManager(EffectsManager* pEffectsManager) +EffectChainManager::EffectChainManager(ConfigObject<ConfigValue>* pConfig, + EffectsManager* pEffectsManager) : QObject(pEffectsManager), + m_pConfig(pConfig), m_pEffectsManager(pEffectsManager) { } @@ -87,10 +94,74 @@ EffectChainPointer EffectChainManager::getPrevEffectChain(EffectChainPointer pEf return m_effectChains[(indexOf - 1 + m_effectChains.size()) % m_effectChains.size()]; } -void EffectChainManager::saveEffectChains() { +bool EffectChainManager::saveEffectChains() { qDebug() << debugString() << "saveEffectChains"; + QDomDocument doc("MixxxEffects"); + + QString blank = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<MixxxEffects>\n" + "</MixxxEffects>\n"; + doc.setContent(blank); + + QDomElement rootNode = doc.documentElement(); + + QDomElement chains = doc.createElement("EffectChains"); + foreach (EffectChainPointer pChain, m_effectChains) { + QDomElement chain = pChain->toXML(&doc); + chains.appendChild(chain); + } + rootNode.appendChild(chains); + + QDir settingsPath(m_pConfig->getSettingsPath()); + + if (!settingsPath.exists()) { + return false; + } + + QFile file(settingsPath.absoluteFilePath("effects.xml")); + + // TODO(rryan): overwrite the right way. + if (!file.open(QIODevice::Truncate | QIODevice::WriteOnly)) { + return false; + } + + QString effectsXml = doc.toString(); + file.write(effectsXml.toUtf8()); + file.close(); + return true; } -void EffectChainManager::loadEffectChains() { +bool EffectChainManager::loadEffectChains() { qDebug() << debugString() << "loadEffectChains"; + + QDir settingsPath(m_pConfig->getSettingsPath()); + QFile file(settingsPath.absoluteFilePath("effects.xml")); + + if (!file.open(QIODevice::ReadOnly)) { + return false; + } + + QDomDocument doc; + if (!doc.setContent(&file)) { + file.close(); + return false; + } + file.close(); + + QDomElement root = doc.documentElement(); + + QDomElement effectChains = XmlParse::selectElement(root, "EffectChains"); + QDomNodeList chains = effectChains.childNodes(); + + for (int i = 0; i < chains.count(); ++i) { + QDomNode chainNode = chains.at(i); + + if (chainNode.isElement()) { + EffectChainPointer pChain = EffectChain::fromXML( + m_pEffectsManager, chainNode.toElement()); + + m_effectChains.append(pChain); + } + } + return true; } |