I have a slider that controls preset switching in my plugin. It uses a slider Attachment to receive changes from the DAW
but I also have a checkbox for “ignore preset changes” (so the user can concentrate on editing the current preset without a switch being caused by the DAW)
Preset changing disabling already works in my code but:
I need to prevent the preset change slider from moving when I am ignoring preset changes.
Is there a way to do this?
I am trying this:
// THE IS NOT PART OF THE APVTS - it is a meta control
addAndMakeVisible(disablePresetSliderCheckbox);
disablePresetSliderCheckbox.setButtonText("Disable Preset Slider");
disablePresetSliderCheckbox.onClick = [this] {
// Update the value of allowPresetChanges in the processor
audioProcessor.setAllowPresetChanges(!disablePresetSliderCheckbox.getToggleState());
if (disablePresetSliderCheckbox.getToggleState())
{
// Detach the slider attachment to prevent the slider from moving
presetSelectionSliderAttachment.reset();
}
else
{
// Re-create the slider attachment to allow the slider to move and change presets
presetSelectionSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
audioProcessor.apvts, "presetSelection", presetSlider);
}
};
but when I re-enable preset slider the parameter changes from the DAW do not control the slider anymore. (disabling the slider works fine)
it is original created in Audio Processor like this
params.push_back(std::make_unique<juce::AudioParameterInt>(
"presetSelection", // Parameter ID
"Preset Selection", // Parameter name
0, // Minimum value
64, // Maximum value (ensure it's at least 0)
0 // Default value
));
in processor .h
private:
juce::AudioProcessorValueTreeState::ParameterLayout createParameters();
in processor.cpp:
AudioProcessorValueTreeState::ParameterLayout NewProjectAudioProcessor::createParameters()
{
std::vector<std::unique_ptr<juce::RangedAudioParameter>> params;
DBG("preset manager num presets:" << maxPresetIndex);
params.push_back(std::make_unique<juce::AudioParameterInt>(
"presetSelection", // Parameter ID
"Preset Selection", // Parameter name
0, // Minimum value
64, // Maximum value (ensure it's at least 0)
0 // Default value
));
etc
return { params.begin(), params.end() };
}