commit c4cf8200fd9551b8a63c25fe0614f2f495c830ae
parent 4b7e6cc5dff6da8a748862c2b386c35826ca6d6b
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Tue, 27 Aug 2024 19:39:40 +0200
add ability to use custom part name formatting when creating parameters
Diffstat:
4 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/source/jucePluginLib/controller.cpp b/source/jucePluginLib/controller.cpp
@@ -42,10 +42,17 @@ namespace pluginLib
m_softKnobs.clear();
}
- void Controller::registerParams(juce::AudioProcessor& _processor)
+ void Controller::registerParams(juce::AudioProcessor& _processor, Parameter::PartFormatter _partFormatter/* = nullptr*/)
{
auto globalParams = std::make_unique<juce::AudioProcessorParameterGroup>("global", "Global", "|");
+ if(!_partFormatter)
+ {
+ _partFormatter = [](const uint8_t& _part, bool)
+ {
+ return juce::String("Ch ") + juce::String(_part + 1);
+ };
+ }
std::map<ParamIndex, int> knownParameterIndices;
for (uint8_t part = 0; part < getPartCount(); part++)
@@ -53,7 +60,7 @@ namespace pluginLib
m_paramsByParamType[part].reserve(m_descriptions.getDescriptions().size());
const auto partNumber = juce::String(part + 1);
- auto group = std::make_unique<juce::AudioProcessorParameterGroup>("ch" + partNumber, "Ch " + partNumber, "|");
+ auto group = std::make_unique<juce::AudioProcessorParameterGroup>("ch" + partNumber, _partFormatter(part, false), "|");
for (const auto& desc : m_descriptions.getDescriptions())
{
@@ -69,7 +76,7 @@ namespace pluginLib
uid = ++itKnownParamIdx->second;
std::unique_ptr<Parameter> p;
- p.reset(createParameter(*this, desc, part, uid));
+ p.reset(createParameter(*this, desc, part, uid, _partFormatter));
if(uid > 0)
{
@@ -608,8 +615,8 @@ namespace pluginLib
return result;
}
- Parameter* Controller::createParameter(Controller& _controller, const Description& _desc, uint8_t _part, int _uid)
+ Parameter* Controller::createParameter(Controller& _controller, const Description& _desc, const uint8_t _part, const int _uid, const Parameter::PartFormatter& _partFormatter)
{
- return new Parameter(_controller, _desc, _part, _uid);
+ return new Parameter(_controller, _desc, _part, _uid, _partFormatter);
}
}
diff --git a/source/jucePluginLib/controller.h b/source/jucePluginLib/controller.h
@@ -110,8 +110,8 @@ namespace pluginLib
Processor& getProcessor() const { return m_processor; }
protected:
- virtual Parameter* createParameter(Controller& _controller, const Description& _desc, uint8_t _part, int _uid);
- void registerParams(juce::AudioProcessor& _processor);
+ virtual Parameter* createParameter(Controller& _controller, const Description& _desc, uint8_t _part, int _uid, const Parameter::PartFormatter& _partFormatter);
+ void registerParams(juce::AudioProcessor& _processor, Parameter::PartFormatter _partFormatter = nullptr);
void sendSysEx(const pluginLib::SysEx &) const;
bool sendSysEx(const std::string& _packetName) const;
diff --git a/source/jucePluginLib/parameter.cpp b/source/jucePluginLib/parameter.cpp
@@ -4,8 +4,8 @@
namespace pluginLib
{
- Parameter::Parameter(Controller& _controller, const Description& _desc, const uint8_t _partNum, const int _uniqueId)
- : juce::RangedAudioParameter(genId(_desc, _partNum, _uniqueId), "Ch " + juce::String(_partNum + 1) + " " + _desc.displayName)
+ Parameter::Parameter(Controller& _controller, const Description& _desc, const uint8_t _partNum, const int _uniqueId, const PartFormatter& _partFormatter)
+ : juce::RangedAudioParameter(genId(_desc, _partNum, _uniqueId), _partFormatter(_partNum, _desc.isNonPartSensitive()) + " " + _desc.displayName)
, m_controller(_controller)
, m_desc(_desc)
, m_part(_partNum)
diff --git a/source/jucePluginLib/parameter.h b/source/jucePluginLib/parameter.h
@@ -16,6 +16,8 @@ namespace pluginLib
class Parameter : juce::Value::Listener, public juce::RangedAudioParameter
{
public:
+ using PartFormatter = std::function<juce::String(uint8_t, bool)>; // part, non-part-exclusive
+
enum class Origin
{
Unknown,
@@ -30,7 +32,7 @@ namespace pluginLib
Event<Parameter*, ParameterLinkType> onLinkStateChanged;
Event<Parameter*> onValueChanged;
- Parameter(Controller& _controller, const Description& _desc, uint8_t _partNum, int _uniqueId);
+ Parameter(Controller& _controller, const Description& _desc, uint8_t _partNum, int _uniqueId, const PartFormatter& _partFormatter);
juce::Value& getValueObject() { return m_value; }