gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

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:
Msource/jucePluginEditorLib/pluginEditor.cpp | 6++++++
Msource/jucePluginEditorLib/pluginEditor.h | 1+
Msource/jucePluginLib/parameterbinding.cpp | 27+++++++++++++++++++++++++++
Msource/jucePluginLib/parameterbinding.h | 10++++++----
Msource/juceUiLib/editorInterface.h | 1+
Msource/juceUiLib/uiObject.cpp | 1+
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)