diff options
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 1 | ||||
-rw-r--r-- | libs/ardour/plugin_insert.cc | 14 | ||||
-rw-r--r-- | libs/ardour/vst_plugin.cc | 6 |
3 files changed, 20 insertions, 1 deletions
diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 0784659e2b..570b48de9a 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -208,6 +208,7 @@ public: double get_value (void) const; void catch_up_with_external_value (double val); XMLNode& get_state(); + std::string get_user_string() const; private: PluginInsert* _plugin; diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index e1554cc8f1..3a7aff34ab 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -3001,6 +3001,20 @@ PluginInsert::PluginControl::get_value () const return plugin->get_parameter (_list->parameter().id()); } +std::string +PluginInsert::PluginControl::get_user_string () const +{ + boost::shared_ptr<Plugin> plugin = _plugin->plugin (0); + if (plugin) { + char buf[32]; + if (plugin->print_parameter (parameter().id(), buf, sizeof(buf))) { + assert (strlen (buf) > 0); + return std::string (buf) + " (" + AutomationControl::get_user_string () + ")"; + } + } + return AutomationControl::get_user_string (); +} + PluginInsert::PluginPropertyControl::PluginPropertyControl (PluginInsert* p, const Evoral::Parameter& param, const ParameterDescriptor& desc, diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc index 7c68c07f92..559f76a76d 100644 --- a/libs/ardour/vst_plugin.cc +++ b/libs/ardour/vst_plugin.cc @@ -807,9 +807,11 @@ VSTPlugin::has_editor () const } bool -VSTPlugin::print_parameter (uint32_t param, char *buf, uint32_t /*len*/) const +VSTPlugin::print_parameter (uint32_t param, char *buf, uint32_t len) const { char *first_nonws; + assert (len > VestigeMaxShortLabelLen); + memset (buf, 0, len); _plugin->dispatcher (_plugin, 7 /* effGetParamDisplay */, param, 0, buf, 0); @@ -817,6 +819,8 @@ VSTPlugin::print_parameter (uint32_t param, char *buf, uint32_t /*len*/) const return false; } + buf[len - 1] = '\0'; + first_nonws = buf; while (*first_nonws && isspace (*first_nonws)) { first_nonws++; |