diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index f3af8744b8..e308cae6b5 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -38,6 +38,8 @@ #include "pbd/stateful.h" #include "pbd/statefuldestructible.h" +#include "temporal/types.h" + #include "ardour/ardour.h" #include "ardour/scene_change.h" #include "ardour/session_handle.h" @@ -169,6 +171,8 @@ public: Temporal::TimeDomain position_time_domain() const { return _start.time_domain(); } void set_position_time_domain (Temporal::TimeDomain ps); + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); + class ChangeSuspender { public: ChangeSuspender (Location* l) : _l (l) { @@ -292,6 +296,8 @@ public: void find_all_between (timepos_t const & start, timepos_t const & end, LocationList&, Location::Flags); + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); + PBD::Signal1 current_changed; /* Objects that care about individual addition and removal of Locations should connect to added/removed. diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index cbfbb6a8f7..cd92ed2bc1 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -302,6 +302,8 @@ public: void set_capture_insertion_in_progress (bool yn); + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); + protected: friend class Session; diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index a0663cab5b..7f8155b823 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -41,6 +41,8 @@ #include "pbd/controllable.h" #include "pbd/destructible.h" +#include "temporal/types.h" + #include "ardour/ardour.h" #include "ardour/gain_control.h" #include "ardour/instrument_info.h" @@ -615,6 +617,8 @@ public: virtual void use_captured_sources (SourceList& srcs, CaptureInfos const &) {} + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); + protected: friend class Session; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index cbf4588b25..797ea6a358 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -2374,6 +2374,8 @@ private: int tb_with_filled_slots; void handle_slots_empty_status (std::weak_ptr const &); + + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); }; diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h index ccfbae9487..84225eed4d 100644 --- a/libs/ardour/ardour/session_playlists.h +++ b/libs/ardour/ardour/session_playlists.h @@ -70,6 +70,8 @@ public: std::vector > get_unused () const; uint32_t n_playlists() const; + void globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to); + private: friend class Session; diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc index a58734a602..9227a086b4 100644 --- a/libs/ardour/location.cc +++ b/libs/ardour/location.cc @@ -763,6 +763,11 @@ Location::set_scene_change (std::shared_ptr sc) } } +void +Location::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ +} + /*---------------------------------------------------------------------- */ Locations::Locations (Session& s) @@ -1716,3 +1721,13 @@ Locations::clear_cue_markers (samplepos_t start, samplepos_t end) return removed_at_least_one; } + +void +Locations::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ + Glib::Threads::RWLock::WriterLock lm (_lock); + for (auto & l : locations) { + globally_change_time_domain (from, to); + } + +} diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 30bde66ac0..f7c3606e32 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -3506,3 +3506,8 @@ Playlist::time_domain() const return Temporal::BeatTime; } + +void +Playlist::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ +} diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index f617a08677..fe2a0d2b34 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -6355,3 +6355,8 @@ Route::tempo_map_changed () _triggerbox->tempo_map_changed (); } } + +void +Route::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ +} diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index 272de7695d..8398b65fc2 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -684,3 +684,13 @@ SessionPlaylists::foreach (boost::function) } } } + +void +SessionPlaylists::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ + Glib::Threads::Mutex::Lock lm (lock); + + for (auto & pl : playlists) { + pl->globally_change_time_domain (from, to); + } +} diff --git a/libs/ardour/session_time.cc b/libs/ardour/session_time.cc index 3501bb6b84..f84f922004 100644 --- a/libs/ardour/session_time.cc +++ b/libs/ardour/session_time.cc @@ -32,7 +32,9 @@ #include "pbd/error.h" #include "pbd/enumwriter.h" +#include "ardour/location.h" #include "ardour/session.h" +#include "ardour/session_playlists.h" #include "ardour/tempo.h" #include "ardour/transport_fsm.h" @@ -296,3 +298,18 @@ Session::any_duration_to_samples (samplepos_t position, AnyTime const & duration return duration.samples; } + +void +Session::globally_change_time_domain (Temporal::TimeDomain from, Temporal::TimeDomain to) +{ + { + std::shared_ptr rl (routes.reader()); + + for (auto & r : *rl) { + r->globally_change_time_domain (from, to); + } + } + + _playlists->globally_change_time_domain (from, to); + _locations->globally_change_time_domain (from, to); +}