From f1a96622e5bd541349ead9d4a97458a3c0fbdd3e Mon Sep 17 00:00:00 2001 From: Ethan Blackwood Date: Wed, 16 May 2018 18:50:45 -0400 Subject: [PATCH] Save gain, reference and affected channel state --- Source/Plugins/CAR/CAR.cpp | 40 ++++++++++++++++++++++++++++++++ Source/Plugins/CAR/CAR.h | 5 ++++ Source/Plugins/CAR/CAREditor.cpp | 21 +++++++++++++++++ Source/Plugins/CAR/CAREditor.h | 3 +++ 4 files changed, 69 insertions(+) diff --git a/Source/Plugins/CAR/CAR.cpp b/Source/Plugins/CAR/CAR.cpp index 036963aa2..151df5aa4 100644 --- a/Source/Plugins/CAR/CAR.cpp +++ b/Source/Plugins/CAR/CAR.cpp @@ -138,3 +138,43 @@ void CAR::setAffectedChannelState (int channel, bool newState) m_affectedChannels.add (channel); } +void CAR::saveCustomChannelParametersToXml(XmlElement* channelElement, + int channelNumber, InfoObjectCommon::InfoObjectType channelType) +{ + if (channelType == InfoObjectCommon::DATA_CHANNEL) + { + XmlElement* groupState = channelElement->createNewChildElement("GROUPSTATE"); + + const Array& referenceChannels = getReferenceChannels(); + bool isReferenceChannel = referenceChannels.contains(channelNumber); + groupState->setAttribute("reference", isReferenceChannel); + + const Array& affectedChannels = getAffectedChannels(); + bool isAffectedChannel = affectedChannels.contains(channelNumber); + groupState->setAttribute("affected", isAffectedChannel); + } +} + +void CAR::loadCustomChannelParametersFromXml(XmlElement* channelElement, + InfoObjectCommon::InfoObjectType channelType) +{ + if (channelType == InfoObjectCommon::DATA_CHANNEL) + { + int channelNumber = channelElement->getIntAttribute("number"); + + forEachXmlChildElementWithTagName(*channelElement, groupState, "GROUPSTATE") + { + if (groupState->hasAttribute("reference")) + { + bool isReferenceChannel = groupState->getBoolAttribute("reference"); + setReferenceChannelState(channelNumber, isReferenceChannel); + } + + if (groupState->hasAttribute("affected")) + { + bool isAffectedChannel = groupState->getBoolAttribute("affected"); + setAffectedChannelState(channelNumber, isAffectedChannel); + } + } + } +} \ No newline at end of file diff --git a/Source/Plugins/CAR/CAR.h b/Source/Plugins/CAR/CAR.h index 2ee61c1a4..43732ec64 100644 --- a/Source/Plugins/CAR/CAR.h +++ b/Source/Plugins/CAR/CAR.h @@ -80,6 +80,11 @@ class CAR : public GenericProcessor void setReferenceChannelState (int channel, bool newState); void setAffectedChannelState (int channel, bool newState); + /** Saving/loading channel parameters */ + void saveCustomChannelParametersToXml(XmlElement* channelElement, + int channelNumber, InfoObjectCommon::InfoObjectType channelType); + void loadCustomChannelParametersFromXml(XmlElement* channelElement, + InfoObjectCommon::InfoObjectType channelType); private: LinearSmoothedValueAtomic m_gainLevel; diff --git a/Source/Plugins/CAR/CAREditor.cpp b/Source/Plugins/CAR/CAREditor.cpp index 78d4a13f1..7bf0988f9 100644 --- a/Source/Plugins/CAR/CAREditor.cpp +++ b/Source/Plugins/CAR/CAREditor.cpp @@ -144,3 +144,24 @@ void CAREditor::sliderEvent (Slider* sliderWhichValueHasChanged) processor->setGainLevel ( (float)sliderWhichValueHasChanged->getValue()); } + +void CAREditor::saveCustomParameters(XmlElement* xml) +{ + auto processor = static_cast (getProcessor()); + + xml->setAttribute("Type", "CAREditor"); + + XmlElement* paramValues = xml->createNewChildElement("VALUES"); + paramValues->setAttribute("gainLevel", processor->getGainLevel()); +} + +void CAREditor::loadCustomParameters(XmlElement* xml) +{ + auto processor = static_cast (getProcessor()); + + forEachXmlChildElementWithTagName(*xml, xmlNode, "VALUES") + { + double gain = xmlNode->getDoubleAttribute("gainLevel", m_gainSlider->getValue()); + m_gainSlider->setValue(gain, sendNotificationSync); + } +} \ No newline at end of file diff --git a/Source/Plugins/CAR/CAREditor.h b/Source/Plugins/CAR/CAREditor.h index e68f3fca1..a4ade6d2e 100644 --- a/Source/Plugins/CAR/CAREditor.h +++ b/Source/Plugins/CAR/CAREditor.h @@ -58,6 +58,9 @@ class CAREditor : public GenericEditor void sliderEvent (Slider* sliderWhichValueHasChanged) override; void channelChanged (int channel, bool newState) override; + /** Saving/loading parameters */ + void saveCustomParameters(XmlElement* xml) override; + void loadCustomParameters(XmlElement* xml) override; private: enum ChannelsType