summaryrefslogtreecommitdiff
path: root/libs/ardour/plugin.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-09-26 20:07:49 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-09-26 20:07:49 +0000
commit0fe9b6310013549b509da2311b16c56e0b498d7d (patch)
treeb4299400540a088893011965c7a23dc95d6d7162 /libs/ardour/plugin.cc
parentddda6bc4f52e56983924a6ce4f41db4915972be8 (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.cc35
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)
{