summaryrefslogtreecommitdiffstats
path: root/src/effects/effectchainmanager.cpp
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2013-12-17 01:45:00 -0500
committerRJ Ryan <rryan@mixxx.org>2013-12-17 01:45:23 -0500
commit4f40522fa1e3a90235a0fb78923af044cac6687c (patch)
tree3a4dd8e01af307890e5b80476a268e7101e9086d /src/effects/effectchainmanager.cpp
parent104372643b571d2e1e35d0ba97efe20f8f2a8b29 (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.cpp79
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;
}