diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index d0f1f524da..fbb20d4cdc 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -381,7 +381,7 @@ - + diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index bf9bd159e7..a15c113a67 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -229,7 +229,7 @@ AutomationLine::AutomationLine (const string & name, TimeAxisView& tv, ArdourCan points_visible = false; update_pending = false; _vc_uses_gain_mapping = false; - no_draw = false; + auto_is_boolean = false; _visible = true; terminal_points_can_slide = true; _height = 0; @@ -1242,10 +1242,6 @@ AutomationLine::reset () { update_pending = false; - if (no_draw) { - return; - } - alist.apply_to_points (*this, &AutomationLine::reset_callback); } @@ -1274,6 +1270,10 @@ AutomationLine::change_model_range (AutomationList::iterator start, AutomationLi void AutomationLine::show_all_control_points () { + if (auto_is_boolean) { //show the automation line but don't allow any control points + return; + } + points_visible = true; for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index 0a25a839e5..dcbbac7604 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -172,7 +172,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulThingWithGoin bool _vc_uses_gain_mapping : 1; bool terminal_points_can_slide : 1; bool update_pending : 1; - bool no_draw : 1; + bool auto_is_boolean : 1; bool points_visible : 1; bool did_push; diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc index c90b709416..2a8738f818 100644 --- a/gtk2_ardour/generic_pluginui.cc +++ b/gtk2_ardour/generic_pluginui.cc @@ -448,7 +448,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, PBD::Controllable* mcontr control_ui->pack_start (control_ui->label, true, true); control_ui->pack_start (*control_ui->button, false, true); - //control_ui->pack_start (control_ui->automate_button, false, false); + control_ui->pack_start (control_ui->automate_button, false, false); if(plugin->get_parameter (port_index) > 0.5){ control_ui->button->set_active(true); @@ -458,6 +458,11 @@ GenericPluginUI::build_control_ui (guint32 port_index, PBD::Controllable* mcontr plugin->ParameterChanged.connect (bind (mem_fun(*this, &GenericPluginUI::toggle_parameter_changed), control_ui)); + control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui, (uint32_t) port_index)); + automation_state_changed (control_ui); + insert->automation_list (port_index).automation_state_changed.connect + (bind (mem_fun(*this, &GenericPluginUI::automation_state_changed), control_ui)); + return control_ui; } diff --git a/gtk2_ardour/redirect_automation_line.cc b/gtk2_ardour/redirect_automation_line.cc index 942344a127..c0c8ad49e7 100644 --- a/gtk2_ardour/redirect_automation_line.cc +++ b/gtk2_ardour/redirect_automation_line.cc @@ -61,11 +61,11 @@ RedirectAutomationLine::RedirectAutomationLine (const string & name, Redirect& r range = upper - lower; if (desc.toggled) { - no_draw = true; + auto_is_boolean = true; return; } - no_draw = false; + auto_is_boolean = false; /* XXX set min/max for underlying curve ??? */ } diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc index a866191359..3214182c4f 100644 --- a/libs/ardour/insert.cc +++ b/libs/ardour/insert.cc @@ -399,9 +399,15 @@ PluginInsert::set_parameter (uint32_t port, float val) { /* the others will be set from the event triggered by this */ + float last_val = _plugins[0]->get_parameter (port); + Plugin::ParameterDescriptor desc; + _plugins[0]->get_parameter_descriptor(port, desc); + _plugins[0]->set_parameter (port, val); if (automation_list (port).automation_write()) { + if ( desc.toggled ) //store the previous value just before this so any interpolation works right + automation_list (port).add (_session.audible_frame()-1, last_val); automation_list (port).add (_session.audible_frame(), val); }