summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-10-31 22:20:24 -0400
committerDavid Robillard <d@drobilla.net>2014-11-02 02:10:24 -0500
commitbd6ba1717ef43bd4399b96a03bbb576eab55b9a2 (patch)
tree90efa347d135508c1b40611ab1037baac639cdf7
parent0178f85b05139e217c3749442d9d66a93839683c (diff)
Decouple ControlUI from port index.
-rw-r--r--gtk2_ardour/generic_pluginui.cc33
-rw-r--r--gtk2_ardour/plugin_ui.h10
-rw-r--r--libs/ardour/ardour/plugin.h5
-rw-r--r--libs/ardour/ladspa_plugin.cc2
-rw-r--r--libs/ardour/lv2_plugin.cc1
5 files changed, 29 insertions, 22 deletions
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc
index 79373af836..b50d888f2f 100644
--- a/gtk2_ardour/generic_pluginui.cc
+++ b/gtk2_ardour/generic_pluginui.cc
@@ -262,7 +262,9 @@ GenericPluginUI::build ()
= boost::dynamic_pointer_cast<ARDOUR::AutomationControl>(
insert->control(Evoral::Parameter(PluginAutomation, 0, i)));
- if ((cui = build_control_ui (i, c)) == 0) {
+ Plugin::ParameterDescriptor desc;
+ plugin->get_parameter_descriptor(i, desc);
+ if ((cui = build_control_ui (desc, c, plugin->parameter_is_input(i))) == 0) {
error << string_compose(_("Plugin Editor: could not build control element for port %1"), i) << endmsg;
continue;
}
@@ -560,13 +562,13 @@ GenericPluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
}
GenericPluginUI::ControlUI*
-GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<AutomationControl> mcontrol)
+GenericPluginUI::build_control_ui (const Plugin::ParameterDescriptor& desc,
+ boost::shared_ptr<AutomationControl> mcontrol,
+ bool is_input)
{
ControlUI* control_ui = 0;
- Plugin::ParameterDescriptor desc;
-
- plugin->get_parameter_descriptor (port_index, desc);
+ const float value = mcontrol->get_value();
control_ui = manage (new ControlUI ());
control_ui->combo = 0;
@@ -575,16 +577,15 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
control_ui->label.set_text (desc.label);
control_ui->label.set_alignment (0.0, 0.5);
control_ui->label.set_name ("PluginParameterLabel");
- control_ui->port_index = port_index;
control_ui->set_spacing (5);
Gtk::Requisition req (control_ui->automate_button.size_request());
- if (plugin->parameter_is_input(port_index)) {
+ if (is_input) {
/* See if there any named values for our input value */
- control_ui->scale_points = plugin->get_scale_points (port_index);
+ control_ui->scale_points = desc.scale_points;
/* If this parameter is an integer, work out the number of distinct values
it can take on (assuming that lower and upper values are allowed).
@@ -637,12 +638,12 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
control_ui->pack_start (control_ui->automate_button, false, false);
control_ui->button->signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_port_toggled), control_ui));
- control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui, (uint32_t) port_index));
+ control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui));
mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::toggle_parameter_changed, this, control_ui), gui_context());
mcontrol->alist()->automation_state_changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::automation_state_changed, this, control_ui), gui_context());
- if (plugin->get_parameter (port_index) > 0.5){
+ if (value > 0.5){
control_ui->button->set_active(true);
}
@@ -683,7 +684,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
}
- adj->set_value (mcontrol->internal_to_interface(plugin->get_parameter (port_index)));
+ adj->set_value (mcontrol->internal_to_interface(value));
/* XXX memory leak: SliderController not destroyed by ControlUI
destructor, and manage() reports object hierarchy
@@ -698,7 +699,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
}
control_ui->pack_start (control_ui->automate_button, false, false);
- control_ui->automate_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui, (uint32_t) port_index));
+ control_ui->automate_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui));
automation_state_changed (control_ui);
@@ -707,7 +708,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
input_controls.push_back (control_ui);
- } else if (plugin->parameter_is_output (port_index)) {
+ } else if (!is_input) {
control_ui->display = manage (new EventBox);
control_ui->display->set_name ("ParameterValueDisplay");
@@ -724,7 +725,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
/* set up a meter */
/* TODO: only make a meter if the port is Hinted for it */
- MeterInfo * info = new MeterInfo(port_index);
+ MeterInfo * info = new MeterInfo();
control_ui->meterinfo = info;
info->meter = new FastMeter (
@@ -787,7 +788,7 @@ GenericPluginUI::stop_touch (GenericPluginUI::ControlUI* cui)
}
void
-GenericPluginUI::astate_clicked (ControlUI* cui, uint32_t /*port*/)
+GenericPluginUI::astate_clicked (ControlUI* cui)
{
using namespace Menu_Helpers;
@@ -937,7 +938,7 @@ void
GenericPluginUI::output_update ()
{
for (vector<ControlUI*>::iterator i = output_controls.begin(); i != output_controls.end(); ++i) {
- float val = plugin->get_parameter ((*i)->port_index);
+ float val = (*i)->control->get_value();
char buf[32];
snprintf (buf, sizeof(buf), "%.2f", val);
(*i)->display_label->set_text (buf);
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index b7e2b5f2df..1f2a390373 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -208,7 +208,7 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
bool max_unbound;
bool packed;
- MeterInfo (int /*i*/) {
+ MeterInfo () {
meter = 0;
packed = false;
min = 1.0e10;
@@ -226,7 +226,6 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
/* FIXME: Unify with AutomationController */
struct ControlUI : public Gtk::HBox {
- uint32_t port_index;
boost::shared_ptr<ARDOUR::AutomationControl> control;
Evoral::Parameter parameter() { return control->parameter(); }
@@ -262,14 +261,17 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
void output_update();
void build ();
- ControlUI* build_control_ui (guint32 port_index, boost::shared_ptr<ARDOUR::AutomationControl>);
+ ControlUI* build_control_ui (const ARDOUR::Plugin::ParameterDescriptor& desc,
+ boost::shared_ptr<ARDOUR::AutomationControl> mcontrol,
+ bool is_input);
+
void ui_parameter_changed (ControlUI* cui);
void toggle_parameter_changed (ControlUI* cui);
void update_control_display (ControlUI* cui);
void control_port_toggled (ControlUI* cui);
void control_combo_changed (ControlUI* cui);
- void astate_clicked (ControlUI*, uint32_t parameter);
+ void astate_clicked (ControlUI*);
void automation_state_changed (ControlUI*);
void set_automation_state (ARDOUR::AutoState state, ControlUI* cui);
void start_touch (ControlUI*);
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 08f242c7b4..f1a54b073a 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -95,6 +95,8 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
Plugin (const Plugin&);
virtual ~Plugin ();
+ typedef std::map<const std::string, const float> ScalePoints;
+
struct ParameterDescriptor {
ParameterDescriptor ()
@@ -131,6 +133,7 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
bool midinote; ///< only used if integer_step is also true
uint32_t key; ///< for properties
Variant::Type datatype; ///< for properties
+ boost::shared_ptr<ScalePoints> scale_points;
};
XMLNode& get_state ();
@@ -170,8 +173,6 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
virtual bool parameter_is_input(uint32_t) const = 0;
virtual bool parameter_is_output(uint32_t) const = 0;
- typedef std::map<const std::string, const float> ScalePoints;
-
virtual boost::shared_ptr<ScalePoints> get_scale_points(uint32_t /*port_index*/) const {
return boost::shared_ptr<ScalePoints>();
}
diff --git a/libs/ardour/ladspa_plugin.cc b/libs/ardour/ladspa_plugin.cc
index 8b089929b5..a33e7e0911 100644
--- a/libs/ardour/ladspa_plugin.cc
+++ b/libs/ardour/ladspa_plugin.cc
@@ -522,6 +522,8 @@ LadspaPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& des
desc.label = port_names()[which];
+ desc.scale_points = get_scale_points(which);
+
return 0;
}
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 4d5e063c71..ac4e213851 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -1562,6 +1562,7 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
}
desc.enumeration = lilv_port_has_property(_impl->plugin, port, _world.lv2_enumeration);
+ desc.scale_points = get_scale_points(which);
lilv_node_free(def);
lilv_node_free(min);