1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-11 23:54:18 +00:00

AudioPluginHost: Allow selecting presets

This commit is contained in:
reuk 2023-01-05 14:35:16 +00:00
parent 1bc268de70
commit 079c69aee7
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C

View file

@ -284,32 +284,17 @@ private:
//==============================================================================
struct ProgramAudioProcessorEditor : public AudioProcessorEditor
{
ProgramAudioProcessorEditor (AudioProcessor& p) : AudioProcessorEditor (p)
explicit ProgramAudioProcessorEditor (AudioProcessor& p)
: AudioProcessorEditor (p)
{
setOpaque (true);
addAndMakeVisible (panel);
addAndMakeVisible (listBox);
listBox.updateContent();
Array<PropertyComponent*> programs;
const auto rowHeight = listBox.getRowHeight();
auto numPrograms = p.getNumPrograms();
int totalHeight = 0;
for (int i = 0; i < numPrograms; ++i)
{
auto name = p.getProgramName (i).trim();
if (name.isEmpty())
name = "Unnamed";
auto pc = new PropertyComp (name, p);
programs.add (pc);
totalHeight += pc->getPreferredHeight();
}
panel.addProperties (programs);
setSize (400, jlimit (25, 400, totalHeight));
setSize (400, jlimit (rowHeight, 400, p.getNumPrograms() * rowHeight));
}
void paint (Graphics& g) override
@ -319,33 +304,58 @@ private:
void resized() override
{
panel.setBounds (getLocalBounds());
listBox.setBounds (getLocalBounds());
}
private:
struct PropertyComp : public PropertyComponent,
private AudioProcessorListener
class Model : public ListBoxModel
{
PropertyComp (const String& name, AudioProcessor& p) : PropertyComponent (name), owner (p)
public:
Model (Component& o, AudioProcessor& p)
: owner (o), proc (p) {}
int getNumRows() override
{
owner.addListener (this);
return proc.getNumPrograms();
}
~PropertyComp() override
void paintListBoxItem (int rowNumber,
Graphics& g,
int width,
int height,
bool rowIsSelected) override
{
owner.removeListener (this);
const auto textColour = owner.findColour (ListBox::textColourId);
if (rowIsSelected)
{
const auto defaultColour = owner.findColour (ListBox::backgroundColourId);
const auto c = rowIsSelected ? defaultColour.interpolatedWith (textColour, 0.5f)
: defaultColour;
g.fillAll (c);
}
g.setColour (textColour);
g.drawText (proc.getProgramName (rowNumber),
Rectangle<int> { width, height }.reduced (2),
Justification::left,
true);
}
void refresh() override {}
void audioProcessorChanged (AudioProcessor*, const ChangeDetails&) override {}
void audioProcessorParameterChanged (AudioProcessor*, int, float) override {}
void selectedRowsChanged (int row) override
{
if (0 <= row)
proc.setCurrentProgram (row);
}
AudioProcessor& owner;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyComp)
private:
Component& owner;
AudioProcessor& proc;
};
PropertyPanel panel;
Model model { *this, *getAudioProcessor() };
ListBox listBox { "Programs", &model };
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProgramAudioProcessorEditor)
};