X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fplaylist.h;h=d2920fb6105e9c5059ec15171be69c2665944655;hb=022818b4a796f52c0a91eea42e65aec0bc7bed43;hp=9eb66f66b6aa0920f0ea97e2dad0c670d63858d6;hpb=452daa63710c9e13d8fb47573a2525c5e58ef9f5;p=ardour.git diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 9eb66f66b6..d2920fb610 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -35,9 +35,12 @@ #include #include -#include +#include + +#include #include +#include #include #include #include @@ -47,7 +50,7 @@ namespace ARDOUR { class Session; class Region; -class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_from_this { +class Playlist : public SessionObject, public boost::enable_shared_from_this { public: typedef list > RegionList; @@ -67,8 +70,7 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f void release(); bool used () const { return _refcnt != 0; } - std::string name() const { return _name; } - void set_name (std::string str); + bool set_name (const string& str); const DataType& data_type() const { return _type; } @@ -92,9 +94,13 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f void get_region_list_equivalent_regions (boost::shared_ptr, std::vector >&); void replace_region (boost::shared_ptr old, boost::shared_ptr newr, nframes_t pos); void split_region (boost::shared_ptr, nframes_t position); + void split (nframes64_t at); + void shift (nframes64_t at, nframes64_t distance, bool move_intersected, bool ignore_music_glue); void partition (nframes_t start, nframes_t end, bool just_top_level); void duplicate (boost::shared_ptr, nframes_t position, float times); void nudge_after (nframes_t start, nframes_t distance, bool forwards); + void shuffle (boost::shared_ptr, int dir); + void update_after_tempo_map_change (); boost::shared_ptr cut (list&, bool result_is_hidden = true); boost::shared_ptr copy (list&, bool result_is_hidden = true); @@ -102,9 +108,14 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f RegionList* regions_at (nframes_t frame); RegionList* regions_touched (nframes_t start, nframes_t end); + RegionList* regions_to_read (nframes_t start, nframes_t end); boost::shared_ptr find_region (const PBD::ID&) const; boost::shared_ptr top_region_at (nframes_t frame); boost::shared_ptr find_next_region (nframes_t frame, RegionPoint point, int dir); + nframes64_t find_next_region_boundary (nframes64_t frame, int dir); + bool region_is_shuffle_constrained (boost::shared_ptr); + + nframes64_t find_next_transient (nframes64_t position, int dir); template void foreach_region (T *t, void (T::*func)(boost::shared_ptr, void *), void *arg); template void foreach_region (T *t, void (T::*func)(boost::shared_ptr)); @@ -117,21 +128,20 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f sigc::signal Modified; sigc::signal NameChanged; sigc::signal LengthChanged; - sigc::signal LayeringChanged; + sigc::signal > const &> RangesMoved; static string bump_name (string old_name, Session&); - static string bump_name_once (string old_name); void freeze (); void thaw (); + void raise_region (boost::shared_ptr); + void lower_region (boost::shared_ptr); void raise_region_to_top (boost::shared_ptr); void lower_region_to_bottom (boost::shared_ptr); uint32_t read_data_count() const { return _read_data_count; } - Session& session() { return _session; } - const PBD::ID& get_orig_diskstream_id () const { return _orig_diskstream_id; } void set_orig_diskstream_id (const PBD::ID& did) { _orig_diskstream_id = did; } @@ -170,8 +180,7 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f RegionList regions; /* the current list of regions in the playlist */ std::set > all_regions; /* all regions ever added to this playlist */ - string _name; - Session& _session; + std::list region_state_changed_connections; DataType _type; mutable gint block_notifications; mutable gint ignore_state_changes; @@ -181,12 +190,14 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f RegionList pending_bounds; bool pending_modified; bool pending_length; + list< Evoral::RangeMove > pending_range_moves; bool save_on_thaw; string last_save_reason; uint32_t in_set_state; bool first_set_state; bool _hidden; bool _splicing; + bool _shuffling; bool _nudging; uint32_t _refcnt; EditMode _edit_mode; @@ -221,6 +232,7 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f void notify_layering_changed (); void notify_modified (); void notify_state_changed (Change); + void notify_region_moved (boost::shared_ptr); void mark_session_dirty(); @@ -232,12 +244,12 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f void sort_regions (); - void possibly_splice (); - void possibly_splice_unlocked(); - void core_splice (); - void splice_locked (); - void splice_unlocked (); + void possibly_splice (nframes_t at, nframes64_t distance, boost::shared_ptr exclude = boost::shared_ptr()); + void possibly_splice_unlocked(nframes_t at, nframes64_t distance, boost::shared_ptr exclude = boost::shared_ptr()); + void core_splice (nframes_t at, nframes64_t distance, boost::shared_ptr exclude); + void splice_locked (nframes_t at, nframes64_t distance, boost::shared_ptr exclude); + void splice_unlocked (nframes_t at, nframes64_t distance, boost::shared_ptr exclude); virtual void finalize_split_region (boost::shared_ptr original, boost::shared_ptr left, boost::shared_ptr right) {} @@ -249,7 +261,7 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f boost::shared_ptr region_by_id (PBD::ID); - void add_region_internal (boost::shared_ptr, nframes_t position); + bool add_region_internal (boost::shared_ptr, nframes_t position); int remove_region_internal (boost::shared_ptr); RegionList *find_regions_at (nframes_t frame); @@ -263,12 +275,15 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f boost::shared_ptr cut (nframes_t start, nframes_t cnt, bool result_is_hidden); boost::shared_ptr copy (nframes_t start, nframes_t cnt, bool result_is_hidden); + int move_region_to_layer (layer_t, boost::shared_ptr r, int dir); void relayer (); void unset_freeze_parent (Playlist*); void unset_freeze_child (Playlist*); void timestamp_layer_op (boost::shared_ptr); + + void _split_region (boost::shared_ptr, nframes_t position); }; } /* namespace ARDOUR */