diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-09-26 20:07:49 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-09-26 20:07:49 +0000 |
commit | 0fe9b6310013549b509da2311b16c56e0b498d7d (patch) | |
tree | b4299400540a088893011965c7a23dc95d6d7162 /libs/ardour/plugin.cc | |
parent | ddda6bc4f52e56983924a6ce4f41db4915972be8 (diff) |
retain controllable info for plugins
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2488 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/plugin.cc')
-rw-r--r-- | libs/ardour/plugin.cc | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc index b1fb43fc8f..d95ab702ac 100644 --- a/libs/ardour/plugin.cc +++ b/libs/ardour/plugin.cc @@ -82,17 +82,35 @@ Plugin::~Plugin () } } +void +Plugin::make_nth_control (uint32_t n, const XMLNode& node) +{ + if (controls[n]) { + error << string_compose (_("programming error: %1"), + X_("Plugin::make_nth_control() called too late")) + << endmsg; + return; + } + + Plugin::ParameterDescriptor desc; + + get_parameter_descriptor (n, desc); + + controls[n] = new PortControllable (node, *this, n, + desc.lower, desc.upper, desc.toggled, desc.logarithmic); +} + Controllable * -Plugin::get_nth_control (uint32_t n) +Plugin::get_nth_control (uint32_t n, bool do_not_create) { if (n >= parameter_count()) { return 0; } - if (controls[n] == 0) { + if (controls[n] == 0 && !do_not_create) { Plugin::ParameterDescriptor desc; - + get_parameter_descriptor (n, desc); controls[n] = new PortControllable (describe_parameter (n), *this, n, @@ -113,6 +131,17 @@ Plugin::PortControllable::PortControllable (string name, Plugin& p, uint32_t por range = upper - lower; } +Plugin::PortControllable::PortControllable (const XMLNode& node, Plugin& p, uint32_t port_id, + float low, float up, bool t, bool loga) + : Controllable (node), plugin (p), absolute_port (port_id) +{ + toggled = t; + logarithmic = loga; + lower = low; + upper = up; + range = upper - lower; +} + void Plugin::PortControllable::set_value (float value) { |