From 2fab19ab637b8eb9e35b9aea94bfe2a5e70740d1 Mon Sep 17 00:00:00 2001 From: Kshitij Gupta Date: Sun, 17 Feb 2019 09:23:52 +0530 Subject: [PATCH] Added Effect Preset classes - Added EffectChainPreset class - Added EffectPreset class - Added EffectsManager::loadEffectChainPresets --- build/depends.py | 2 ++ src/effects/defs.h | 6 +++++ src/effects/effectchainpreset.cpp | 38 ++++++++++++++++++++++++++++ src/effects/effectchainpreset.h | 29 ++++++++++++++++++++++ src/effects/effectpreset.cpp | 32 ++++++++++++++++++++++++ src/effects/effectpreset.h | 23 +++++++++++++++++ src/effects/effectsmanager.cpp | 41 +++++++++++++++++++++++++------ src/effects/effectsmanager.h | 6 ++--- 8 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 src/effects/effectchainpreset.cpp create mode 100644 src/effects/effectchainpreset.h create mode 100644 src/effects/effectpreset.cpp create mode 100644 src/effects/effectpreset.h diff --git a/build/depends.py b/build/depends.py index eef5b2ddc1f..7c039d59f96 100644 --- a/build/depends.py +++ b/build/depends.py @@ -745,6 +745,8 @@ def sources(self, build): "src/effects/effectparameter.cpp", + "src/effects/effectchainpreset.cpp", + "src/effects/effectpreset.cpp", "src/effects/effectchainslot.cpp", "src/effects/specialeffectchainslots.cpp", "src/effects/effectslot.cpp", diff --git a/src/effects/defs.h b/src/effects/defs.h index 850ffa06576..aa64e1d68bf 100644 --- a/src/effects/defs.h +++ b/src/effects/defs.h @@ -73,6 +73,12 @@ typedef QSharedPointer EffectParameterSlotBasePointer; class EffectChainSlot; typedef QSharedPointer EffectChainSlotPointer; +class EffectChainPreset; +typedef QSharedPointer EffectChainPresetPointer; + +class EffectPreset; +typedef QSharedPointer EffectPresetPointer; + class StandardEffectChainSlot; typedef QSharedPointer StandardEffectChainSlotPointer; diff --git a/src/effects/effectchainpreset.cpp b/src/effects/effectchainpreset.cpp new file mode 100644 index 00000000000..94b77b3107e --- /dev/null +++ b/src/effects/effectchainpreset.cpp @@ -0,0 +1,38 @@ +#include "effects/effectchainpreset.h" + +#include "effects/effectxmlelements.h" +#include "effects/effectchainslot.h" +#include "util/xml.h" + +EffectChainPreset::EffectChainPreset() { +} + +EffectChainPreset::EffectChainPreset(const QDomElement& element) { + if (!element.hasChildNodes()) { + return; + } + + m_id = XmlParse::selectNodeQString(element, EffectXml::ChainId); + m_name = XmlParse::selectNodeQString(element, EffectXml::ChainName); + m_description = XmlParse::selectNodeQString(element, EffectXml::ChainDescription); + + QString mixModeStr = XmlParse::selectNodeQString(element, EffectXml::ChainMixMode); + m_mixMode = EffectChainSlot::mixModeFromString(mixModeStr); + + m_dSuper = XmlParse::selectNodeDouble(element, EffectXml::ChainSuperParameter); + + QDomElement effectsElement = XmlParse::selectElement(element, EffectXml::EffectsRoot); + QDomNodeList effectList = effectsElement.childNodes(); + + for (int i = 0; i < effectList.count(); ++i) { + QDomNode effectNode = effectList.at(i); + if (effectNode.isElement()) { + QDomElement effectElement = effectNode.toElement(); + EffectPresetPointer pPreset(new EffectPreset(effectElement)); + m_effectPresets.append(pPreset); + } + } +} + +EffectChainPreset::~EffectChainPreset() { +} diff --git a/src/effects/effectchainpreset.h b/src/effects/effectchainpreset.h new file mode 100644 index 00000000000..bd6c324116e --- /dev/null +++ b/src/effects/effectchainpreset.h @@ -0,0 +1,29 @@ +#ifndef EFFECTCHAINPRESET_H +#define EFFECTCHAINPRESET_H + +#include + +#include "effects/defs.h" +#include "effects/effectpreset.h" + + +class EffectChainPreset { + public: + EffectChainPreset(); + EffectChainPreset(const QDomElement& element); + ~EffectChainPreset(); + + QString name() const { + return m_name; + } + + private: + QString m_id; + QString m_name; + QString m_description; + double m_dSuper; + EffectChainMixMode m_mixMode; + QList m_effectPresets; +}; + +#endif /* EFFECTCHAINPRESET_H */ \ No newline at end of file diff --git a/src/effects/effectpreset.cpp b/src/effects/effectpreset.cpp new file mode 100644 index 00000000000..d3734cf194e --- /dev/null +++ b/src/effects/effectpreset.cpp @@ -0,0 +1,32 @@ +#include "effects/effectpreset.h" + +#include "effects/effectxmlelements.h" +#include "util/xml.h" + +EffectPreset::EffectPreset() { +} + +EffectPreset::EffectPreset(const QDomElement& element) { + if (!element.hasChildNodes()) { + return; + } + + m_id = XmlParse::selectNodeQString(element, EffectXml::EffectId); + m_version = XmlParse::selectNodeQString(element, EffectXml::EffectVersion); + m_dMetaParameter = XmlParse::selectNodeDouble(element, EffectXml::EffectMetaParameter); + + QDomElement parametersElement = XmlParse::selectElement(element, EffectXml::ParametersRoot); + QDomNodeList parametersList = parametersElement.childNodes(); + + for (int i = 0; i < parametersList.count(); ++i) { + QDomNode parameterNode = parametersList.at(i); + if (parameterNode.isElement()) { + QDomElement parameterElement = parameterNode.toElement(); + // EffectParameterPresetPointer pPreset(new EffectParameterPreset(parameterElement)); + // m_effectParameterPresets.append(pPreset); + } + } +} + +EffectPreset::~EffectPreset() { +} diff --git a/src/effects/effectpreset.h b/src/effects/effectpreset.h new file mode 100644 index 00000000000..1cf6d4e5496 --- /dev/null +++ b/src/effects/effectpreset.h @@ -0,0 +1,23 @@ +#ifndef EFFECTPRESET_H +#define EFFECTPRESET_H + +#include + +#include "effects/defs.h" + + +class EffectPreset { + public: + EffectPreset(); + EffectPreset(const QDomElement& element); + ~EffectPreset(); + + private: + QString m_id; + QString m_version; + double m_dMetaParameter; + + // QList m_effectParameterPresets; +}; + +#endif /* EFFECTPRESET_H */ \ No newline at end of file diff --git a/src/effects/effectsmanager.cpp b/src/effects/effectsmanager.cpp index 11df339e5f1..62b7f726358 100644 --- a/src/effects/effectsmanager.cpp +++ b/src/effects/effectsmanager.cpp @@ -1,11 +1,13 @@ #include "effects/effectsmanager.h" +#include #include #include #include #include "engine/effects/engineeffectsmanager.h" +#include "effects/effectchainpreset.h" #include "effects/effectsbackend.h" #include "effects/effectslot.h" #include "effects/effectxmlelements.h" @@ -328,7 +330,8 @@ void EffectsManager::addQuickEffectChainSlot(const QString& deckGroupName) { m_effectChainSlotsByGroup.insert(pChainSlot->group(), pChainSlot); } -EffectChainSlotPointer EffectsManager::getEffectChainSlot(const QString& group) const { +EffectChainSlotPointer EffectsManager::getEffectChainSlot( + const QString& group) const { return m_effectChainSlotsByGroup.value(group); } @@ -384,17 +387,12 @@ bool EffectsManager::getEffectVisibility(EffectManifestPointer pManifest) { } void EffectsManager::setup() { + loadEffectChainPresets(); // Add postfader effect chain slots addStandardEffectChainSlots(); addOutputEffectChainSlot(); } -// NOTE(Kshitij) : Use new functions for effect loading using Effect Preset -// void EffectsManager::loadEffectChains() { -// // populate rack and restore state from effects.xml -// m_pEffectChainManager->loadEffectChains(); -// } - void EffectsManager::setEffectParameterPosition(EffectManifestPointer pManifest, const unsigned int parameterId, const unsigned int position) { for (auto& pChainSlot : m_standardEffectChainSlots) { @@ -498,3 +496,32 @@ void EffectsManager::collectGarbage(const EffectsRequest* pRequest) { pRequest->DisableInputChannelForChain.pChannelHandle); } } + +void EffectsManager::loadEffectChainPresets() { + QDir settingsPath(m_pConfig->getSettingsPath()); + QFile file(settingsPath.absoluteFilePath("effects.xml")); + QDomDocument doc; + + if (!file.open(QIODevice::ReadOnly)) { + return; + } else if (!doc.setContent(&file)) { + file.close(); + return; + } + file.close(); + + QDomElement root = doc.documentElement(); + QDomElement rackElement = XmlParse::selectElement(root, EffectXml::Rack); + QDomElement chainsElement = XmlParse::selectElement(rackElement, EffectXml::ChainsRoot); + QDomNodeList chainsList = chainsElement.elementsByTagName(EffectXml::Chain); + + for (int i=0; iname(), pPreset); + } + } +} \ No newline at end of file diff --git a/src/effects/effectsmanager.h b/src/effects/effectsmanager.h index 6fe65323a2f..06d7c926099 100644 --- a/src/effects/effectsmanager.h +++ b/src/effects/effectsmanager.h @@ -53,7 +53,6 @@ class EffectsManager : public QObject { // NOTE(Kshitij) : New functions for saving and loading // bool saveEffectChains(); - // void loadEffectChains(); static const int kNumStandardEffectChains = 4; @@ -104,8 +103,7 @@ class EffectsManager : public QObject { void addEqualizerEffectChainSlot(const QString& deckGroupName); void addQuickEffectChainSlot(const QString& deckGroupName); - // NOTE(Kshitij) : Use new functions - // void loadEffectChains(); + void loadEffectChainPresets(); // TODO: Remove these methods to reduce coupling between GUI and // effects system implementation details. @@ -187,6 +185,8 @@ class EffectsManager : public QObject { QHash m_equalizerEffectChainSlots; QHash m_quickEffectChainSlots; + QHash m_effectChainPresets; + DISALLOW_COPY_AND_ASSIGN(EffectsManager); };