Krotos Modules 3
Loading...
Searching...
No Matches
KwidgetGUI_ConvolutionReverb.cpp
Go to the documentation of this file.
1namespace krotos
2{
4 {
5 using P = Parameters;
6
10
11 addAndMakeVisible(m_impulseCombo);
12 m_impulsePath = *getOwner().getCustomParameter(P::ImpulsePath);
13
14 addAndMakeVisible(m_bypass);
16
18
20 m_impulseCombo.setText(irFile.getFileNameWithoutExtension(), NotificationType::dontSendNotification);
21
22 m_impulsePath.valueChanged = [this](const var& value) {
23 m_impulseCombo.setText(extractFileName(value.toString()), NotificationType::dontSendNotification);
24 };
25
26 m_impulseCombo.onChange = [this] {
27 int selectedItemIdx = m_impulseCombo.getSelectedItemIndex();
28
29 if (selectedItemIdx != -1)
30 {
31 // Update impulsePath with the selected item's file path
32 m_impulsePath.setValue(m_itemInfo[selectedItemIdx + 1]);
33 }
34 };
35 }
36
38 {
40 Rectangle<int> bounds = m_currentBounds;
41 FlexBox fb;
42
43 fb.flexDirection = FlexBox::Direction::row;
44 fb.flexWrap = FlexBox::Wrap::wrap;
45 fb.alignContent = FlexBox::AlignContent::stretch;
46 fb.alignItems = FlexBox::AlignItems::stretch;
47 fb.justifyContent = FlexBox::JustifyContent::center;
48
49 FlexItem::Margin margin{2.0f, 2.0f, 2.0f, 2.0f};
50 fb.items.add(FlexItem(m_predelay).withMargin(margin).withMinWidth(20).withMinHeight(80).withFlex(1.0f));
51 fb.items.add(FlexItem(m_wetGain).withMargin(margin).withMinWidth(20).withMinHeight(80).withFlex(1.0f));
52 fb.items.add(FlexItem(m_mix).withMargin(margin).withMinWidth(20).withMinHeight(80).withFlex(1.0f));
53
54 auto knobBounds = bounds;
55 auto comboBounds = knobBounds.removeFromTop(30);
56
57 fb.performLayout(knobBounds);
58 m_impulseCombo.setBounds(comboBounds.removeFromLeft(static_cast<int>(getWidth() * 0.8f)));
59 m_bypass.setBounds(comboBounds);
60 }
61
63 {
65 // Clear existing items
66 m_impulseCombo.clear();
67
68 PopupMenu* rootMenu = m_impulseCombo.getRootMenu();
69
70 if (rootDirectory.exists() && rootDirectory.isDirectory())
71 {
72 addFoldersAsSubMenus(rootMenu, rootDirectory);
73 }
74 }
75
76 void KwidgetGUI_ConvolutionReverb::addFoldersAsSubMenus(PopupMenu* parentMenu, const File& directory)
77 {
78 DirectoryIterator dirIter(directory, false, "*", File::findDirectories);
79 std::vector<File> dirs;
80
81 while (dirIter.next())
82 {
83 // Find folders one by one
84 const File& dir = dirIter.getFile();
85
86 dirs.push_back(dir);
87 }
88
89 std::sort(dirs.begin(), dirs.end());
90
91 for (auto& dir : dirs)
92 {
93 PopupMenu subMenu;
94 // Add IR files within current subMenu
95 populatePopupSubMenu(subMenu, dir);
96
97 // Recursively check subDirectories
98 addFoldersAsSubMenus(&subMenu, dir);
99
100 // Add the subMenu to the parentMenu
101 parentMenu->addSubMenu(dir.getFileName() + " >", subMenu);
102 }
103 }
104
105 void KwidgetGUI_ConvolutionReverb::populatePopupSubMenu(PopupMenu& menu, const File& directory)
106 {
107 DirectoryIterator dirIter(directory, false, "*", File::findFiles);
108 std::vector<File> files;
109
110 while (dirIter.next())
111 {
112 const File& file = dirIter.getFile();
113
114 // Check if the file has a valid extension
115 if (file.hasFileExtension("wav") || file.hasFileExtension("aif"))
116 {
117 files.push_back(file);
118 }
119 }
120
121 std::sort(files.begin(), files.end());
122
123 for (auto& file : files)
124 {
125 // Add file-item to subMenu
126 menu.addItem(m_itemCnt, file.getFileNameWithoutExtension());
127
128 // Store the full path in the map, associated with the itemResultID
129 m_itemInfo.set(m_itemCnt, file.getFullPathName());
130
131 m_itemCnt++;
132 }
133 }
134
136 {
137 File file(fullPath);
138 String fileNameWithoutExtension = file.getFileNameWithoutExtension();
139 return fileNameWithoutExtension;
140 }
141
142} // namespace krotos
static String convertFilePathString(const String &)
Definition AssetManager.cpp:583
std::function< void(const var &)> valueChanged
Definition CustomParameter.h:60
const var & getValue() const
Definition CustomParameter.cpp:39
void setValue(const var &newValue, bool selfUpdate=false)
Definition CustomParameter.cpp:46
static String getDefaultImpulsePath()
Definition Kwidget_ConvolutionReverb.cpp:51
void populateComboBox()
Definition KwidgetGUI_ConvolutionReverb.cpp:62
ToggleButton m_bypass
Definition KwidgetGUI_ConvolutionReverb.h:25
void populatePopupSubMenu(PopupMenu &menu, const File &directory)
Definition KwidgetGUI_ConvolutionReverb.cpp:105
AttachedSlider m_predelay
Definition KwidgetGUI_ConvolutionReverb.h:20
void resized() override
Definition KwidgetGUI_ConvolutionReverb.cpp:37
String extractFileName(const String &fullPath)
Definition KwidgetGUI_ConvolutionReverb.cpp:135
Kwidget_ConvolutionReverb::Parameters Parameters
Definition KwidgetGUI_ConvolutionReverb.h:6
AttachedSlider m_mix
Definition KwidgetGUI_ConvolutionReverb.h:20
ComboBox m_impulseCombo
Definition KwidgetGUI_ConvolutionReverb.h:22
KwidgetGUI_ConvolutionReverb(Kwidget &owner)
Definition KwidgetGUI_ConvolutionReverb.cpp:3
void addFoldersAsSubMenus(PopupMenu *parentMenu, const File &directory)
Definition KwidgetGUI_ConvolutionReverb.cpp:76
std::unique_ptr< ButtonParameterAttachment > m_bypassAttachment
Definition KwidgetGUI_ConvolutionReverb.h:26
AttachedSlider m_wetGain
Definition KwidgetGUI_ConvolutionReverb.h:20
CustomParameter m_impulsePath
Definition KwidgetGUI_ConvolutionReverb.h:23
int m_itemCnt
Definition KwidgetGUI_ConvolutionReverb.h:28
HashMap< int, String > m_itemInfo
Definition KwidgetGUI_ConvolutionReverb.h:29
Interface for a UI Component that controls a KwidgetProcessor.
Definition KwidgetGUI.h:24
std::unique_ptr< SliderParameterAttachment > createParameterAttachment(const String &paramID, Slider &slider)
Definition KwidgetGUI.cpp:72
Kwidget & getOwner()
Definition KwidgetGUI.cpp:106
void addAttachedComponent(AttachedComponentType &component, const String &paramID, bool isDraggable=true)
Definition KwidgetGUI.h:112
Rectangle< int > m_currentBounds
Definition KwidgetGUI.h:146
void resized() override
Definition KwidgetGUI.cpp:45
Definition Kwidget.h:8
CustomParameter * getCustomParameter(const String &parameterID)
Definition Kwidget.cpp:188
Definition AirAbsorptionFilter.cpp:2