Krotos Modules 3
Loading...
Searching...
No Matches
ParameterManager.h
Go to the documentation of this file.
1namespace krotos
2{
3 //==============================================================================
24 class ParameterManager final
25 {
26 public:
34 ParameterManager(AudioProcessor& processor,
35 /* If we want this more than 999 we have to rework the
36 parameter naming logic(prefix 0000). */
37 int numParams = 1000,
38 const String& namePrefix = "#");
39
40 static const float DefaultModDepth;
41
45 static const float OnOffThreshold;
46
48 Kwidget* getKwidget(const String& kwidgetID);
49
65 bool addKwidget(Kwidget* kwidget, bool useEndParams = false, bool isChildKwidget = false);
66
68 void removeKwidget(const String& kwidgetID);
69
71 void clearKwidgets();
72
78 void addConnection(const String& sourceID, const String& destinationID);
79
85 void removeConnection(const String& sourceID, const String& destinationID);
86
88 void removeConnectionsInvolving(const String& kwidgetID);
89
91 void clearConnections();
92
99 bool connectionExists(const String& sourceID, const String& destID);
100
108 ValueTree addModulation(const String& sourceID, int modulatorIdx, const String& destinationID,
109 const String& paramID, float depth = DefaultModDepth,
111
119 void removeModulation(const String& sourceID, int modulatorIdx, const String& destinationID,
120 const String& paramID);
121
123 void removeModulation(ValueTree modulationChildTree);
124
133 void setModulationDepth(const String& sourceID, int modulatorIdx, const String& destinationID,
134 const String& paramID, float depth);
135
144 void setModulationPolarity(const String& src, int modulatorIdx, const String& dest, const String& paramID,
145 KAttachment::Polarity polarity);
146
148 void removeModulationInvolving(const String& kwidgetID);
149
151 void clearModulation();
152
154 void clearModulationExcept(const String& allowedSource);
155
157 ValueTree& getState();
158
159 const ValueTree& getModulationTree();
160
161 const ValueTree& getKwidgetsTree();
162
163 const ValueTree& getConnectionTree() { return m_connectionTree; };
164
170 inline const bool isAStaticConnectionDestination(const String& destName)
171 {
172 return std::find(StaticConnectionDestinations.begin(), StaticConnectionDestinations.end(), destName) !=
174 };
175
183 void setCurrentState(const ValueTree& newState);
184
185 void addNonStaticConnections(juce::ValueTree& newConnectionTree);
186
190 AudioProcessor& getProcessor();
191
195 AudioProcessorValueTreeState& getProcessorState();
196
198 UndoManager* getUndoManager();
199
201 void resetUndoManager();
202
204 void debugState() const;
205
214 void addCustomDataNode(const ValueTree& customDataNode);
215
220 ValueTree& getCustomDataTree();
221
228 bool validateKwidgetState(ValueTree& kwidgetTree, ValueTree& paramTree, bool repairEnabled);
229
238 bool initialiseLinkIndexUsageTable(const ValueTree& state, bool repairEnabled);
239
251 bool initialiseKwidgetIDUsageTable(const ValueTree& state, bool repairEnabled);
252
269 String generateKwidgetID(const String& kwidgetType, const String& idModifier = "", int typeInstanceLimit = 0);
270
271 static Result rewriteCustomParameterValue(ValueTree& kwidgetTree, const var& parameterID, const var& newValue,
272 UndoManager* undoManager = nullptr);
273
274 private:
278 static const StringArray StaticConnectionDestinations;
279
280 // One bool for every link index to indicate whether it is used or not
281 std::vector<bool> m_linkIndexAllocation;
282
283 int getUnusedLinkIndex();
284
285 bool flagUsedIndexes(juce::ValueTree& kwidget, bool repairEnabled);
286
287 bool registerKwidget(juce::ValueTree& kwidget, StringArray& kwidgetIDArray, bool repairEnabled);
288
289 void setGenericParameterValue(ValueTree& paramTreeGeneric, int index, var newValue);
290
293
295
296 std::vector<int> findGenericParameters(int numParametersToLink, bool useEndParams);
297 ValueTree createKwidgetTree(Kwidget* k, bool useEndParams = false);
298
299 void attachParameters(Kwidget* kwidget, const ValueTree& kwidgetTree);
300 void detachParameters(Kwidget* kwidget, const ValueTree& kwidgetTree);
301
302 ValueTree getModulationTree(const String& sourceID, int modulatorIdx, const String& destinationID,
303 const String& paramID);
304
305 void copyModulationTree(ValueTree modTree);
306
307 AudioProcessor& m_processor;
308 UndoManager m_undoManager;
309 AudioProcessorValueTreeState m_vts;
310 std::vector<GenericParameter*> m_genericParameters;
311
312 ValueTree m_parentTree;
314 ValueTree m_kwidgetTree;
318
319 std::map<Kwidget*, ValueTree> m_kwidgetData;
320 std::map<String, Kwidget*> m_activeKwidgets;
321
325
326 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ParameterManager)
327 };
328} // namespace krotos
Polarity
Definition KAttachment.h:120
@ Bipolar
Definition KAttachment.h:121
Definition Kwidget.h:8
Holds the overall state of a plugin that uses Kwidgets, including parameters, custom parameters,...
Definition ParameterManager.h:25
bool flagUsedIndexes(juce::ValueTree &kwidget, bool repairEnabled)
Definition ParameterManager.cpp:530
void removeModulationInvolving(const String &kwidgetID)
Definition ParameterManager.cpp:221
void setGenericParameterValue(ValueTree &paramTreeGeneric, 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 & getConnectionTree()
Definition ParameterManager.h:163
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 &paramTree, 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 &paramID, 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 &paramID)
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 &paramID, 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 &paramID, 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
static Result rewriteCustomParameterValue(ValueTree &kwidgetTree, const var &parameterID, const var &newValue, UndoManager *undoManager=nullptr)
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
Definition XmlType.h:40
Definition XmlType.h:15