Krotos Modules 3
Loading...
Searching...
No Matches
ModulationAssigner.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace krotos
7{
8 class ModulationAssignerDropArea;
9 class ModulationAssigner : public juce::TabbedComponent,
10 public juce::ValueTree::Listener,
12 {
13 public:
26 ModulationAssigner(KwidgetAudioProcessor& processor, const StringArray& kwidgetWhitelist = StringArray());
28 void resized() override;
29 void paintOverChildren(Graphics& g) override;
30
39 std::function<void(var desc, String targetModSourceKwidgetID, int targetModulatorIdx,
42
49 DropComponent* addDropComponent(const String& labelText, const String& targetModSourceKwidgetID,
50 int targetModulatorIdx = -1);
51
66 MultiDropComponent* addMultiDropComponent(const String& labelText, const String& targetModSourceKwidgetID,
67 int numModulators, Array<Value> labelValues = Array<Value>());
68
74 void removeDropComponent(const String& kwidgetID);
75
79
85 void attachModTreeListener(const ValueTree& tree);
86
92 void attachKwidgetsTreeListener(const ValueTree& tree);
93
97 std::function<void(ValueTree modulationChildTree)> modulationDeleted;
98
99 Array<Component*> getDropComponents() { return m_dropArea->getChildren(); };
100
105 void addToWhitelist(StringRef KType) { m_whitelist.add(KType); };
106 void addToWhitelist(const StringArray& KTypes) { m_whitelist.addArray(KTypes); };
107 void clearWhitelist() { m_whitelist.clear(); };
108
109 void colourChanged() override;
110
116 void setIndicatorActive(bool isActive);
117
118 private:
120 Identifier m_property;
121
122 StringArray m_whitelist;
123
126 void valueTreePropertyChanged(ValueTree& treeWhosePropertyHasChanged, const Identifier& property) override;
127
128 void valueTreeChildAdded(ValueTree& parentTree, ValueTree& childWhichHasBeenAdded) override;
129
130 void valueTreeChildRemoved(ValueTree& parentTree, ValueTree& childWhichHasBeenRemoved,
131 int indexFromWhichChildWasRemoved) override;
132
133 // KListeners
135 void kwidgetAdded(Kwidget* k) override;
136
138 void kwidgetRemoved(Kwidget* k) override;
139
141 void initialiseData();
142
144 std::unique_ptr<ModulationAssignerDropArea> m_dropArea;
145
146 /* managed array to contain all modulation table objects*/
147 OwnedArray<ModulationAssignerTable> m_modulationTables;
148
151 using ModSourceIndexPair = std::pair<String, int>;
152
159 std::map<ModSourceIndexPair, ModulationAssignerTable*> m_tableMap;
160
168 ModulationAssignerTable* addTable(String label, ModSourceIndexPair modSourceIdx);
169
170 void removeTable(ModSourceIndexPair modSourceIdx);
171
172 void addAssignment(ValueTree assignment);
173
174 const int m_padding{4}, m_rowSize{3};
175 const float m_cornerSize{4.0f};
176 Colour m_borderColour{Colours::grey};
177
178 bool m_indicatorActive{false};
179
181
182 // ============================================================================
183 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ModulationAssigner)
184 };
185} // namespace krotos
A component for dropping draggable juce objects onto.
Definition DropComponent.h:11
Definition KwidgetAudioProcessor.h:12
Definition Kwidget.h:8
Definition ModulationAssigner.h:12
ValueTree m_kwidgetTree
Definition ModulationAssigner.h:119
StringArray m_whitelist
Definition ModulationAssigner.h:122
void attachKwidgetsTreeListener(const ValueTree &tree)
Definition ModulationAssigner.cpp:222
void removeTable(ModSourceIndexPair modSourceIdx)
Definition ModulationAssigner.cpp:197
void valueTreeChildRemoved(ValueTree &parentTree, ValueTree &childWhichHasBeenRemoved, int indexFromWhichChildWasRemoved) override
Definition ModulationAssigner.cpp:270
Array< Component * > getDropComponents()
Definition ModulationAssigner.h:99
std::pair< String, int > ModSourceIndexPair
Definition ModulationAssigner.h:151
void clearWhitelist()
Definition ModulationAssigner.h:107
void colourChanged() override
Definition ModulationAssigner.cpp:29
~ModulationAssigner()
Definition ModulationAssigner.cpp:27
KwidgetAudioProcessor & m_processor
Definition ModulationAssigner.h:180
ValueTree m_modulationParentTree
Definition ModulationAssigner.h:119
std::unique_ptr< ModulationAssignerDropArea > m_dropArea
Definition ModulationAssigner.h:144
const int m_padding
Definition ModulationAssigner.h:174
void removeDropComponent(const String &kwidgetID)
Definition ModulationAssigner.cpp:153
void addAssignment(ValueTree assignment)
Definition ModulationAssigner.cpp:292
ModulationAssigner(KwidgetAudioProcessor &processor, const StringArray &kwidgetWhitelist=StringArray())
Definition ModulationAssigner.cpp:5
DropComponent * addDropComponent(const String &labelText, const String &targetModSourceKwidgetID, int targetModulatorIdx=-1)
Definition ModulationAssigner.cpp:38
Colour m_borderColour
Definition ModulationAssigner.h:176
ModulationAssignerTable * getTable(String id)
Definition ModulationAssigner.cpp:173
void setIndicatorActive(bool isActive)
Sets whether to draw a border around the component to highlight it as a target destination for a drag...
Definition ModulationAssigner.cpp:310
ModulationAssignerTable * addTable(String label, ModSourceIndexPair modSourceIdx)
Definition ModulationAssigner.cpp:184
OwnedArray< ModulationAssignerTable > m_modulationTables
Definition ModulationAssigner.h:147
bool m_indicatorActive
Definition ModulationAssigner.h:178
void kwidgetAdded(Kwidget *k) override
Definition ModulationAssigner.cpp:56
void kwidgetRemoved(Kwidget *k) override
Definition ModulationAssigner.cpp:116
void addToWhitelist(const StringArray &KTypes)
Definition ModulationAssigner.h:106
void resized() override
Definition ModulationAssigner.cpp:164
void valueTreePropertyChanged(ValueTree &treeWhosePropertyHasChanged, const Identifier &property) override
Definition ModulationAssigner.cpp:255
std::map< ModSourceIndexPair, ModulationAssignerTable * > m_tableMap
Definition ModulationAssigner.h:159
const float m_cornerSize
Definition ModulationAssigner.h:175
void initialiseData()
Definition ModulationAssigner.cpp:231
void paintOverChildren(Graphics &g) override
Definition ModulationAssigner.cpp:155
const int m_rowSize
Definition ModulationAssigner.h:174
void attachModTreeListener(const ValueTree &tree)
Definition ModulationAssigner.cpp:213
MultiDropComponent * addMultiDropComponent(const String &labelText, const String &targetModSourceKwidgetID, int numModulators, Array< Value > labelValues=Array< Value >())
Add a multi drop component. This will create a parent with drop components for the given number of mo...
Definition ModulationAssigner.cpp:118
void addToWhitelist(StringRef KType)
Add a kwidget type to the whitelist.
Definition ModulationAssigner.h:105
void valueTreeChildAdded(ValueTree &parentTree, ValueTree &childWhichHasBeenAdded) override
Definition ModulationAssigner.cpp:262
std::function< void(ValueTree modulationChildTree)> modulationDeleted
Definition ModulationAssigner.h:97
Identifier m_property
Definition ModulationAssigner.h:120
std::function< void(var desc, String targetModSourceKwidgetID, int targetModulatorIdx, ModulationAssignerTable *table)> assignModulation
Definition ModulationAssigner.h:41
Definition ModulationAssignerTable.h:9
A simple container for a holding multiple drop components used for assigning modulation to a kwidget ...
Definition MultiDropComponent.h:16
Definition AirAbsorptionFilter.cpp:2
Definition KwidgetAudioProcessor.h:34