From 800d07a633e8cffe92c3809115072c63f35632eb Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 17 Oct 2022 06:42:49 +0200 Subject: [PATCH] Add API to query all AutomationControls from an Automtable This is in preparation for selective MixerScene restore. --- libs/ardour/ardour/automatable.h | 2 ++ libs/ardour/ardour/route.h | 2 ++ libs/ardour/automatable.cc | 11 +++++++++++ libs/ardour/route.cc | 13 +++++++++++++ 4 files changed, 28 insertions(+) diff --git a/libs/ardour/ardour/automatable.h b/libs/ardour/ardour/automatable.h index c4b09cb367..6eb1ce01fc 100644 --- a/libs/ardour/ardour/automatable.h +++ b/libs/ardour/ardour/automatable.h @@ -55,6 +55,8 @@ public: virtual ~Automatable(); + virtual void automatables (AutomationControlSet&) const; + static bool skip_saving_automation; // to be used only by session-state boost::shared_ptr control_factory(const Evoral::Parameter& id); diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index b3a4ca1f8c..af28bc2d6b 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -258,6 +258,8 @@ public: boost::shared_ptr automation_control_recurse (PBD::ID const & id) const; + void automatables (AutomationControlSet&) const; + /* special processors */ boost::shared_ptr monitor_send() const { return _monitor_send; } diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index 3dba0f998a..8d62a27c5e 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -610,6 +610,17 @@ Automatable::control_factory(const Evoral::Parameter& param) return boost::shared_ptr(control); } +void +Automatable::automatables (AutomationControlSet& s) const +{ + for (auto const& i : _controls) { + boost::shared_ptr ac = boost::dynamic_pointer_cast (i.second); + if (ac) { + s.insert (ac); + } + } +} + boost::shared_ptr Automatable::automation_control (PBD::ID const & id) const { diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 8e9b9bad1f..5364daf958 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -6306,6 +6306,19 @@ Route::automation_control_recurse (PBD::ID const & id) const return boost::shared_ptr (); } +void +Route::automatables (AutomationControlSet& s) const +{ + Automatable::automatables (s); + if (_pannable) { + _pannable->automatables (s); + } + Glib::Threads::RWLock::ReaderLock lm (_processor_lock); + for (auto const& i : _processors) { + i->automatables (s); + } +} + SlavableControlList Route::slavables () const {