diff --git a/resources/ui/carla_edit.ui b/resources/ui/carla_edit.ui
index 0f5b0e5fa..95a6068c3 100644
--- a/resources/ui/carla_edit.ui
+++ b/resources/ui/carla_edit.ui
@@ -6,8 +6,8 @@
0
0
- 505
- 436
+ 537
+ 535
@@ -170,7 +170,16 @@
0
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
@@ -224,7 +233,16 @@
0
-
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
0
-
@@ -499,7 +517,16 @@ Plugin Name
-
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
2
-
@@ -542,7 +569,16 @@ Plugin Name
-
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
2
-
@@ -597,7 +633,7 @@ Plugin Name
Save State
-
+
:/16x16/document-save.png:/16x16/document-save.png
@@ -611,7 +647,7 @@ Plugin Name
Load State
-
+
:/16x16/document-open.png:/16x16/document-open.png
diff --git a/source/backend/CarlaHost.h b/source/backend/CarlaHost.h
index 31bfdd3f3..7efeedc13 100644
--- a/source/backend/CarlaHost.h
+++ b/source/backend/CarlaHost.h
@@ -182,6 +182,16 @@ typedef struct _CarlaParameterInfo {
*/
const char* unit;
+ /*!
+ * Parameter comment / documentation.
+ */
+ const char* comment;
+
+ /*!
+ * Parameter group name.
+ */
+ const char* groupName;
+
/*!
* Number of scale points.
* @see CarlaScalePointInfo
diff --git a/source/backend/CarlaHostCommon.cpp b/source/backend/CarlaHostCommon.cpp
index 3ed008e59..53b6503eb 100644
--- a/source/backend/CarlaHostCommon.cpp
+++ b/source/backend/CarlaHostCommon.cpp
@@ -66,6 +66,8 @@ _CarlaParameterInfo::_CarlaParameterInfo() noexcept
: name(gNullCharPtr),
symbol(gNullCharPtr),
unit(gNullCharPtr),
+ comment(gNullCharPtr),
+ groupName(gNullCharPtr),
scalePointCount(0) {}
_CarlaParameterInfo::~_CarlaParameterInfo() noexcept
@@ -76,6 +78,10 @@ _CarlaParameterInfo::~_CarlaParameterInfo() noexcept
delete[] symbol;
if (unit != gNullCharPtr)
delete[] unit;
+ if (comment != gNullCharPtr)
+ delete[] comment;
+ if (groupName != gNullCharPtr)
+ delete[] groupName;
}
_CarlaScalePointInfo::_CarlaScalePointInfo() noexcept
diff --git a/source/backend/CarlaPlugin.hpp b/source/backend/CarlaPlugin.hpp
index f0dcba261..1ad9e609c 100644
--- a/source/backend/CarlaPlugin.hpp
+++ b/source/backend/CarlaPlugin.hpp
@@ -296,50 +296,60 @@ public:
/*!
* Get the plugin's label (URI for LV2 plugins).
*/
- virtual void getLabel(char* const strBuf) const noexcept;
+ virtual bool getLabel(char* const strBuf) const noexcept;
/*!
* Get the plugin's maker.
*/
- virtual void getMaker(char* const strBuf) const noexcept;
+ virtual bool getMaker(char* const strBuf) const noexcept;
/*!
* Get the plugin's copyright/license.
*/
- virtual void getCopyright(char* const strBuf) const noexcept;
+ virtual bool getCopyright(char* const strBuf) const noexcept;
/*!
* Get the plugin's (real) name.
*
* @see getName() and setName()
*/
- virtual void getRealName(char* const strBuf) const noexcept;
+ virtual bool getRealName(char* const strBuf) const noexcept;
/*!
* Get the name of the parameter @a parameterId.
*/
- virtual void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept;
+ virtual bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept;
/*!
* Get the symbol of the parameter @a parameterId.
*/
- virtual void getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept;
+ virtual bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept;
/*!
* Get the custom text of the parameter @a parameterId.
* @see PARAMETER_USES_CUSTOM_TEXT
*/
- virtual void getParameterText(const uint32_t parameterId, char* const strBuf) noexcept;
+ virtual bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept;
/*!
* Get the unit of the parameter @a parameterId.
*/
- virtual void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept;
+ virtual bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept;
+
+ /*!
+ * Get the comment (documentation) of the parameter @a parameterId.
+ */
+ virtual bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept;
+
+ /*!
+ * Get the group name of the parameter @a parameterId.
+ */
+ virtual bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept;
/*!
* Get the scalepoint @a scalePointId label of the parameter @a parameterId.
*/
- virtual void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept;
+ virtual bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept;
/*!
* Get the current parameter value of @a parameterId.
@@ -351,14 +361,14 @@ public:
/*!
* Get the name of the program at @a index.
*/
- void getProgramName(const uint32_t index, char* const strBuf) const noexcept;
+ bool getProgramName(const uint32_t index, char* const strBuf) const noexcept;
/*!
* Get the name of the MIDI program at @a index.
*
* @see getMidiProgramInfo()
*/
- void getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept;
+ bool getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept;
/*!
* Get information about the plugin's parameter count.
diff --git a/source/backend/CarlaStandalone.cpp b/source/backend/CarlaStandalone.cpp
index 69aa181cb..442442a17 100644
--- a/source/backend/CarlaStandalone.cpp
+++ b/source/backend/CarlaStandalone.cpp
@@ -1300,6 +1300,18 @@ const CarlaParameterInfo* carla_get_parameter_info(uint pluginId, uint32_t param
retInfo.unit = gNullCharPtr;
}
+ if (retInfo.comment != gNullCharPtr)
+ {
+ delete[] retInfo.comment;
+ retInfo.comment = gNullCharPtr;
+ }
+
+ if (retInfo.groupName != gNullCharPtr)
+ {
+ delete[] retInfo.groupName;
+ retInfo.groupName = gNullCharPtr;
+ }
+
CARLA_SAFE_ASSERT_RETURN(gStandalone.engine != nullptr, &retInfo);
CarlaPlugin* const plugin(gStandalone.engine->getPlugin(pluginId));
@@ -1308,24 +1320,45 @@ const CarlaParameterInfo* carla_get_parameter_info(uint pluginId, uint32_t param
carla_debug("carla_get_parameter_info(%i, %i)", pluginId, parameterId);
char strBuf[STR_MAX+1];
+ carla_zeroChars(strBuf, STR_MAX+1);
retInfo.scalePointCount = plugin->getParameterScalePointCount(parameterId);
- carla_zeroChars(strBuf, STR_MAX+1);
- plugin->getParameterName(parameterId, strBuf);
- retInfo.name = carla_strdup_safe(strBuf);
+ if (plugin->getParameterName(parameterId, strBuf))
+ {
+ retInfo.name = carla_strdup_safe(strBuf);
+ carla_zeroChars(strBuf, STR_MAX+1);
+ }
- carla_zeroChars(strBuf, STR_MAX+1);
- plugin->getParameterSymbol(parameterId, strBuf);
- retInfo.symbol = carla_strdup_safe(strBuf);
+ if (plugin->getParameterSymbol(parameterId, strBuf))
+ {
+ retInfo.symbol = carla_strdup_safe(strBuf);
+ carla_zeroChars(strBuf, STR_MAX+1);
+ }
- carla_zeroChars(strBuf, STR_MAX+1);
- plugin->getParameterUnit(parameterId, strBuf);
- retInfo.unit = carla_strdup_safe(strBuf);
+ if (plugin->getParameterUnit(parameterId, strBuf))
+ {
+ retInfo.unit = carla_strdup_safe(strBuf);
+ carla_zeroChars(strBuf, STR_MAX+1);
+ }
+
+ if (plugin->getParameterComment(parameterId, strBuf))
+ {
+ retInfo.comment = carla_strdup_safe(strBuf);
+ carla_zeroChars(strBuf, STR_MAX+1);
+ }
+
+ if (plugin->getParameterGroupName(parameterId, strBuf))
+ {
+ retInfo.groupName = carla_strdup_safe(strBuf);
+ carla_zeroChars(strBuf, STR_MAX+1);
+ }
checkStringPtr(retInfo.name);
checkStringPtr(retInfo.symbol);
checkStringPtr(retInfo.unit);
+ checkStringPtr(retInfo.comment);
+ checkStringPtr(retInfo.groupName);
return &retInfo;
}
@@ -1358,8 +1391,8 @@ const CarlaScalePointInfo* carla_get_parameter_scalepoint_info(uint pluginId, ui
retInfo.value = plugin->getParameterScalePointValue(parameterId, scalePointId);
carla_zeroChars(strBuf, STR_MAX+1);
- plugin->getParameterScalePointLabel(parameterId, scalePointId, strBuf);
- retInfo.label = carla_strdup_safe(strBuf);
+ if (plugin->getParameterScalePointLabel(parameterId, scalePointId, strBuf))
+ retInfo.label = carla_strdup_safe(strBuf);
checkStringPtr(retInfo.label);
diff --git a/source/backend/plugin/CarlaPlugin.cpp b/source/backend/plugin/CarlaPlugin.cpp
index 0ecac7ff2..190be54bd 100644
--- a/source/backend/plugin/CarlaPlugin.cpp
+++ b/source/backend/plugin/CarlaPlugin.cpp
@@ -300,58 +300,81 @@ float CarlaPlugin::getParameterScalePointValue(const uint32_t parameterId, const
return 0.0f;
}
-void CarlaPlugin::getLabel(char* const strBuf) const noexcept
+bool CarlaPlugin::getLabel(char* const strBuf) const noexcept
{
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getMaker(char* const strBuf) const noexcept
+bool CarlaPlugin::getMaker(char* const strBuf) const noexcept
{
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getCopyright(char* const strBuf) const noexcept
+bool CarlaPlugin::getCopyright(char* const strBuf) const noexcept
{
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getRealName(char* const strBuf) const noexcept
+bool CarlaPlugin::getRealName(char* const strBuf) const noexcept
{
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept
+bool CarlaPlugin::getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
CARLA_SAFE_ASSERT(false); // this should never happen
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept
+bool CarlaPlugin::getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) noexcept
+bool CarlaPlugin::getParameterText(const uint32_t parameterId, char* const strBuf) noexcept
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
CARLA_SAFE_ASSERT(false); // this should never happen
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept
+bool CarlaPlugin::getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
strBuf[0] = '\0';
+ return false;
}
-void CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept
+bool CarlaPlugin::getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(),);
- CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
+ strBuf[0] = '\0';
+ return false;
+}
+
+bool CarlaPlugin::getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept
+{
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
+ strBuf[0] = '\0';
+ return false;
+}
+
+bool CarlaPlugin::getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept
+{
+ CARLA_SAFE_ASSERT_RETURN(parameterId < getParameterCount(), false);
+ CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), false);
CARLA_SAFE_ASSERT(false); // this should never happen
strBuf[0] = '\0';
+ return false;
}
float CarlaPlugin::getInternalParameterValue(const int32_t parameterId) const noexcept
@@ -382,18 +405,20 @@ float CarlaPlugin::getInternalParameterValue(const int32_t parameterId) const no
return getParameterValue(static_cast(parameterId));
}
-void CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf) const noexcept
+bool CarlaPlugin::getProgramName(const uint32_t index, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count,);
- CARLA_SAFE_ASSERT_RETURN(pData->prog.names[index] != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(index < pData->prog.count, false);
+ CARLA_SAFE_ASSERT_RETURN(pData->prog.names[index] != nullptr, false);
std::strncpy(strBuf, pData->prog.names[index], STR_MAX);
+ return false;
}
-void CarlaPlugin::getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept
+bool CarlaPlugin::getMidiProgramName(const uint32_t index, char* const strBuf) const noexcept
{
- CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count,);
- CARLA_SAFE_ASSERT_RETURN(pData->midiprog.data[index].name != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(index < pData->midiprog.count, false);
+ CARLA_SAFE_ASSERT_RETURN(pData->midiprog.data[index].name != nullptr, false);
std::strncpy(strBuf, pData->midiprog.data[index].name, STR_MAX);
+ return false;
}
void CarlaPlugin::getParameterCountInfo(uint32_t& ins, uint32_t& outs) const noexcept
diff --git a/source/backend/plugin/CarlaPluginBridge.cpp b/source/backend/plugin/CarlaPluginBridge.cpp
index a9e82a36e..3cf5811fa 100644
--- a/source/backend/plugin/CarlaPluginBridge.cpp
+++ b/source/backend/plugin/CarlaPluginBridge.cpp
@@ -530,37 +530,42 @@ public:
return fParams[parameterId].value;
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fInfo.label, STR_MAX);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fInfo.maker, STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fInfo.copyright, STR_MAX);
+ return true;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fInfo.name, STR_MAX);
+ return true;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
std::strncpy(strBuf, fParams[parameterId].name.buffer(), STR_MAX);
+ return true;
}
- void getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
+ bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(! fReceivingParamText.isCurrentlyWaitingData(), nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+ CARLA_SAFE_ASSERT_RETURN(! fReceivingParamText.isCurrentlyWaitingData(), false);
const int32_t parameterIdi = static_cast(parameterId);
fReceivingParamText.setTargetData(parameterIdi, strBuf);
@@ -573,22 +578,27 @@ public:
fShmNonRtClientControl.commitWrite();
}
- if (! waitForParameterText())
- std::snprintf(strBuf, STR_MAX, "%f", static_cast(fParams[parameterId].value));
+ if (waitForParameterText())
+ return true;
+
+ std::snprintf(strBuf, STR_MAX, "%f", static_cast(fParams[parameterId].value));
+ return false;
}
- void getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
std::strncpy(strBuf, fParams[parameterId].symbol.buffer(), STR_MAX);
+ return true;
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
std::strncpy(strBuf, fParams[parameterId].unit.buffer(), STR_MAX);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginDSSI.cpp b/source/backend/plugin/CarlaPluginDSSI.cpp
index 0ab2cd25e..d51bec5cd 100644
--- a/source/backend/plugin/CarlaPluginDSSI.cpp
+++ b/source/backend/plugin/CarlaPluginDSSI.cpp
@@ -468,68 +468,69 @@ public:
return fParamBuffers[parameterId];
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Label != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Label != nullptr, false);
std::strncpy(strBuf, fDescriptor->Label, STR_MAX);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Maker != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Maker != nullptr, false);
std::strncpy(strBuf, fDescriptor->Maker, STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Copyright != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Copyright != nullptr, false);
std::strncpy(strBuf, fDescriptor->Copyright, STR_MAX);
+ return true;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Name != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Name != nullptr, false);
std::strncpy(strBuf, fDescriptor->Name, STR_MAX);
+ return true;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
+ CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false);
- if (getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, true))
- return;
+ if (! getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, true))
+ std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
- std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
+ return true;
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
- CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, nullStrBuf(strBuf));
-
- if (getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, false))
- return;
+ CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false);
- nullStrBuf(strBuf);
+ return getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, false);
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginFluidSynth.cpp b/source/backend/plugin/CarlaPluginFluidSynth.cpp
index 1b5303c96..a77ef0709 100644
--- a/source/backend/plugin/CarlaPluginFluidSynth.cpp
+++ b/source/backend/plugin/CarlaPluginFluidSynth.cpp
@@ -227,106 +227,108 @@ public:
}
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
if (fLabel != nullptr)
{
std::strncpy(strBuf, fLabel, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getLabel(strBuf);
+ return CarlaPlugin::getLabel(strBuf);
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, "FluidSynth SF2 engine", STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, "GNU GPL v2+", STR_MAX);
+ return true;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- getLabel(strBuf);
+ return getLabel(strBuf);
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
switch (parameterId)
{
case FluidSynthReverbOnOff:
std::strncpy(strBuf, "Reverb On/Off", STR_MAX);
- return;
+ return true;
case FluidSynthReverbRoomSize:
std::strncpy(strBuf, "Reverb Room Size", STR_MAX);
- return;
+ return true;
case FluidSynthReverbDamp:
std::strncpy(strBuf, "Reverb Damp", STR_MAX);
- return;
+ return true;
case FluidSynthReverbLevel:
std::strncpy(strBuf, "Reverb Level", STR_MAX);
- return;
+ return true;
case FluidSynthReverbWidth:
std::strncpy(strBuf, "Reverb Width", STR_MAX);
- return;
+ return true;
case FluidSynthChorusOnOff:
std::strncpy(strBuf, "Chorus On/Off", STR_MAX);
- return;
+ return true;
case FluidSynthChorusNr:
std::strncpy(strBuf, "Chorus Voice Count", STR_MAX);
- return;
+ return true;
case FluidSynthChorusLevel:
std::strncpy(strBuf, "Chorus Level", STR_MAX);
- return;
+ return true;
case FluidSynthChorusSpeedHz:
std::strncpy(strBuf, "Chorus Speed", STR_MAX);
- return;
+ return true;
case FluidSynthChorusDepthMs:
std::strncpy(strBuf, "Chorus Depth", STR_MAX);
- return;
+ return true;
case FluidSynthChorusType:
std::strncpy(strBuf, "Chorus Type", STR_MAX);
- return;
+ return true;
case FluidSynthPolyphony:
std::strncpy(strBuf, "Polyphony", STR_MAX);
- return;
+ return true;
case FluidSynthInterpolation:
std::strncpy(strBuf, "Interpolation", STR_MAX);
- return;
+ return true;
case FluidSynthVoiceCount:
std::strncpy(strBuf, "Voice Count", STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getParameterName(parameterId, strBuf);
+ return CarlaPlugin::getParameterName(parameterId, strBuf);
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
switch (parameterId)
{
case FluidSynthChorusSpeedHz:
std::strncpy(strBuf, "Hz", STR_MAX);
- return;
+ return true;
case FluidSynthChorusDepthMs:
std::strncpy(strBuf, "ms", STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getParameterUnit(parameterId, strBuf);
+ return CarlaPlugin::getParameterUnit(parameterId, strBuf);
}
- void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
+ bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
- CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId),);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+ CARLA_SAFE_ASSERT_RETURN(scalePointId < getParameterScalePointCount(parameterId), false);
switch (parameterId)
{
@@ -335,10 +337,10 @@ public:
{
case 0:
std::strncpy(strBuf, "Sine wave", STR_MAX);
- return;
+ return true;
case 1:
std::strncpy(strBuf, "Triangle wave", STR_MAX);
- return;
+ return true;
}
break;
case FluidSynthInterpolation:
@@ -346,21 +348,21 @@ public:
{
case 0:
std::strncpy(strBuf, "None", STR_MAX);
- return;
+ return true;
case 1:
std::strncpy(strBuf, "Straight-line", STR_MAX);
- return;
+ return true;
case 2:
std::strncpy(strBuf, "Fourth-order", STR_MAX);
- return;
+ return true;
case 3:
std::strncpy(strBuf, "Seventh-order", STR_MAX);
- return;
+ return true;
}
break;
}
- CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
+ return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginJack.cpp b/source/backend/plugin/CarlaPluginJack.cpp
index cf60330da..133b84ef8 100644
--- a/source/backend/plugin/CarlaPluginJack.cpp
+++ b/source/backend/plugin/CarlaPluginJack.cpp
@@ -572,25 +572,27 @@ public:
return fInfo.optionsAvailable;
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fInfo.setupLabel, STR_MAX);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const) const noexcept override
{
- nullStrBuf(strBuf);
+ return false;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const) const noexcept override
{
- nullStrBuf(strBuf);
+ return false;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
// FIXME
std::strncpy(strBuf, "Carla's libjack", STR_MAX);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginJuce.cpp b/source/backend/plugin/CarlaPluginJuce.cpp
index 810407ced..a53252e9d 100644
--- a/source/backend/plugin/CarlaPluginJuce.cpp
+++ b/source/backend/plugin/CarlaPluginJuce.cpp
@@ -201,51 +201,58 @@ public:
return fInstance->getParameter(static_cast(parameterId));
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
if (fDesc.pluginFormatName == "AU" || fDesc.pluginFormatName == "AudioUnit")
std::strncpy(strBuf, fDesc.fileOrIdentifier.toRawUTF8(), STR_MAX);
else
std::strncpy(strBuf, fDesc.name.toRawUTF8(), STR_MAX);
+
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fDesc.manufacturerName.toRawUTF8(), STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- getMaker(strBuf);
+ return getMaker(strBuf);
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, fDesc.descriptiveName.toRawUTF8(), STR_MAX);
+ return true;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
- CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+ CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false);
std::strncpy(strBuf, fInstance->getParameterName(static_cast(parameterId), STR_MAX).toRawUTF8(), STR_MAX);
+ return true;
}
- void getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
+ bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
- CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+ CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false);
std::strncpy(strBuf, fInstance->getParameterText(static_cast(parameterId), STR_MAX).toRawUTF8(), STR_MAX);
+ return true;
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
- CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+ CARLA_SAFE_ASSERT_RETURN(fInstance != nullptr, false);
std::strncpy(strBuf, fInstance->getParameterLabel(static_cast(parameterId)).toRawUTF8(), STR_MAX);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginLADSPA.cpp b/source/backend/plugin/CarlaPluginLADSPA.cpp
index c4c0df635..83a562574 100644
--- a/source/backend/plugin/CarlaPluginLADSPA.cpp
+++ b/source/backend/plugin/CarlaPluginLADSPA.cpp
@@ -1,6 +1,6 @@
/*
* Carla Plugin, LADSPA implementation
- * Copyright (C) 2011-2018 Filipe Coelho
+ * Copyright (C) 2011-2019 Filipe Coelho
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -230,72 +230,72 @@ public:
return pData->param.ranges[parameterId].getFixedValue(scalePoint.Value);
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Label != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Label != nullptr, false);
std::strncpy(strBuf, fDescriptor->Label, STR_MAX);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Maker != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Maker != nullptr, false);
if (fRdfDescriptor != nullptr && fRdfDescriptor->Creator != nullptr)
- {
std::strncpy(strBuf, fRdfDescriptor->Creator, STR_MAX);
- return;
- }
+ else
+ std::strncpy(strBuf, fDescriptor->Maker, STR_MAX);
- std::strncpy(strBuf, fDescriptor->Maker, STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Copyright != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Copyright != nullptr, false);
std::strncpy(strBuf, fDescriptor->Copyright, STR_MAX);
+ return true;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->Name != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->Name != nullptr, false);
if (fRdfDescriptor != nullptr && fRdfDescriptor->Title != nullptr)
- {
std::strncpy(strBuf, fRdfDescriptor->Title, STR_MAX);
- return;
- }
+ else
+ std::strncpy(strBuf, fDescriptor->Name, STR_MAX);
- std::strncpy(strBuf, fDescriptor->Name, STR_MAX);
+ return true;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
+ CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false);
- if (getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, true))
- return;
+ if (! getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, true))
+ std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
- std::strncpy(strBuf, fDescriptor->PortNames[rindex], STR_MAX);
+ return true;
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
if (fRdfDescriptor != nullptr && rindex < static_cast(fRdfDescriptor->PortCount))
{
@@ -307,74 +307,73 @@ public:
{
case LADSPA_UNIT_DB:
std::strncpy(strBuf, "dB", STR_MAX);
- return;
+ return true;
case LADSPA_UNIT_COEF:
std::strncpy(strBuf, "(coef)", STR_MAX);
- return;
+ return true;
case LADSPA_UNIT_HZ:
std::strncpy(strBuf, "Hz", STR_MAX);
- return;
+ return true;
case LADSPA_UNIT_S:
std::strncpy(strBuf, "s", STR_MAX);
- return;
+ return true;
case LADSPA_UNIT_MS:
std::strncpy(strBuf, "ms", STR_MAX);
- return;
+ return true;
case LADSPA_UNIT_MIN:
std::strncpy(strBuf, "min", STR_MAX);
- return;
+ return true;
}
}
}
- CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, nullStrBuf(strBuf));
-
- if (getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, false))
- return;
+ CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fDescriptor->PortCount), false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->PortNames[rindex] != nullptr, false);
- nullStrBuf(strBuf);
+ return getSeparatedParameterNameOrUnit(fDescriptor->PortNames[rindex], strBuf, false);
}
- void getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
if (fRdfDescriptor == nullptr)
- return nullStrBuf(strBuf);
+ return false;
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
if (rindex >= static_cast(fRdfDescriptor->PortCount))
- return nullStrBuf(strBuf);
+ return false;
const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]);
if (! LADSPA_PORT_HAS_LABEL(port.Hints))
- return nullStrBuf(strBuf);
+ return false;
- CARLA_SAFE_ASSERT_RETURN(port.Label != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(port.Label != nullptr, false);
std::strncpy(strBuf, port.Label, STR_MAX);
+ return true;
}
- void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
+ bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
- CARLA_SAFE_ASSERT_RETURN(rindex >= 0, nullStrBuf(strBuf));
- CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fRdfDescriptor->PortCount), nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(rindex >= 0, false);
+ CARLA_SAFE_ASSERT_RETURN(rindex < static_cast(fRdfDescriptor->PortCount), false);
const LADSPA_RDF_Port& port(fRdfDescriptor->Ports[rindex]);
- CARLA_SAFE_ASSERT_RETURN(scalePointId < port.ScalePointCount, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(scalePointId < port.ScalePointCount, false);
const LADSPA_RDF_ScalePoint& scalePoint(port.ScalePoints[scalePointId]);
- CARLA_SAFE_ASSERT_RETURN(scalePoint.Label != nullptr, nullStrBuf(strBuf));
+ CARLA_SAFE_ASSERT_RETURN(scalePoint.Label != nullptr, false);
std::strncpy(strBuf, scalePoint.Label, STR_MAX);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginLV2.cpp b/source/backend/plugin/CarlaPluginLV2.cpp
index 58dc93561..d6a826dc2 100644
--- a/source/backend/plugin/CarlaPluginLV2.cpp
+++ b/source/backend/plugin/CarlaPluginLV2.cpp
@@ -934,55 +934,65 @@ public:
return 0.0f;
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor->URI != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor->URI != nullptr, false);
std::strncpy(strBuf, fRdfDescriptor->URI, STR_MAX);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
if (fRdfDescriptor->Author != nullptr)
+ {
std::strncpy(strBuf, fRdfDescriptor->Author, STR_MAX);
- else
- CarlaPlugin::getMaker(strBuf);
+ return true;
+ }
+
+ return false;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
if (fRdfDescriptor->License != nullptr)
+ {
std::strncpy(strBuf, fRdfDescriptor->License, STR_MAX);
- else
- CarlaPlugin::getCopyright(strBuf);
+ return true;
+ }
+
+ return false;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
if (fRdfDescriptor->Name != nullptr)
+ {
std::strncpy(strBuf, fRdfDescriptor->Name, STR_MAX);
- else
- CarlaPlugin::getRealName(strBuf);
+ return true;
+ }
+
+ return false;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
int32_t rindex = pData->param.data[parameterId].rindex;
if (rindex < static_cast(fRdfDescriptor->PortCount))
{
std::strncpy(strBuf, fRdfDescriptor->Ports[rindex].Name, STR_MAX);
- return;
+ return true;
}
rindex -= static_cast(fRdfDescriptor->PortCount);
@@ -990,23 +1000,23 @@ public:
if (rindex < static_cast(fRdfDescriptor->ParameterCount))
{
std::strncpy(strBuf, fRdfDescriptor->Parameters[rindex].Label, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getParameterName(parameterId, strBuf);
+ return CarlaPlugin::getParameterName(parameterId, strBuf);
}
- void getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterSymbol(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
int32_t rindex = pData->param.data[parameterId].rindex;
if (rindex < static_cast(fRdfDescriptor->PortCount))
{
std::strncpy(strBuf, fRdfDescriptor->Ports[rindex].Symbol, STR_MAX);
- return;
+ return true;
}
rindex -= static_cast(fRdfDescriptor->PortCount);
@@ -1014,16 +1024,16 @@ public:
if (rindex < static_cast(fRdfDescriptor->ParameterCount))
{
std::strncpy(strBuf, fRdfDescriptor->Parameters[rindex].URI, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getParameterSymbol(parameterId, strBuf);
+ return CarlaPlugin::getParameterSymbol(parameterId, strBuf);
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
LV2_RDF_PortUnit* portUnit = nullptr;
@@ -1048,7 +1058,7 @@ public:
if (LV2_HAVE_PORT_UNIT_SYMBOL(portUnit->Hints) && portUnit->Symbol != nullptr)
{
std::strncpy(strBuf, portUnit->Symbol, STR_MAX);
- return;
+ return true;
}
if (LV2_HAVE_PORT_UNIT_UNIT(portUnit->Hints))
@@ -1057,105 +1067,176 @@ public:
{
case LV2_PORT_UNIT_BAR:
std::strncpy(strBuf, "bars", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_BEAT:
std::strncpy(strBuf, "beats", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_BPM:
std::strncpy(strBuf, "BPM", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_CENT:
std::strncpy(strBuf, "ct", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_CM:
std::strncpy(strBuf, "cm", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_COEF:
std::strncpy(strBuf, "(coef)", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_DB:
std::strncpy(strBuf, "dB", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_DEGREE:
std::strncpy(strBuf, "deg", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_FRAME:
std::strncpy(strBuf, "frames", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_HZ:
std::strncpy(strBuf, "Hz", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_INCH:
std::strncpy(strBuf, "in", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_KHZ:
std::strncpy(strBuf, "kHz", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_KM:
std::strncpy(strBuf, "km", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_M:
std::strncpy(strBuf, "m", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MHZ:
std::strncpy(strBuf, "MHz", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MIDINOTE:
std::strncpy(strBuf, "note", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MILE:
std::strncpy(strBuf, "mi", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MIN:
std::strncpy(strBuf, "min", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MM:
std::strncpy(strBuf, "mm", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_MS:
std::strncpy(strBuf, "ms", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_OCT:
std::strncpy(strBuf, "oct", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_PC:
std::strncpy(strBuf, "%", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_S:
std::strncpy(strBuf, "s", STR_MAX);
- return;
+ return true;
case LV2_PORT_UNIT_SEMITONE:
std::strncpy(strBuf, "semi", STR_MAX);
- return;
+ return true;
}
}
}
- CarlaPlugin::getParameterUnit(parameterId, strBuf);
+ return CarlaPlugin::getParameterUnit(parameterId, strBuf);
}
- void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
+ bool getParameterComment(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+
+ int32_t rindex = pData->param.data[parameterId].rindex;
+
+ if (rindex < static_cast(fRdfDescriptor->PortCount))
+ {
+ if (const char* const comment = fRdfDescriptor->Ports[rindex].Comment)
+ {
+ std::strncpy(strBuf, comment, STR_MAX);
+ return true;
+ }
+ return false;
+ }
+
+ rindex -= static_cast(fRdfDescriptor->PortCount);
+
+ if (rindex < static_cast(fRdfDescriptor->ParameterCount))
+ {
+ if (const char* const comment = fRdfDescriptor->Parameters[rindex].Comment)
+ {
+ std::strncpy(strBuf, comment, STR_MAX);
+ return true;
+ }
+ return false;
+ }
+
+ return CarlaPlugin::getParameterComment(parameterId, strBuf);
+ }
+
+ bool getParameterGroupName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ {
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
+
+ int32_t rindex = pData->param.data[parameterId].rindex;
+ const char* uri = nullptr;
+
+ if (rindex < static_cast(fRdfDescriptor->PortCount))
+ {
+ uri = fRdfDescriptor->Ports[rindex].GroupURI;
+ }
+ else
+ {
+ rindex -= static_cast(fRdfDescriptor->PortCount);
+
+ if (rindex < static_cast(fRdfDescriptor->ParameterCount))
+ uri = fRdfDescriptor->Parameters[rindex].GroupURI;
+ }
+
+ if (uri == nullptr)
+ return false;
+
+ for (uint32_t i=0; iPortGroupCount; ++i)
+ {
+ if (std::strcmp(fRdfDescriptor->PortGroups[i].URI, uri) == 0)
+ {
+ if (const char* const label = fRdfDescriptor->PortGroups[i].Label)
+ {
+ std::strncpy(strBuf, label, STR_MAX);
+ return true;
+ }
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
+ {
+ CARLA_SAFE_ASSERT_RETURN(fRdfDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
const int32_t rindex(pData->param.data[parameterId].rindex);
if (rindex < static_cast(fRdfDescriptor->PortCount))
{
const LV2_RDF_Port* const port(&fRdfDescriptor->Ports[rindex]);
- CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount,);
+ CARLA_SAFE_ASSERT_RETURN(scalePointId < port->ScalePointCount, false);
const LV2_RDF_PortScalePoint* const portScalePoint(&port->ScalePoints[scalePointId]);
if (portScalePoint->Label != nullptr)
{
std::strncpy(strBuf, portScalePoint->Label, STR_MAX);
- return;
+ return true;
}
}
- CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
+ return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginNative.cpp b/source/backend/plugin/CarlaPluginNative.cpp
index d26bfaa98..0c3457b54 100644
--- a/source/backend/plugin/CarlaPluginNative.cpp
+++ b/source/backend/plugin/CarlaPluginNative.cpp
@@ -478,64 +478,64 @@ public:
return 0.0f;
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
if (fDescriptor->label != nullptr)
{
std::strncpy(strBuf, fDescriptor->label, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getLabel(strBuf);
+ return CarlaPlugin::getLabel(strBuf);
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
if (fDescriptor->maker != nullptr)
{
std::strncpy(strBuf, fDescriptor->maker, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getMaker(strBuf);
+ return CarlaPlugin::getMaker(strBuf);
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
if (fDescriptor->copyright != nullptr)
{
std::strncpy(strBuf, fDescriptor->copyright, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getCopyright(strBuf);
+ return CarlaPlugin::getCopyright(strBuf);
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
if (fDescriptor->name != nullptr)
{
std::strncpy(strBuf, fDescriptor->name, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getRealName(strBuf);
+ return CarlaPlugin::getRealName(strBuf);
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
// FIXME - try
if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId))
@@ -543,7 +543,7 @@ public:
if (param->name != nullptr)
{
std::strncpy(strBuf, param->name, STR_MAX);
- return;
+ return true;
}
carla_safe_assert("param->name != nullptr", __FILE__, __LINE__);
@@ -551,15 +551,15 @@ public:
}
carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__);
- CarlaPlugin::getParameterName(parameterId, strBuf);
+ return CarlaPlugin::getParameterName(parameterId, strBuf);
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
// FIXME - try
if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId))
@@ -567,34 +567,34 @@ public:
if (param->unit != nullptr)
{
std::strncpy(strBuf, param->unit, STR_MAX);
- return;
+ return true;
}
return CarlaPlugin::getParameterUnit(parameterId, strBuf);
}
carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__);
- CarlaPlugin::getParameterUnit(parameterId, strBuf);
+ return CarlaPlugin::getParameterUnit(parameterId, strBuf);
}
- void getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
+ bool getParameterScalePointLabel(const uint32_t parameterId, const uint32_t scalePointId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fDescriptor->get_parameter_info != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
// FIXME - try
if (const NativeParameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId))
{
- CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount,);
+ CARLA_SAFE_ASSERT_RETURN(scalePointId < param->scalePointCount, false);
const NativeParameterScalePoint* scalePoint(¶m->scalePoints[scalePointId]);
if (scalePoint->label != nullptr)
{
std::strncpy(strBuf, scalePoint->label, STR_MAX);
- return;
+ return true;
}
carla_safe_assert("scalePoint->label != nullptr", __FILE__, __LINE__);
@@ -602,7 +602,7 @@ public:
}
carla_safe_assert("const Parameter* const param = fDescriptor->get_parameter_info(fHandle, parameterId)", __FILE__, __LINE__);
- CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
+ return CarlaPlugin::getParameterScalePointLabel(parameterId, scalePointId, strBuf);
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginSFZero.cpp b/source/backend/plugin/CarlaPluginSFZero.cpp
index eae89e3fb..99e23571e 100644
--- a/source/backend/plugin/CarlaPluginSFZero.cpp
+++ b/source/backend/plugin/CarlaPluginSFZero.cpp
@@ -136,43 +136,46 @@ public:
return fNumVoices;
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
if (fLabel != nullptr)
{
std::strncpy(strBuf, fLabel, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getLabel(strBuf);
+ return CarlaPlugin::getLabel(strBuf);
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, "SFZero engine", STR_MAX);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
std::strncpy(strBuf, "ISC", STR_MAX);
+ return true;
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
if (fRealName != nullptr)
{
std::strncpy(strBuf, fRealName, STR_MAX);
- return;
+ return true;
}
- CarlaPlugin::getRealName(strBuf);
+ return CarlaPlugin::getRealName(strBuf);
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(parameterId == 0,);
+ CARLA_SAFE_ASSERT_RETURN(parameterId == 0, false);
std::strncpy(strBuf, "Voice Count", STR_MAX);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/backend/plugin/CarlaPluginVST2.cpp b/source/backend/plugin/CarlaPluginVST2.cpp
index 8f09f17ab..539d39c5d 100644
--- a/source/backend/plugin/CarlaPluginVST2.cpp
+++ b/source/backend/plugin/CarlaPluginVST2.cpp
@@ -276,39 +276,42 @@ public:
return fEffect->getParameter(fEffect, static_cast(parameterId));
}
- void getLabel(char* const strBuf) const noexcept override
+ bool getLabel(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
strBuf[0] = '\0';
dispatcher(effGetProductString, 0, 0, strBuf);
+ return true;
}
- void getMaker(char* const strBuf) const noexcept override
+ bool getMaker(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
strBuf[0] = '\0';
dispatcher(effGetVendorString, 0, 0, strBuf);
+ return true;
}
- void getCopyright(char* const strBuf) const noexcept override
+ bool getCopyright(char* const strBuf) const noexcept override
{
- getMaker(strBuf);
+ return getMaker(strBuf);
}
- void getRealName(char* const strBuf) const noexcept override
+ bool getRealName(char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
strBuf[0] = '\0';
dispatcher(effGetEffectName, 0, 0, strBuf);
+ return true;
}
- void getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterName(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
strBuf[0] = '\0';
@@ -319,32 +322,36 @@ public:
{
std::strncpy(strBuf, prop.label, 64);
strBuf[64] = '\0';
- return;
+ return true;
}
strBuf[0] = '\0';
dispatcher(effGetParamName, static_cast(parameterId), 0, strBuf);
+ return true;
}
- void getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
+ bool getParameterText(const uint32_t parameterId, char* const strBuf) noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
strBuf[0] = '\0';
dispatcher(effGetParamDisplay, static_cast(parameterId), 0, strBuf);
if (strBuf[0] == '\0')
std::snprintf(strBuf, STR_MAX, "%f", static_cast(getParameterValue(parameterId)));
+
+ return true;
}
- void getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
+ bool getParameterUnit(const uint32_t parameterId, char* const strBuf) const noexcept override
{
- CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
- CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);
+ CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr, false);
+ CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, false);
strBuf[0] = '\0';
dispatcher(effGetParamLabel, static_cast(parameterId), 0, strBuf);
+ return true;
}
// -------------------------------------------------------------------
diff --git a/source/frontend/carla_backend.py b/source/frontend/carla_backend.py
index dddc2a52a..d9c4390e5 100644
--- a/source/frontend/carla_backend.py
+++ b/source/frontend/carla_backend.py
@@ -1246,6 +1246,12 @@ class CarlaParameterInfo(Structure):
# Parameter unit.
("unit", c_char_p),
+ # Parameter comment / documentation.
+ ("comment", c_char_p),
+
+ # Parameter group name.
+ ("groupName", c_char_p),
+
# Number of scale points.
# @see CarlaScalePointInfo
("scalePointCount", c_uint32)
@@ -1360,6 +1366,8 @@ PyCarlaParameterInfo = {
'name': "",
'symbol': "",
'unit': "",
+ 'comment': "",
+ 'groupName': "",
'scalePointCount': 0,
}
diff --git a/source/frontend/carla_widgets.py b/source/frontend/carla_widgets.py
index ea6aea9e5..dfdbcdd19 100755
--- a/source/frontend/carla_widgets.py
+++ b/source/frontend/carla_widgets.py
@@ -21,7 +21,7 @@
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QByteArray, QSettings, QTimer
from PyQt5.QtGui import QColor, QCursor, QFontMetrics, QPainter, QPainterPath, QPalette, QPixmap
-from PyQt5.QtWidgets import QDialog, QInputDialog, QLineEdit, QMenu, QVBoxLayout, QWidget
+from PyQt5.QtWidgets import QDialog, QInputDialog, QLineEdit, QMenu, QScrollArea, QVBoxLayout, QWidget
# ------------------------------------------------------------------------------------------------------------
# Imports (Custom)
@@ -435,9 +435,6 @@ class PluginEditParentMeta():
# Plugin Editor (Built-in)
class PluginEdit(QDialog):
- # settings
- kParamsPerPage = 17
-
# signals
SIGTERM = pyqtSignal()
SIGUSR1 = pyqtSignal()
@@ -720,18 +717,6 @@ class PluginEdit(QDialog):
if not self.ui.scrollArea.isEnabled():
self.resize(self.width(), self.height()-self.ui.scrollArea.height())
- # FIXME: See if this is still needed
- # Workaround for a Qt4 bug, see https://bugreports.qt-project.org/browse/QTBUG-7792
- if LINUX: QTimer.singleShot(0, self.slot_fixNameWordWrap)
-
- @pyqtSlot()
- def slot_fixNameWordWrap(self):
- if self.ui.tabWidget.count() > 0:
- self.ui.tabWidget.setCurrentIndex(1)
- self.adjustSize()
- self.ui.tabWidget.setCurrentIndex(0)
- self.setMinimumSize(self.width(), self.height())
-
#------------------------------------------------------------------
def reloadInfo(self):
@@ -893,11 +878,6 @@ class PluginEdit(QDialog):
paramInputList.append(parameter)
- if len(paramInputList) == self.kParamsPerPage:
- paramInputListFull.append((paramInputList, paramInputWidth))
- paramInputList = []
- paramInputWidth = 0
-
else:
paramOutputWidthTMP = self.fontMetrics().width(parameter['name'])
@@ -906,19 +886,8 @@ class PluginEdit(QDialog):
paramOutputList.append(parameter)
- if len(paramOutputList) == self.kParamsPerPage:
- paramOutputListFull.append((paramOutputList, paramOutputWidth))
- paramOutputList = []
- paramOutputWidth = 0
-
- # for i in range(parameterCount)
- else:
- # Final page width values
- if 0 < len(paramInputList) < self.kParamsPerPage:
- paramInputListFull.append((paramInputList, paramInputWidth))
-
- if 0 < len(paramOutputList) < self.kParamsPerPage:
- paramOutputListFull.append((paramOutputList, paramOutputWidth))
+ paramInputListFull.append((paramInputList, paramInputWidth))
+ paramOutputListFull.append((paramOutputList, paramOutputWidth))
# Create parameter tabs + widgets
self._createParameterWidgets(PARAMETER_INPUT, paramInputListFull, self.tr("Parameters"))
@@ -1490,21 +1459,27 @@ class PluginEdit(QDialog):
#------------------------------------------------------------------
def _createParameterWidgets(self, paramType, paramListFull, tabPageName):
- i = 1
for paramList, width in paramListFull:
if len(paramList) == 0:
break
- tabIndex = self.ui.tabWidget.count()
- tabPageContainer = QWidget(self.ui.tabWidget)
- tabPageLayout = QVBoxLayout(tabPageContainer)
- tabPageLayout.setSpacing(1)
- tabPageContainer.setLayout(tabPageLayout)
+ tabIndex = self.ui.tabWidget.count()
+
+ tabPageLayout = QVBoxLayout(self.ui.tabWidget)
+ tabPageLayout.setSpacing(0)
+
+ scrollArea = QScrollArea(self.ui.tabWidget)
+ scrollArea.setWidgetResizable(True)
+ scrollArea.setFrameStyle(0)
+
+ scrollAreaWidget = QWidget(scrollArea)
+ scrollAreaLayout = QVBoxLayout(scrollAreaWidget)
+ scrollAreaLayout.setSpacing(1)
for paramInfo in paramList:
- paramWidget = PluginParameter(tabPageContainer, self.host, paramInfo, self.fPluginId, tabIndex)
+ paramWidget = PluginParameter(scrollAreaWidget, self.host, paramInfo, self.fPluginId, tabIndex)
paramWidget.setLabelWidth(width)
- tabPageLayout.addWidget(paramWidget)
+ scrollAreaLayout.addWidget(paramWidget)
self.fParameterList.append((paramType, paramInfo['index'], paramWidget))
@@ -1514,10 +1489,12 @@ class PluginEdit(QDialog):
paramWidget.midiControlChanged.connect(self.slot_parameterMidiControlChanged)
paramWidget.midiChannelChanged.connect(self.slot_parameterMidiChannelChanged)
- tabPageLayout.addStretch()
+ scrollAreaLayout.addStretch()
+
+ scrollArea.setWidget(scrollAreaWidget)
+ tabPageLayout.addWidget(scrollArea)
- self.ui.tabWidget.addTab(tabPageContainer, "%s (%i)" % (tabPageName, i))
- i += 1
+ self.ui.tabWidget.addTab(scrollArea, tabPageName)
if paramType == PARAMETER_INPUT:
self.ui.tabWidget.setTabIcon(tabIndex, self.fTabIconOff)
diff --git a/source/includes/lv2_rdf.hpp b/source/includes/lv2_rdf.hpp
index 3c0a503b9..873e26b2e 100644
--- a/source/includes/lv2_rdf.hpp
+++ b/source/includes/lv2_rdf.hpp
@@ -404,6 +404,7 @@ struct LV2_RDF_Port {
const char* Name;
const char* Symbol;
const char* Comment;
+ const char* GroupURI;
LV2_RDF_PortMidiMap MidiMap;
LV2_RDF_PortPoints Points;
@@ -421,6 +422,7 @@ struct LV2_RDF_Port {
Name(nullptr),
Symbol(nullptr),
Comment(nullptr),
+ GroupURI(nullptr),
MidiMap(),
Points(),
Unit(),
@@ -445,6 +447,11 @@ struct LV2_RDF_Port {
delete[] Comment;
Comment = nullptr;
}
+ if (GroupURI != nullptr)
+ {
+ delete[] GroupURI;
+ GroupURI = nullptr;
+ }
if (ScalePoints != nullptr)
{
delete[] ScalePoints;
@@ -455,6 +462,34 @@ struct LV2_RDF_Port {
CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Port)
};
+// Port
+struct LV2_RDF_PortGroup {
+ LV2_URI URI; // shared value, do not deallocate
+ const char* Label;
+ const char* Symbol;
+
+ LV2_RDF_PortGroup() noexcept
+ : URI(nullptr),
+ Label(nullptr),
+ Symbol(nullptr) {}
+
+ ~LV2_RDF_PortGroup() noexcept
+ {
+ if (Label != nullptr)
+ {
+ delete[] Label;
+ Label = nullptr;
+ }
+ if (Symbol != nullptr)
+ {
+ delete[] Symbol;
+ Symbol = nullptr;
+ }
+ }
+
+ CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_PortGroup)
+};
+
// Parameter
struct LV2_RDF_Parameter {
LV2_URI URI;
@@ -462,6 +497,7 @@ struct LV2_RDF_Parameter {
bool Input;
const char* Label;
const char* Comment;
+ const char* GroupURI;
LV2_RDF_PortMidiMap MidiMap;
LV2_RDF_PortPoints Points;
@@ -473,6 +509,7 @@ struct LV2_RDF_Parameter {
Input(true),
Label(nullptr),
Comment(nullptr),
+ GroupURI(nullptr),
MidiMap(),
Points(),
Unit() {}
@@ -494,6 +531,11 @@ struct LV2_RDF_Parameter {
delete[] Comment;
Comment = nullptr;
}
+ if (GroupURI != nullptr)
+ {
+ delete[] GroupURI;
+ GroupURI = nullptr;
+ }
}
CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Parameter)
@@ -656,6 +698,9 @@ struct LV2_RDF_Descriptor {
uint32_t PortCount;
LV2_RDF_Port* Ports;
+ uint32_t PortGroupCount;
+ LV2_RDF_PortGroup* PortGroups;
+
uint32_t ParameterCount;
LV2_RDF_Parameter* Parameters;
@@ -681,6 +726,8 @@ struct LV2_RDF_Descriptor {
UniqueID(0),
PortCount(0),
Ports(nullptr),
+ PortGroupCount(0),
+ PortGroups(nullptr),
ParameterCount(0),
Parameters(nullptr),
PresetCount(0),
@@ -732,6 +779,11 @@ struct LV2_RDF_Descriptor {
delete[] Ports;
Ports = nullptr;
}
+ if (PortGroups != nullptr)
+ {
+ delete[] PortGroups;
+ PortGroups = nullptr;
+ }
if (Parameters != nullptr)
{
delete[] Parameters;
diff --git a/source/modules/lilv/lilv-0.24.0/lilv/lilvmm.hpp b/source/modules/lilv/lilv-0.24.0/lilv/lilvmm.hpp
index 1f67e8176..a88c42fd8 100644
--- a/source/modules/lilv/lilv-0.24.0/lilv/lilvmm.hpp
+++ b/source/modules/lilv/lilv-0.24.0/lilv/lilvmm.hpp
@@ -187,6 +187,7 @@ struct Port {
#define LILV_PORT_WRAP1(RT, name, T1, a1) \
inline RT name (T1 a1) { return lilv_port_ ## name (parent, me, a1); }
+ LILV_PORT_WRAP1(LilvNode*, get, LilvNode*, predicate);
LILV_PORT_WRAP1(LilvNodes*, get_value, LilvNode*, predicate);
LILV_PORT_WRAP0(LilvNodes*, get_properties)
LILV_PORT_WRAP1(bool, has_property, LilvNode*, property_uri);
diff --git a/source/utils/CarlaLv2Utils.hpp b/source/utils/CarlaLv2Utils.hpp
index 7f0de9fbd..8f03c9678 100644
--- a/source/utils/CarlaLv2Utils.hpp
+++ b/source/utils/CarlaLv2Utils.hpp
@@ -19,6 +19,7 @@
#define CARLA_LV2_UTILS_HPP_INCLUDED
#include "CarlaMathUtils.hpp"
+#include "CarlaStringList.hpp"
#ifndef nullptr
# undef NULL
@@ -248,6 +249,7 @@ public:
Lilv::Node patch_writable;
Lilv::Node parameter;
+ Lilv::Node pg_group;
Lilv::Node preset_preset;
@@ -383,6 +385,7 @@ public:
patch_writable (new_uri(LV2_PATCH__writable)),
parameter (new_uri(LV2_CORE__Parameter)),
+ pg_group (new_uri(LV2_PORT_GROUPS__group)),
preset_preset (new_uri(LV2_PRESETS__Preset)),
@@ -1643,6 +1646,8 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool loadPresets)
Lilv::Plugin lilvPlugin(cPlugin);
LV2_RDF_Descriptor* const rdfDescriptor(new LV2_RDF_Descriptor());
+ CarlaStringList portGroups(false); // does not allocate own elements
+
// ----------------------------------------------------------------------------------------------------------------
// Set Plugin Type
{
@@ -1827,6 +1832,19 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool loadPresets)
if (const char* const symbol = lilv_node_as_string(lilvPort.get_symbol()))
rdfPort->Symbol = carla_strdup(symbol);
+
+ if (LilvNode* const commentNode = lilvPort.get(lv2World.rdfs_comment.me))
+ {
+ rdfPort->Comment = carla_strdup(lilv_node_as_string(commentNode));
+ lilv_node_free(commentNode);
+ }
+
+ if (LilvNode* const groupNode = lilvPort.get(lv2World.pg_group.me))
+ {
+ rdfPort->GroupURI = carla_strdup(lilv_node_as_uri(groupNode));
+ lilv_node_free(groupNode);
+ portGroups.appendUnique(rdfPort->GroupURI);
+ }
}
// --------------------------------------------------------------------------------------------------------
@@ -2358,10 +2376,18 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool loadPresets)
if (LilvNode* const commentNode = lilv_world_get(lv2World.me, patchWritableNode,
lv2World.rdfs_comment.me, nullptr))
{
- rdfParam.Comment = carla_strdup(lilv_node_as_string(commentNode));
+ rdfParam.Comment = carla_strdup_safe(lilv_node_as_string(commentNode));
lilv_node_free(commentNode);
}
+ if (LilvNode* const groupNode = lilv_world_get(lv2World.me, patchWritableNode,
+ lv2World.pg_group.me, nullptr))
+ {
+ rdfParam.GroupURI = carla_strdup_safe(lilv_node_as_uri(groupNode));
+ lilv_node_free(groupNode);
+ portGroups.appendUnique(rdfParam.GroupURI);
+ }
+
// ----------------------------------------------------------------------------------------------------
// Set Port Points
@@ -2497,6 +2523,26 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool loadPresets)
lilv_nodes_free(const_cast(patchWritableNodes.me));
}
+ // ----------------------------------------------------------------------------------------------------------------
+ // Set Plugin Port Groups
+
+ if (const size_t portGroupCount = portGroups.count())
+ {
+ rdfDescriptor->PortGroupCount = static_cast(portGroupCount);
+ rdfDescriptor->PortGroups = new LV2_RDF_PortGroup[portGroupCount];
+
+ std::size_t i=0;
+ for (LinkedList::Itenerator it = portGroups.begin2(); it.valid(); it.next(), ++i)
+ {
+ LV2_RDF_PortGroup& portGroup(rdfDescriptor->PortGroups[i]);
+
+ portGroup.URI = portGroups.getAt(i);
+
+ // TODO
+ portGroup.Label = carla_strdup_safe("test 1");
+ }
+ }
+
// ----------------------------------------------------------------------------------------------------------------
// Set Plugin Presets
diff --git a/source/utils/CarlaStringList.hpp b/source/utils/CarlaStringList.hpp
index 78ffba22a..fb2e8058b 100644
--- a/source/utils/CarlaStringList.hpp
+++ b/source/utils/CarlaStringList.hpp
@@ -156,11 +156,13 @@ private:
class CarlaStringList : public LinkedList
{
public:
- CarlaStringList() noexcept
- : LinkedList() {}
+ CarlaStringList(bool allocateElements = true) noexcept
+ : LinkedList(),
+ fAllocateElements(allocateElements) {}
CarlaStringList(const CarlaStringList& list) noexcept
- : LinkedList()
+ : LinkedList(),
+ fAllocateElements(list.fAllocateElements)
{
for (Itenerator it = list.begin2(); it.valid(); it.next())
LinkedList::append(carla_strdup_safe(it.getValue(nullptr)));
@@ -175,10 +177,13 @@ public:
void clear() noexcept
{
- for (Itenerator it = begin2(); it.valid(); it.next())
+ if (fAllocateElements)
{
- if (const char* const string = it.getValue(nullptr))
- delete[] string;
+ for (Itenerator it = begin2(); it.valid(); it.next())
+ {
+ if (const char* const string = it.getValue(nullptr))
+ delete[] string;
+ }
}
LinkedList::clear();
@@ -190,7 +195,7 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(string != nullptr, false);
- if (const char* const stringDup = carla_strdup_safe(string))
+ if (const char* const stringDup = fAllocateElements ? carla_strdup_safe(string) : string)
{
if (LinkedList::append(stringDup))
return true;
@@ -200,11 +205,21 @@ public:
return false;
}
+ bool appendUnique(const char* const string) noexcept
+ {
+ CARLA_SAFE_ASSERT_RETURN(string != nullptr, false);
+
+ if (contains(string))
+ return false;
+
+ return append(string);
+ }
+
bool appendAt(const char* const string, const Itenerator& it) noexcept
{
CARLA_SAFE_ASSERT_RETURN(string != nullptr, false);
- if (const char* const stringDup = carla_strdup_safe(string))
+ if (const char* const stringDup = fAllocateElements ? carla_strdup_safe(string) : string)
{
if (LinkedList::appendAt(stringDup, it))
return true;
@@ -218,7 +233,7 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(string != nullptr, false);
- if (const char* const stringDup = carla_strdup_safe(string))
+ if (const char* const stringDup = fAllocateElements ? carla_strdup_safe(string) : string)
{
if (LinkedList::insert(stringDup))
return true;
@@ -232,7 +247,7 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(string != nullptr, false);
- if (const char* const stringDup = carla_strdup_safe(string))
+ if (const char* const stringDup = fAllocateElements ? carla_strdup_safe(string) : string)
{
if (LinkedList::insertAt(stringDup, it))
return true;
@@ -392,6 +407,8 @@ public:
CarlaStringList& operator=(const char* const* const charStringList) noexcept
{
+ CARLA_SAFE_ASSERT_RETURN(! fAllocateElements, *this);
+
clear();
CARLA_SAFE_ASSERT_RETURN(charStringList != nullptr, *this);
@@ -407,6 +424,8 @@ public:
CarlaStringList& operator=(const CarlaStringList& list) noexcept
{
+ CARLA_SAFE_ASSERT_RETURN(! fAllocateElements, *this);
+
clear();
for (Itenerator it = list.begin2(); it.valid(); it.next())
@@ -418,6 +437,9 @@ public:
return *this;
}
+private:
+ const bool fAllocateElements;
+
CARLA_PREVENT_VIRTUAL_HEAP_ALLOCATION
};