commit a32a3b3a1865906b81e6299a174e372dea473c03
parent be80626bb5aacf555b8e014685534671d6728ae3
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Sat, 14 Dec 2024 16:44:34 +0100
add ability to bind a parameter to a label
Diffstat:
6 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/source/jucePluginEditorLib/pluginEditor.cpp b/source/jucePluginEditorLib/pluginEditor.cpp
@@ -682,6 +682,12 @@ namespace jucePluginEditorLib
return true;
}
+ bool Editor::bindParameter(juce::Label& _target, int _parameterIndex)
+ {
+ m_binding.bind(_target, _parameterIndex);
+ return true;
+ }
+
juce::Value* Editor::getParameterValue(int _parameterIndex, uint8_t _part)
{
return m_processor.getController().getParamValueObject(_parameterIndex, _part);
diff --git a/source/jucePluginEditorLib/pluginEditor.h b/source/jucePluginEditorLib/pluginEditor.h
@@ -110,6 +110,7 @@ namespace jucePluginEditorLib
bool bindParameter(juce::Button& _target, int _parameterIndex) override;
bool bindParameter(juce::ComboBox& _target, int _parameterIndex) override;
bool bindParameter(juce::Slider& _target, int _parameterIndex) override;
+ bool bindParameter(juce::Label& _target, int _parameterIndex) override;
juce::Value* getParameterValue(int _parameterIndex, uint8_t _part) override;
Processor& m_processor;
diff --git a/source/jucePluginLib/parameterbinding.cpp b/source/jucePluginLib/parameterbinding.cpp
@@ -263,6 +263,28 @@ namespace pluginLib
addBinding(p);
}
+ void ParameterBinding::bind(juce::Label& _label, const uint32_t _param)
+ {
+ bind(_label, _param, CurrentPart);
+ }
+
+ void ParameterBinding::bind(juce::Label& _control, const uint32_t _param, const uint8_t _part)
+ {
+ const auto param = m_controller.getParameter(_param, _part == CurrentPart ? m_controller.getCurrentPart() : _part);
+ if (!param)
+ {
+ assert(false && "Failed to find parameter");
+ return;
+ }
+ const auto listenerId = param->onValueChanged.addListener([this, &_control](const Parameter* _p)
+ {
+ _control.setText(_p->getCurrentValueAsText(), juce::dontSendNotification);
+ });
+ _control.setText(param->getCurrentValueAsText(), juce::dontSendNotification);
+ const BoundParameter p{ param, &_control, _param, _part, listenerId};
+ addBinding(p);
+ }
+
bool ParameterBinding::bind(juce::Component& _component, const uint32_t _param, const uint8_t _part)
{
if(auto* slider = dynamic_cast<juce::Slider*>(&_component))
@@ -280,6 +302,11 @@ namespace pluginLib
bind(*comboBox, _param, _part);
return true;
}
+ if(auto* label = dynamic_cast<juce::Label*>(&_component))
+ {
+ bind(*label, _param, _part);
+ return true;
+ }
assert(false && "unknown component type");
return false;
}
diff --git a/source/jucePluginLib/parameterbinding.h b/source/jucePluginLib/parameterbinding.h
@@ -58,10 +58,12 @@ namespace pluginLib
void bind(juce::Slider& _control, uint32_t _param);
void bind(juce::Slider& _control, uint32_t _param, uint8_t _part);
- void bind(juce::ComboBox &_control, uint32_t _param);
- void bind(juce::ComboBox &_control, uint32_t _param, uint8_t _part);
- void bind(juce::Button &_control, uint32_t _param);
- void bind(juce::Button &_control, uint32_t _param, uint8_t _part);
+ void bind(juce::ComboBox& _control, uint32_t _param);
+ void bind(juce::ComboBox& _control, uint32_t _param, uint8_t _part);
+ void bind(juce::Button& _control, uint32_t _param);
+ void bind(juce::Button& _control, uint32_t _param, uint8_t _part);
+ void bind(juce::Label& _control, uint32_t _param);
+ void bind(juce::Label& _control, uint32_t _param, uint8_t _part);
bool bind(juce::Component& _component, uint32_t _param, uint8_t _part);
diff --git a/source/juceUiLib/editorInterface.h b/source/juceUiLib/editorInterface.h
@@ -15,5 +15,6 @@ namespace genericUI
virtual bool bindParameter(juce::Slider& _target, int _parameterIndex) = 0;
virtual bool bindParameter(juce::Button& _target, int _parameterIndex) = 0;
virtual bool bindParameter(juce::ComboBox& _target, int _parameterIndex) = 0;
+ virtual bool bindParameter(juce::Label& _target, int _parameterIndex) = 0;
};
}
diff --git a/source/juceUiLib/uiObject.cpp b/source/juceUiLib/uiObject.cpp
@@ -165,6 +165,7 @@ namespace genericUI
void UiObject::apply(Editor& _editor, juce::Label& _target)
{
applyT<juce::Label, LabelStyle>(_editor, _target);
+ bindParameter(_editor, _target);
}
void UiObject::apply(Editor& _editor, juce::ScrollBar& _target)