From 8e07e115429a0869593d4f29dc3e6cf5c8b25049 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 18 Feb 2011 16:33:28 +0000 Subject: Use port name from SLV2 for labels where possible (fix ticket #636). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2991 a436a847-0d15-0410-975c-d299462d15a1 --- src/client/NodeModel.cpp | 27 +++++++++++++++++++++++++++ src/client/NodeModel.hpp | 2 ++ 2 files changed, 29 insertions(+) (limited to 'src/client') diff --git a/src/client/NodeModel.cpp b/src/client/NodeModel.cpp index 2ffd751d..1ff3cae6 100644 --- a/src/client/NodeModel.cpp +++ b/src/client/NodeModel.cpp @@ -221,6 +221,33 @@ NodeModel::port_value_range(SharedPtr port, float& min, float& max) c } +std::string +NodeModel::port_label(SharedPtr port) const +{ + const Raul::Atom& name = port->get_property("http://lv2plug.in/ns/lv2core#name"); + if (name.is_valid()) { + return name.get_string(); + } + +#ifdef HAVE_SLV2 + if (_plugin && _plugin->type() == PluginModel::LV2) { + SLV2World c_world = _plugin->slv2_world(); + SLV2Plugin c_plugin = _plugin->slv2_plugin(); + SLV2Value c_sym = slv2_value_new_string(c_world, port->symbol().c_str()); + SLV2Port c_port = slv2_plugin_get_port_by_symbol(c_plugin, c_sym); + if (c_port) { + SLV2Value c_name = slv2_port_get_name(c_plugin, c_port); + if (c_name && slv2_value_is_string(c_name)) { + return slv2_value_as_string(c_name); + } + } + } +#endif + + return port->symbol().c_str(); +} + + void NodeModel::set(SharedPtr model) { diff --git a/src/client/NodeModel.hpp b/src/client/NodeModel.hpp index fa4af66c..939197b1 100644 --- a/src/client/NodeModel.hpp +++ b/src/client/NodeModel.hpp @@ -67,6 +67,8 @@ public: void default_port_value_range(SharedPtr port, float& min, float& max) const; void port_value_range(SharedPtr port, float& min, float& max) const; + std::string port_label(SharedPtr port) const; + // Signals sigc::signal > signal_new_port; sigc::signal > signal_removed_port; -- cgit v1.2.1