X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fplaylist.h;h=04615acb26d0874c7c7d6b818adf376cf7b28902;hb=e16866416738a3b2089e760fb76d45ff7a59fe3a;hp=08ecd10853f959b20fc28e4d01925d352835e4ed;hpb=e7c47747286c16aa575456b07120e1e8e8271bd5;p=ardour.git diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 08ecd10853..04615acb26 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -38,16 +38,16 @@ #include "pbd/sequence_property.h" #include "pbd/stacktrace.h" -#include "evoral/types.hpp" +#include "evoral/Range.hpp" #include "ardour/ardour.h" +#include "ardour/region.h" #include "ardour/session_object.h" #include "ardour/data_type.h" namespace ARDOUR { class Session; -class Region; class Playlist; class Crossfade; @@ -120,6 +120,7 @@ public: uint32_t n_regions() const; bool all_regions_empty() const; std::pair get_extent () const; + std::pair get_extent_with_endspace() const; layer_t top_layer() const; EditMode get_edit_mode() const { return _edit_mode; } @@ -127,30 +128,43 @@ public: /* Editing operations */ - void add_region (boost::shared_ptr, framepos_t position, float times = 1, bool auto_partition = false); + void add_region (boost::shared_ptr, framepos_t position, float times = 1, bool auto_partition = false, const int32_t sub_num = 0); void remove_region (boost::shared_ptr); - void remove_region_by_source (boost::shared_ptr); void get_equivalent_regions (boost::shared_ptr, std::vector >&); void get_region_list_equivalent_regions (boost::shared_ptr, std::vector >&); void get_source_equivalent_regions (boost::shared_ptr, std::vector >&); void replace_region (boost::shared_ptr old, boost::shared_ptr newr, framepos_t pos); - void split_region (boost::shared_ptr, framepos_t position); - void split (framepos_t at); + void split_region (boost::shared_ptr, framepos_t position, const int32_t sub_num); + void split (framepos_t at, const int32_t sub_num); void shift (framepos_t at, frameoffset_t distance, bool move_intersected, bool ignore_music_glue); void partition (framepos_t start, framepos_t end, bool cut = false); void duplicate (boost::shared_ptr, framepos_t position, float times); + void duplicate (boost::shared_ptr, framepos_t position, framecnt_t gap, float times); + void duplicate_until (boost::shared_ptr, framepos_t position, framecnt_t gap, framepos_t end); + void duplicate_range (AudioRange&, float times); + void duplicate_ranges (std::list&, float times); void nudge_after (framepos_t start, framecnt_t distance, bool forwards); boost::shared_ptr combine (const RegionList&); void uncombine (boost::shared_ptr); + void fade_range (std::list&); void shuffle (boost::shared_ptr, int dir); + void ripple (framepos_t at, framecnt_t distance, RegionList *exclude); + void ripple (framepos_t at, framecnt_t distance, boost::shared_ptr exclude) { + RegionList el; + if (exclude) + el.push_back (exclude); + ripple (at, distance, &el); + } + void update_after_tempo_map_change (); boost::shared_ptr cut (std::list&, bool result_is_hidden = true); boost::shared_ptr copy (std::list&, bool result_is_hidden = true); - int paste (boost::shared_ptr, framepos_t position, float times); + int paste (boost::shared_ptr, framepos_t position, float times, const int32_t sub_num); - const RegionListProperty& region_list () const { return regions; } + const RegionListProperty& region_list_property () const { return regions; } + boost::shared_ptr region_list(); boost::shared_ptr regions_at (framepos_t frame); uint32_t count_regions_at (framepos_t) const; @@ -166,7 +180,8 @@ public: bool region_is_shuffle_constrained (boost::shared_ptr); bool has_region_at (framepos_t const) const; - bool uses_source (boost::shared_ptr src) const; + bool uses_source (boost::shared_ptr src, bool shallow = false) const; + void deep_sources (std::set >&) const; framepos_t find_next_transient (framepos_t position, int dir); @@ -226,7 +241,7 @@ public: void set_layer (boost::shared_ptr, double); void set_capture_insertion_in_progress (bool yn); - + protected: friend class Session; @@ -239,7 +254,7 @@ public: class RegionWriteLock : public Glib::Threads::RWLock::WriterLock { public: - RegionWriteLock (Playlist *pl, bool do_block_notify = true) + RegionWriteLock (Playlist *pl, bool do_block_notify = true) : Glib::Threads::RWLock::WriterLock (pl->region_lock) , playlist (pl) , block_notify (do_block_notify) { @@ -283,6 +298,7 @@ public: bool first_set_state; bool _hidden; bool _splicing; + bool _rippling; bool _shuffling; bool _nudging; uint32_t _refcnt; @@ -337,11 +353,16 @@ public: void splice_locked (framepos_t at, framecnt_t distance, boost::shared_ptr exclude); void splice_unlocked (framepos_t at, framecnt_t distance, boost::shared_ptr exclude); + void core_ripple (framepos_t at, framecnt_t distance, RegionList *exclude); + void ripple_locked (framepos_t at, framecnt_t distance, RegionList *exclude); + void ripple_unlocked (framepos_t at, framecnt_t distance, RegionList *exclude); + + virtual void remove_dependents (boost::shared_ptr /*region*/) {} virtual XMLNode& state (bool); - bool add_region_internal (boost::shared_ptr, framepos_t position); + bool add_region_internal (boost::shared_ptr, framepos_t position, const int32_t sub_num = 0); int remove_region_internal (boost::shared_ptr); void copy_regions (RegionList&) const; @@ -359,7 +380,7 @@ public: void begin_undo (); void end_undo (); - void _split_region (boost::shared_ptr, framepos_t position); + void _split_region (boost::shared_ptr, framepos_t position, const int32_t sub_num); typedef std::pair, boost::shared_ptr > TwoRegions; @@ -381,6 +402,8 @@ public: void setup_layering_indices (RegionList const &); void coalesce_and_check_crossfades (std::list >); boost::shared_ptr find_regions_at (framepos_t); + + framepos_t _end_space; //this is used when we are pasting a range with extra space at the end }; } /* namespace ARDOUR */