Browse Source

Fixed some bugs in GenericAudioProcessorEditor

tags/2021-05-28
Tom Poole 7 years ago
parent
commit
208c7923dc
3 changed files with 58 additions and 39 deletions
  1. +18
    -19
      modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp
  2. +1
    -0
      modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h
  3. +39
    -20
      modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp

+ 18
- 19
modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp View File

@@ -42,26 +42,28 @@ class LegacyAudioParameter : public AudioProcessorParameter
{
public:
LegacyAudioParameter (AudioProcessor& audioProcessorToUse, int audioParameterIndex)
: audioProcessor (audioProcessorToUse), idx (audioParameterIndex)
{
jassert (idx < audioProcessor.getNumParameters());
processor = &audioProcessorToUse;
parameterIndex = audioParameterIndex;
jassert (parameterIndex < processor->getNumParameters());
}
//==============================================================================
float getValue() const override { return audioProcessor.getParameter (idx); }
void setValue (float newValue) override { audioProcessor.setParameter (idx, newValue); }
float getDefaultValue() const override { return audioProcessor.getParameterDefaultValue (idx); }
String getName (int maxLen) const override { return audioProcessor.getParameterName (idx, maxLen); }
String getLabel() const override { return audioProcessor.getParameterLabel (idx); }
int getNumSteps() const override { return audioProcessor.getParameterNumSteps (idx); }
bool isDiscrete() const override { return audioProcessor.isParameterDiscrete (idx); }
float getValue() const override { return processor->getParameter (parameterIndex); }
void setValue (float newValue) override { processor->setParameter (parameterIndex, newValue); }
float getDefaultValue() const override { return processor->getParameterDefaultValue (parameterIndex); }
String getName (int maxLen) const override { return processor->getParameterName (parameterIndex, maxLen); }
String getLabel() const override { return processor->getParameterLabel (parameterIndex); }
int getNumSteps() const override { return processor->getParameterNumSteps (parameterIndex); }
bool isDiscrete() const override { return processor->isParameterDiscrete (parameterIndex); }
bool isBoolean() const override { return false; }
bool isOrientationInverted() const override { return audioProcessor.isParameterOrientationInverted (idx); }
bool isAutomatable() const override { return audioProcessor.isParameterAutomatable (idx); }
bool isMetaParameter() const override { return audioProcessor.isMetaParameter (idx); }
Category getCategory() const override { return audioProcessor.getParameterCategory (idx); }
String getCurrentValueAsText() const override { return audioProcessor.getParameterText (idx); }
String getParamID() const { return audioProcessor.getParameterID (idx); }
bool isOrientationInverted() const override { return processor->isParameterOrientationInverted (parameterIndex); }
bool isAutomatable() const override { return processor->isParameterAutomatable (parameterIndex); }
bool isMetaParameter() const override { return processor->isMetaParameter (parameterIndex); }
Category getCategory() const override { return processor->getParameterCategory (parameterIndex); }
String getCurrentValueAsText() const override { return processor->getParameterText (parameterIndex); }
String getParamID() const { return processor->getParameterID (parameterIndex); }
//==============================================================================
float getValueForText (const String&) const override
@@ -88,7 +90,7 @@ public:
{
if (auto* legacy = dynamic_cast<LegacyAudioParameter*> (param))
{
return legacy->idx;
return legacy->parameterIndex;
}
else
{
@@ -119,9 +121,6 @@ public:
return String (param->getParameterIndex());
}
private:
AudioProcessor& audioProcessor;
int idx;
};
//==============================================================================


+ 1
- 0
modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h View File

@@ -287,6 +287,7 @@ public:
private:
//==============================================================================
friend class AudioProcessor;
friend class LegacyAudioParameter;
AudioProcessor* processor = nullptr;
int parameterIndex = -1;
CriticalSection listenerLock;


+ 39
- 20
modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp View File

@@ -28,20 +28,27 @@ namespace juce
{
class ParameterListener : private AudioProcessorParameter::Listener,
private AudioProcessorListener,
private Timer
{
public:
ParameterListener (AudioProcessorParameter& param)
: parameter (param)
ParameterListener (AudioProcessor& p, AudioProcessorParameter& param)
: processor (p), parameter (param)
{
parameter.addListener (this);
if (LegacyAudioParameter::isLegacy (&parameter))
processor.addListener (this);
else
parameter.addListener (this);
startTimer (100);
}
virtual ~ParameterListener()
{
parameter.removeListener (this);
if (LegacyAudioParameter::isLegacy (&parameter))
processor.removeListener (this);
else
parameter.removeListener (this);
}
AudioProcessorParameter& getParameter() noexcept
@@ -52,6 +59,7 @@ public:
virtual void handleNewParameterValue() = 0;
private:
//==============================================================================
void parameterValueChanged (int, float) override
{
parameterValueHasChanged = 1;
@@ -59,6 +67,16 @@ private:
void parameterGestureChanged (int, bool) override {}
//==============================================================================
void audioProcessorParameterChanged (AudioProcessor*, int index, float) override
{
if (index == parameter.getParameterIndex())
parameterValueHasChanged = 1;
}
void audioProcessorChanged (AudioProcessor*) override {}
//==============================================================================
void timerCallback() override
{
if (parameterValueHasChanged.compareAndSetBool (0, 1))
@@ -72,6 +90,7 @@ private:
}
}
AudioProcessor& processor;
AudioProcessorParameter& parameter;
Atomic<int> parameterValueHasChanged { 0 };
@@ -82,8 +101,8 @@ class BooleanParameterComponent final : public Component,
private ParameterListener
{
public:
BooleanParameterComponent (AudioProcessorParameter& param)
: ParameterListener (param)
BooleanParameterComponent (AudioProcessor& processor, AudioProcessorParameter& param)
: ParameterListener (processor, param)
{
// Set the initial value.
handleNewParameterValue();
@@ -135,8 +154,8 @@ class SwitchParameterComponent final : public Component,
private ParameterListener
{
public:
SwitchParameterComponent (AudioProcessorParameter& param)
: ParameterListener (param)
SwitchParameterComponent (AudioProcessor& processor, AudioProcessorParameter& param)
: ParameterListener (processor, param)
{
auto* leftButton = buttons.add (new TextButton());
auto* rightButton = buttons.add (new TextButton());
@@ -240,8 +259,8 @@ class ChoiceParameterComponent final : public Component,
private ParameterListener
{
public:
ChoiceParameterComponent (AudioProcessorParameter& param)
: ParameterListener (param),
ChoiceParameterComponent (AudioProcessor& processor, AudioProcessorParameter& param)
: ParameterListener (processor, param),
parameterValues (getParameter().getAllValueStrings())
{
box.addItemList (parameterValues, 1);
@@ -302,8 +321,8 @@ class SliderParameterComponent final : public Component,
private ParameterListener
{
public:
SliderParameterComponent (AudioProcessorParameter& param)
: ParameterListener (param)
SliderParameterComponent (AudioProcessor& processor, AudioProcessorParameter& param)
: ParameterListener (processor, param)
{
if (getParameter().getNumSteps() != AudioProcessor::getDefaultNumParameterSteps())
slider.setRange (0.0, 1.0, 1.0 / (getParameter().getNumSteps() - 1.0));
@@ -392,7 +411,7 @@ private:
class ParameterDisplayComponent : public Component
{
public:
ParameterDisplayComponent (AudioProcessorParameter& param)
ParameterDisplayComponent (AudioProcessor& processor, AudioProcessorParameter& param)
: parameter (param)
{
parameterName.setText (parameter.getName (128), dontSendNotification);
@@ -408,24 +427,24 @@ public:
// marking a parameter as boolean. If you want consistency across
// all formats then it might be best to use a
// SwitchParameterComponent instead.
parameterComp.reset (new BooleanParameterComponent (param));
parameterComp.reset (new BooleanParameterComponent (processor, param));
}
else if (param.getNumSteps() == 2)
{
// Most hosts display any parameter with just two steps as a switch.
parameterComp.reset (new SwitchParameterComponent (param));
parameterComp.reset (new SwitchParameterComponent (processor, param));
}
else if (! param.getAllValueStrings().isEmpty())
{
// If we have a list of strings to represent the different states a
// parameter can be in then we should present a dropdown allowing a
// user to pick one of them.
parameterComp.reset (new ChoiceParameterComponent (param));
parameterComp.reset (new ChoiceParameterComponent (processor, param));
}
else
{
// Everything else can be represented as a slider.
parameterComp.reset (new SliderParameterComponent (param));
parameterComp.reset (new SliderParameterComponent (processor, param));
}
addAndMakeVisible (parameterComp.get());
@@ -455,11 +474,11 @@ private:
class ParametersPanel : public Component
{
public:
ParametersPanel (const Array<AudioProcessorParameter*>& parameters)
ParametersPanel (AudioProcessor& processor, const Array<AudioProcessorParameter*>& parameters)
{
for (auto* param : parameters)
if (param->isAutomatable())
addAndMakeVisible (paramComponents.add (new ParameterDisplayComponent (*param)));
addAndMakeVisible (paramComponents.add (new ParameterDisplayComponent (processor, *param)));
if (auto* comp = paramComponents[0])
setSize (comp->getWidth(), comp->getHeight() * paramComponents.size());
@@ -499,7 +518,7 @@ struct GenericAudioProcessorEditor::Pimpl
owner.setOpaque (true);
view.setViewedComponent (new ParametersPanel (juceParameters.params));
view.setViewedComponent (new ParametersPanel (*p, juceParameters.params));
owner.addAndMakeVisible (view);
view.setScrollBarsShown (true, false);


Loading…
Cancel
Save