mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
GenericAudioProcessorEditor: Refresh parameter value text when parameter info changes
When plugins change their 'parameter info' this often means that their previous parameter text is no longer valid, so we should fetch new text to represent the parameter value. This change was primarily tested with Kontakt.
This commit is contained in:
parent
70b667281f
commit
ad94a69263
1 changed files with 28 additions and 22 deletions
|
|
@ -97,13 +97,19 @@ private:
|
|||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterListener)
|
||||
};
|
||||
|
||||
class ParameterComponent : public Component,
|
||||
public ParameterListener
|
||||
{
|
||||
public:
|
||||
using ParameterListener::ParameterListener;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class BooleanParameterComponent final : public Component,
|
||||
private ParameterListener
|
||||
class BooleanParameterComponent : public ParameterComponent
|
||||
{
|
||||
public:
|
||||
BooleanParameterComponent (AudioProcessor& proc, AudioProcessorParameter& param)
|
||||
: ParameterListener (proc, param)
|
||||
: ParameterComponent (proc, param)
|
||||
{
|
||||
// Set the initial value.
|
||||
handleNewParameterValue();
|
||||
|
|
@ -122,12 +128,12 @@ public:
|
|||
button.setBounds (area.reduced (0, 10));
|
||||
}
|
||||
|
||||
private:
|
||||
void handleNewParameterValue() override
|
||||
{
|
||||
button.setToggleState (isParameterOn(), dontSendNotification);
|
||||
}
|
||||
|
||||
private:
|
||||
void buttonClicked()
|
||||
{
|
||||
if (isParameterOn() != button.getToggleState())
|
||||
|
|
@ -146,12 +152,11 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class SwitchParameterComponent final : public Component,
|
||||
private ParameterListener
|
||||
class SwitchParameterComponent : public ParameterComponent
|
||||
{
|
||||
public:
|
||||
SwitchParameterComponent (AudioProcessor& proc, AudioProcessorParameter& param)
|
||||
: ParameterListener (proc, param)
|
||||
: ParameterComponent (proc, param)
|
||||
{
|
||||
for (auto& button : buttons)
|
||||
{
|
||||
|
|
@ -186,7 +191,6 @@ public:
|
|||
button.setBounds (area.removeFromLeft (80));
|
||||
}
|
||||
|
||||
private:
|
||||
void handleNewParameterValue() override
|
||||
{
|
||||
bool newState = isParameterOn();
|
||||
|
|
@ -198,6 +202,7 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void rightButtonChanged()
|
||||
{
|
||||
auto buttonState = buttons[1].getToggleState();
|
||||
|
|
@ -249,12 +254,11 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class ChoiceParameterComponent final : public Component,
|
||||
private ParameterListener
|
||||
class ChoiceParameterComponent : public ParameterComponent
|
||||
{
|
||||
public:
|
||||
ChoiceParameterComponent (AudioProcessor& proc, AudioProcessorParameter& param)
|
||||
: ParameterListener (proc, param),
|
||||
: ParameterComponent (proc, param),
|
||||
parameterValues (getParameter().getAllValueStrings())
|
||||
{
|
||||
box.addItemList (parameterValues, 1);
|
||||
|
|
@ -312,12 +316,11 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class SliderParameterComponent final : public Component,
|
||||
private ParameterListener
|
||||
class SliderParameterComponent : public ParameterComponent
|
||||
{
|
||||
public:
|
||||
SliderParameterComponent (AudioProcessor& proc, AudioProcessorParameter& param)
|
||||
: ParameterListener (proc, param)
|
||||
: ParameterComponent (proc, param)
|
||||
{
|
||||
if (getParameter().getNumSteps() != AudioProcessor::getDefaultNumParameterSteps())
|
||||
slider.setRange (0.0, 1.0, 1.0 / (getParameter().getNumSteps() - 1.0));
|
||||
|
|
@ -354,12 +357,6 @@ public:
|
|||
slider.setBounds (area);
|
||||
}
|
||||
|
||||
private:
|
||||
void updateTextDisplay()
|
||||
{
|
||||
valueLabel.setText (getParameter().getCurrentValueAsText(), dontSendNotification);
|
||||
}
|
||||
|
||||
void handleNewParameterValue() override
|
||||
{
|
||||
if (! isDragging)
|
||||
|
|
@ -369,6 +366,12 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void updateTextDisplay()
|
||||
{
|
||||
valueLabel.setText (getParameter().getCurrentValueAsText(), dontSendNotification);
|
||||
}
|
||||
|
||||
void sliderValueChanged()
|
||||
{
|
||||
auto newVal = (float) slider.getValue();
|
||||
|
|
@ -458,9 +461,9 @@ private:
|
|||
AudioProcessorEditor& editor;
|
||||
AudioProcessorParameter& parameter;
|
||||
Label parameterName, parameterLabel;
|
||||
std::unique_ptr<Component> parameterComp;
|
||||
std::unique_ptr<ParameterComponent> parameterComp;
|
||||
|
||||
std::unique_ptr<Component> createParameterComp (AudioProcessor& processor) const
|
||||
std::unique_ptr<ParameterComponent> createParameterComp (AudioProcessor& processor) const
|
||||
{
|
||||
// The AU, AUv3 and VST (only via a .vstxml file) SDKs support
|
||||
// marking a parameter as boolean. If you want consistency across
|
||||
|
|
@ -501,6 +504,9 @@ private:
|
|||
{
|
||||
parameterName .setText (parameter.getName (128), dontSendNotification);
|
||||
parameterLabel.setText (parameter.getLabel(), dontSendNotification);
|
||||
|
||||
if (auto* p = parameterComp.get())
|
||||
p->handleNewParameterValue();
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterDisplayComponent)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue