7 : m_processor(processor), m_vts(processor, &m_undoManager), m_parentTree(
XmlType::
Tag::plugin),
10 m_customDataTree(
XmlType::
Tag::customData), m_numGenericParameters(numParams),
11 m_parameterNamePrefix(namePrefix)
42 catch (std::out_of_range& e)
44 DBG(
"Error: getKwidget failed to find kwidget with given ID: " << kwidgetID <<
"\n" << e.what());
64 if (!kwidgetTree.isValid())
89 k->setAccessible(
false);
99 StringArray kwidgetsToRemove;
101 kwidgetsToRemove.add(kwidget.first);
103 for (
const auto& kwidget : kwidgetsToRemove)
109 ValueTree newConnection{
134 std::vector<ValueTree> connectionsToRemove;
138 connectionsToRemove.push_back(c);
140 for (
const auto& c : connectionsToRemove)
177 if (destination == dest && param == paramID)
195 const String& paramID)
210 const String& paramID,
float depth)
223 std::vector<ValueTree> modulationToRemove;
227 modulationToRemove.push_back(m);
229 for (
const auto& m : modulationToRemove)
237 Array<ValueTree> nodesToRemove;
245 nodesToRemove.add(child);
250 for (
auto& node : nodesToRemove)
289 for (
int i = newConnectionTree.getNumChildren() - 1; i >= 0; i--)
291 auto child = newConnectionTree.getChild(i);
296 newConnectionTree.removeChild(
311 struct InitialStateAction :
public UndoableAction
313 bool perform()
override {
return true; }
314 bool undo()
override {
return true; }
340 m_vts.createAndAddParameter(
350 bool success =
false;
352 if (useEndParams ==
false)
366 else if (freeCount > 0 && freeCount < numParametersToLink)
373 else if (freeCount == numParametersToLink)
394 else if (freeCount > 0 && freeCount < numParametersToLink)
401 else if (freeCount == numParametersToLink)
412 std::vector<int> paramLocs;
413 for (
int i = 0; i < numParametersToLink; i++)
415 paramLocs.push_back(i + startIdx);
425 ValueTree kwidgetTree(k->
getState());
426 auto paramTree = kwidgetTree.getChildWithName(
Tag::params);
429 auto numParams = paramTree.getNumChildren();
436 if (!needsAttachment)
441 if (genericParameterLocs.empty())
445 auto it = genericParameterLocs.begin();
446 for (
auto param : paramTree)
454 jassert(kwidgetType !=
"");
455 jassert(typeLimit >= 0);
462 typeLimit = kwidgetCount;
465 for (
int candidateSuffix = 0; candidateSuffix < typeLimit; candidateSuffix++)
467 String candidateID = idModifier + kwidgetType + String(candidateSuffix);
478 DBG(
"ParameterManager::generateKwidgetID: Failed to generate a kwidgetID based on input parameters");
486 String errorMessage =
"";
490 if (kwidgetIDArray.contains(kwidgetID,
true))
493 errorMessage +=
"Duplicate KwidgetID found: " + kwidgetID +
", not automatically repaired";
497 kwidgetIDArray.add(kwidgetID);
500 if (errorMessage !=
"")
510 StringArray kwidgetIDArray;
513 kwidgetIDArray.clear();
517 for (
auto kwidget : kwidgetTree)
522 for (
auto ckwidget : childKwidgetTree)
533 auto paramTree = kwidget.getChildWithName(
Tag::params);
534 String errorMessage =
"";
535 for (
auto param : paramTree)
543 isValid = repairEnabled;
544 errorMessage +=
"Duplicate link index found: " + param[
Property::id].toString() +
545 ", linkIndex = " + String(idx);
551 errorMessage +=
" : Set to -1, will be repaired by the Parameter check";
553 errorMessage +=
"\n";
562 if (errorMessage !=
"")
582 for (
auto kwidget : kwidgetTree)
587 for (
auto ckwidget : childKwidgetTree)
611 auto genericParamID =
614 paramTreeGeneric.getChildWithProperty(
Property::id, genericParamID);
619 bool repairEnabled =
false)
621 String errorMessage =
"";
630 if (kwidget !=
nullptr)
632 auto paramTree = kwidgetTree.getChildWithName(
Tag::params);
633 for (
auto param : paramTree)
642 String(++errorCount) +
") Index out of range: " + paramID +
", linkIndex = " + String(idx);
648 auto existingValue = param.getProperty(
656 errorMessage +=
" : Repaired with linkIndex = " + String(newIndex) +
657 " set to original value (= " + existingValue.toString() +
")";
659 isValid = repairEnabled;
660 errorMessage +=
"\n";
664 auto p = kwidget->getParameter(paramID);
667 errorMessage += String(++errorCount) +
") Parameter not recognised: " + paramID +
668 ", linkIndex = " + String(idx);
676 errorMessage +=
" : Not repaired but benign - see comment in code";
678 isValid = repairEnabled;
679 errorMessage +=
"\n";
683 auto& kwidgetParams = kwidget->getParameters();
684 for (
auto param : kwidgetParams)
687 auto id = param->getParameterID();
688 auto defaultValue = param->getValue();
689 auto paramChild = paramTree.getChildWithProperty(
691 if (paramChild.isValid())
694 auto range = param->getNormalisableRange();
695 if (
float(value) < range.start ||
float(value) > range.end)
697 errorMessage += String(++errorCount) +
") Parameter value out of range: " +
id +
698 ", range = " + String(range.start) +
" to " + String(range.end) +
699 ", value = " + String(
float(value));
709 errorMessage +=
" : Repaired with default value (= " + String(defaultValue) +
")";
711 isValid = repairEnabled;
712 errorMessage +=
"\n";
717 errorMessage += String(++errorCount) +
") Parameter missing: " + id;
722 auto newParameter = kwidgetTree.getChildWithName(
Tag::params)
726 newParameter.setProperty(
Property::id, param->getParameterID(),
nullptr);
729 paramTree.appendChild(
736 errorMessage +=
" : Repaired with new param and default value = " + String(defaultValue);
738 isValid = repairEnabled;
739 errorMessage +=
"\n";
746 String(++errorCount) +
") Kwidget type not recognised: " + kwidgetType +
" : Not Repaired\n";
750 errorMessage =
"Parameter check found " + String(errorCount) +
" errors in Kwidget " + kwidgetID +
":\n" +
763 auto paramTree = kwidgetTree.getChildWithName(
Tag::params);
764 for (
const auto& param : paramTree)
776 auto paramTree = kwidgetTree.getChildWithName(
Tag::params);
777 for (
const auto& param : paramTree)
787 const String& paramID)
806 for (
int i = 0; i < modTree.getNumChildren(); i++)
808 auto child = modTree.getChild(i);
840 ValueTree newModulation(child.getType());
841 newModulation.copyPropertiesAndChildrenFrom(child,
nullptr);
A subclass of RangedAudioParameter that can act as an alias for another audio parameter,...
Definition GenericParameter.h:15
Polarity
Definition KAttachment.h:120
void attach(GenericParameter *p)
Definition KParameter.cpp:146
void detach()
Definition KParameter.cpp:160
bool flagUsedIndexes(juce::ValueTree &kwidget, bool repairEnabled)
Definition ParameterManager.cpp:530
void removeModulationInvolving(const String &kwidgetID)
Definition ParameterManager.cpp:221
void setGenericParameterValue(ValueTree ¶mTreeGeneric, int index, var newValue)
Definition ParameterManager.cpp:609
ValueTree m_kwidgetTree
Definition ParameterManager.h:314
bool registerKwidget(juce::ValueTree &kwidget, StringArray &kwidgetIDArray, bool repairEnabled)
Definition ParameterManager.cpp:482
int m_numDigitsInGenericParamName
Definition ParameterManager.h:324
const ValueTree & getKwidgetsTree()
Definition ParameterManager.cpp:260
void clearModulation()
Definition ParameterManager.cpp:233
ValueTree m_processorTree
Definition ParameterManager.h:313
std::vector< GenericParameter * > m_genericParameters
Definition ParameterManager.h:310
void detachParameters(Kwidget *kwidget, const ValueTree &kwidgetTree)
Definition ParameterManager.cpp:774
bool validateKwidgetState(ValueTree &kwidgetTree, ValueTree ¶mTree, bool repairEnabled)
Definition ParameterManager.cpp:618
Kwidget * getKwidget(const String &kwidgetID)
Definition ParameterManager.cpp:35
void removeKwidget(const String &kwidgetID)
Definition ParameterManager.cpp:82
void resetUndoManager()
Definition ParameterManager.cpp:309
void setCurrentState(const ValueTree &newState)
Definition ParameterManager.cpp:265
std::vector< bool > m_linkIndexAllocation
Definition ParameterManager.h:281
ValueTree m_parentTree
Definition ParameterManager.h:312
AudioProcessor & m_processor
Definition ParameterManager.h:307
static const StringArray StaticConnectionDestinations
Contains a list of the names of all the static connection destinations.
Definition ParameterManager.h:278
void clearConnections()
Definition ParameterManager.cpp:144
bool initialiseLinkIndexUsageTable(const ValueTree &state, bool repairEnabled)
Definition ParameterManager.cpp:570
const String m_parameterNamePrefix
Definition ParameterManager.h:323
int getUnusedLinkIndex()
Definition ParameterManager.cpp:595
void setModulationDepth(const String &sourceID, int modulatorIdx, const String &destinationID, const String ¶mID, float depth)
Definition ParameterManager.cpp:209
void attachParameters(Kwidget *kwidget, const ValueTree &kwidgetTree)
Definition ParameterManager.cpp:761
UndoManager m_undoManager
Definition ParameterManager.h:308
ValueTree m_connectionTree
Definition ParameterManager.h:315
ValueTree & getState()
Definition ParameterManager.cpp:256
String generateKwidgetID(const String &kwidgetType, const String &idModifier="", int typeInstanceLimit=0)
Definition ParameterManager.cpp:452
std::map< String, Kwidget * > m_activeKwidgets
Definition ParameterManager.h:320
const int m_numGenericParameters
Definition ParameterManager.h:322
void clearModulationExcept(const String &allowedSource)
Definition ParameterManager.cpp:235
void addNonStaticConnections(juce::ValueTree &newConnectionTree)
Definition ParameterManager.cpp:285
void clearKwidgets()
Definition ParameterManager.cpp:97
void addConnection(const String &sourceID, const String &destinationID)
Definition ParameterManager.cpp:107
ValueTree m_modulationTree
Definition ParameterManager.h:316
void removeModulation(const String &sourceID, int modulatorIdx, const String &destinationID, const String ¶mID)
Definition ParameterManager.cpp:194
void copyModulationTree(ValueTree modTree)
Definition ParameterManager.cpp:803
void addCustomDataNode(const ValueTree &customDataNode)
Definition ParameterManager.cpp:324
void debugState() const
Definition ParameterManager.cpp:322
ValueTree createKwidgetTree(Kwidget *k, bool useEndParams=false)
Definition ParameterManager.cpp:423
void setModulationPolarity(const String &src, int modulatorIdx, const String &dest, const String ¶mID, KAttachment::Polarity polarity)
Definition ParameterManager.cpp:215
AudioProcessor & getProcessor()
Definition ParameterManager.cpp:303
void addGenericParameters()
Definition ParameterManager.cpp:331
bool connectionExists(const String &sourceID, const String &destID)
Definition ParameterManager.cpp:146
std::vector< int > findGenericParameters(int numParametersToLink, bool useEndParams)
Definition ParameterManager.cpp:345
ValueTree addModulation(const String &sourceID, int modulatorIdx, const String &destinationID, const String ¶mID, float depth=DefaultModDepth, KAttachment::Polarity=KAttachment::Polarity::Bipolar)
Definition ParameterManager.cpp:159
bool addKwidget(Kwidget *kwidget, bool useEndParams=false, bool isChildKwidget=false)
Add a new Kwidget to the state. This will add the kwidget to the internal state ValueTree and it's pa...
Definition ParameterManager.cpp:51
const ValueTree & getModulationTree()
Definition ParameterManager.cpp:258
bool initialiseKwidgetIDUsageTable(const ValueTree &state, bool repairEnabled)
Definition ParameterManager.cpp:508
const bool isAStaticConnectionDestination(const String &destName)
Returns true if the destName you supplied is the name of a static connection destination.
Definition ParameterManager.h:170
UndoManager * getUndoManager()
Definition ParameterManager.cpp:307
void removeConnection(const String &sourceID, const String &destinationID)
Definition ParameterManager.cpp:116
ValueTree m_customDataTree
Definition ParameterManager.h:317
void removeConnectionsInvolving(const String &kwidgetID)
Definition ParameterManager.cpp:132
AudioProcessorValueTreeState & getProcessorState()
Definition ParameterManager.cpp:305
std::map< Kwidget *, ValueTree > m_kwidgetData
Definition ParameterManager.h:319
static const float OnOffThreshold
The threshold at which a toggle, or "on/off" parameter should change from on to off stage.
Definition ParameterManager.h:45
ValueTree & getCustomDataTree()
Definition ParameterManager.cpp:329
AudioProcessorValueTreeState m_vts
Definition ParameterManager.h:309
static const float DefaultModDepth
Definition ParameterManager.h:40
ParameterManager(AudioProcessor &processor, int numParams=1000, const String &namePrefix="#")
Definition ParameterManager.cpp:6
Definition AirAbsorptionFilter.cpp:2
static const Identifier modulatorIndex
Definition XmlType.h:48
static const Identifier id
Definition XmlType.h:41
static const Identifier destination
Definition XmlType.h:46
static const Identifier value
Definition XmlType.h:42
static const Identifier source
Definition XmlType.h:45
static const Identifier depth
Definition XmlType.h:49
static const Identifier param
Definition XmlType.h:47
static const Identifier polarity
Definition XmlType.h:50
static const Identifier linkIndex
Definition XmlType.h:44
static const Identifier type
Definition XmlType.h:43
static const Identifier connection
Definition XmlType.h:25
static const Identifier kwidgets
Definition XmlType.h:22
static const Identifier params
Definition XmlType.h:18
static const Identifier modulation
Definition XmlType.h:27
static const Identifier connections
Definition XmlType.h:24
static const Identifier modulations
Definition XmlType.h:26
Common names for storing data in a ValueTree.
Definition XmlType.h:7