diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index dd8b2a405e..8fd8855f53 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2749,6 +2749,24 @@ RouteTimeAxisView::remove_child (boost::shared_ptr c) } } +boost::shared_ptr +RouteTimeAxisView::automation_child_by_alist_id (PBD::ID alist_id) +{ + for (list::iterator i = processor_automation.begin(); i != processor_automation.end(); ++i) { + for (vector::iterator ii = (*i)->lines.begin(); ii != (*i)->lines.end(); ++ii) { + boost::shared_ptr atv ((*ii)->view); + list > lines = atv->lines(); + for (list >::const_iterator li = lines.begin(); li != lines.end(); ++li) { + if ((*li)->the_list()->id() == alist_id) { + return *li; + } + } + } + } + return StripableTimeAxisView::automation_child_by_alist_id (alist_id); +} + + Gdk::Color RouteTimeAxisView::color () const { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 855a0ac341..4db1036cd9 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -208,6 +208,7 @@ protected: void add_processor_automation_curve (boost::shared_ptr r, Evoral::Parameter); void add_existing_processor_automation_curves (boost::weak_ptr); + boost::shared_ptr automation_child_by_alist_id (PBD::ID); void reset_processor_automation_curves (); diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index eeccde1301..4b8ff41160 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1247,17 +1247,12 @@ Selection::set_state (XMLNode const & node, int) vector cps; if (stv) { - boost::shared_ptr atv = stv->automation_child (EventTypeMap::instance().from_symbol (param)); - if (atv) { - list > lines = atv->lines(); - for (list > ::iterator li = lines.begin(); li != lines.end(); ++li) { - if ((*li)->the_list()->id() == alist_id) { - ControlPoint* cp = (*li)->nth(view_index); - if (cp) { - cps.push_back (cp); - cp->show(); - } - } + boost::shared_ptr li = stv->automation_child_by_alist_id (alist_id); + if (li) { + ControlPoint* cp = li->nth(view_index); + if (cp) { + cps.push_back (cp); + cp->show(); } } } @@ -1307,12 +1302,15 @@ Selection::set_state (XMLNode const & node, int) } else if ((*i)->name() == X_("AutomationView")) { +#if 0 std::string param; if (!(*i)->get_property (X_("id"), id) || !(*i)->get_property (X_("parameter"), param)) { assert (false); } + // TODO we need additional information Evoral::Parmeter does not uniquely identify an Automation Lane + StripableTimeAxisView* stv = editor->get_stripable_time_axis_by_id (id); if (stv) { @@ -1327,6 +1325,7 @@ Selection::set_state (XMLNode const & node, int) add (atv.get()); } } +#endif } else if ((*i)->name() == X_("Marker")) { diff --git a/gtk2_ardour/stripable_time_axis.cc b/gtk2_ardour/stripable_time_axis.cc index 295de5f3ba..f1e01fde4a 100644 --- a/gtk2_ardour/stripable_time_axis.cc +++ b/gtk2_ardour/stripable_time_axis.cc @@ -25,6 +25,7 @@ #include "public_editor.h" #include "stripable_time_axis.h" +#include "automation_line.h" #include "pbd/i18n.h" @@ -201,6 +202,21 @@ StripableTimeAxisView::automation_child(Evoral::Parameter param) } } +boost::shared_ptr +StripableTimeAxisView::automation_child_by_alist_id (PBD::ID alist_id) +{ + for (AutomationTracks::iterator i = _automation_tracks.begin(); i != _automation_tracks.end(); ++i) { + boost::shared_ptr atv (i->second); + std::list > lines = atv->lines(); + for (std::list >::const_iterator li = lines.begin(); li != lines.end(); ++li) { + if ((*li)->the_list()->id() == alist_id) { + return *li; + } + } + } + return boost::shared_ptr (); +} + void StripableTimeAxisView::request_redraw () { diff --git a/gtk2_ardour/stripable_time_axis.h b/gtk2_ardour/stripable_time_axis.h index df0715e921..27903a54dd 100644 --- a/gtk2_ardour/stripable_time_axis.h +++ b/gtk2_ardour/stripable_time_axis.h @@ -38,6 +38,8 @@ public: virtual void create_automation_child (const Evoral::Parameter& param, bool show) = 0; boost::shared_ptr automation_child(Evoral::Parameter param); + virtual boost::shared_ptr automation_child_by_alist_id (PBD::ID); + void request_redraw (); virtual void show_all_automation (bool apply_to_selection = false);