From 72af571f0cdbf48a4685eb3aff0ca391d07c4719 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 1 Jun 2020 06:34:22 +0200 Subject: [PATCH] Fix automation lane visibility and indices - #8162 This fixes an issue with using StripableTimeAxisView::_automation_tracks for PluginAutomation. The latter is indexed per-plugin in RouteTimeAxisView::processor_automation Evoral::Parameter(PluginAutomation) is only unique per plugin, and hence cannot be used in STAV. --- gtk2_ardour/route_time_axis.cc | 6 +++++- gtk2_ardour/stripable_time_axis.cc | 13 ++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index c9cdb733dc..dd8b2a405e 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1740,6 +1740,8 @@ RouteTimeAxisView::color_handler () void RouteTimeAxisView::toggle_automation_track (const Evoral::Parameter& param) { + assert (param.type() != PluginAutomation); + boost::shared_ptr track = automation_child (param); Gtk::CheckMenuItem* menu = automation_child_menu_item (param); @@ -2145,10 +2147,12 @@ RouteTimeAxisView::add_processor_to_subplugin_menu (boost::weak_ptr p } - boost::shared_ptr atav = automation_child (*i); + boost::shared_ptr atav = pan->view; bool visible; if (atav && atav->get_gui_property ("visible", visible)) { mitem->set_active(true); + } else { + mitem->set_active(false); } mitem->signal_toggled().connect (sigc::bind (sigc::mem_fun(*this, &RouteTimeAxisView::processor_menu_item_toggled), rai, pan)); diff --git a/gtk2_ardour/stripable_time_axis.cc b/gtk2_ardour/stripable_time_axis.cc index aa9d961d6c..295de5f3ba 100644 --- a/gtk2_ardour/stripable_time_axis.cc +++ b/gtk2_ardour/stripable_time_axis.cc @@ -73,9 +73,14 @@ StripableTimeAxisView::add_automation_child (Evoral::Parameter param, boost::sha add_child (track); - track->Hiding.connect (sigc::bind (sigc::mem_fun (*this, &StripableTimeAxisView::automation_track_hidden), param)); - - _automation_tracks[param] = track; + if (param.type() != PluginAutomation) { + /* PluginAutomation is handled by + * - RouteTimeAxisView::processor_automation_track_hidden + * - RouteTimeAxisView::processor_automation + */ + track->Hiding.connect (sigc::bind (sigc::mem_fun (*this, &StripableTimeAxisView::automation_track_hidden), param)); + _automation_tracks[param] = track; + } /* existing state overrides "show" argument */ bool visible; @@ -155,6 +160,7 @@ StripableTimeAxisView::update_mute_track_visibility () Gtk::CheckMenuItem* StripableTimeAxisView::automation_child_menu_item (Evoral::Parameter param) { + assert (param.type() != PluginAutomation); ParameterMenuMap::iterator i = _main_automation_menu_map.find (param); if (i != _main_automation_menu_map.end()) { return i->second; @@ -186,6 +192,7 @@ StripableTimeAxisView::automation_track_hidden (Evoral::Parameter param) boost::shared_ptr StripableTimeAxisView::automation_child(Evoral::Parameter param) { + assert (param.type() != PluginAutomation); AutomationTracks::iterator i = _automation_tracks.find(param); if (i != _automation_tracks.end()) { return i->second;