X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fplaylist.h;h=9e15b9cf5d10795f2d283d93eb866a3d12e296ea;hb=cd2047cbffc5e0270acab555364bb9d958fe7927;hp=a9bbd9346b8720d26e8981ecd54ccfb9b8733cc2;hpb=28d3dd69de2d99fabcc556f4c41aafdf3c1cb1cc;p=ardour.git diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index a9bbd9346b..9e15b9cf5d 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -49,19 +49,19 @@ namespace ARDOUR { class Session; class Region; class Playlist; -class Crossfade; +class Crossfade; namespace Properties { - /* fake the type, since regions are handled by SequenceProperty which doesn't - care about such things. - */ - extern PBD::PropertyDescriptor regions; + /* fake the type, since regions are handled by SequenceProperty which doesn't + care about such things. + */ + extern PBD::PropertyDescriptor regions; } class RegionListProperty : public PBD::SequenceProperty > > { public: - RegionListProperty (Playlist&); + RegionListProperty (Playlist&); RegionListProperty* clone () const; void get_content_as_xml (boost::shared_ptr, XMLNode &) const; @@ -73,16 +73,16 @@ class RegionListProperty : public PBD::SequenceProperty { public: typedef std::list > RegionList; - static void make_property_quarks (); + static void make_property_quarks (); Playlist (Session&, const XMLNode&, DataType type, bool hidden = false); Playlist (Session&, std::string name, DataType type, bool hidden = false); @@ -91,12 +91,14 @@ public: virtual ~Playlist (); - void update (const RegionListProperty::ChangeRecord&); - void clear_owned_changes (); - void rdiff (std::vector&) const; + void update (const RegionListProperty::ChangeRecord&); + void clear_owned_changes (); + void rdiff (std::vector&) const; boost::shared_ptr region_by_id (const PBD::ID&) const; + uint32_t max_source_level () const; + void set_region_ownership (); virtual void clear (bool with_signals=true); @@ -107,7 +109,7 @@ public: bool used () const { return _refcnt != 0; } bool set_name (const std::string& str); - int sort_id() { return _sort_id; } + int sort_id() { return _sort_id; } const DataType& data_type() const { return _type; } @@ -137,6 +139,9 @@ public: void partition (framepos_t start, framepos_t end, bool cut = false); void duplicate (boost::shared_ptr, framepos_t position, 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 shuffle (boost::shared_ptr, int dir); void update_after_tempo_map_change (); @@ -147,7 +152,8 @@ public: const RegionListProperty& region_list () const { return regions; } RegionList* regions_at (framepos_t frame); - uint32_t count_regions_at (framepos_t); + uint32_t count_regions_at (framepos_t) const; + uint32_t count_joined_regions () const; RegionList* regions_touched (framepos_t start, framepos_t end); RegionList* regions_to_read (framepos_t start, framepos_t end); uint32_t region_use_count (boost::shared_ptr) const; @@ -159,6 +165,7 @@ 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; framepos_t find_next_transient (framepos_t position, int dir); @@ -194,8 +201,6 @@ public: 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; } - /* XXX: use of diskstream here is a little unfortunate */ 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; } @@ -204,6 +209,8 @@ public: virtual bool destroy_region (boost::shared_ptr) = 0; + void sync_all_regions_with_regions (); + /* special case function used by UI selection objects, which have playlists that actually own the regions within them. */ @@ -220,7 +227,8 @@ public: return boost::shared_ptr (); } - framepos_t find_next_top_layer_position (framepos_t) const; + framepos_t find_next_top_layer_position (framepos_t) const; + uint32_t combine_ops() const { return _combine_ops; } protected: friend class Session; @@ -245,11 +253,11 @@ public: friend class RegionLock; - RegionListProperty regions; /* the current list of regions in the playlist */ + RegionListProperty regions; /* the current list of regions in the playlist */ std::set > all_regions; /* all regions ever added to this playlist */ PBD::ScopedConnectionList region_state_changed_connections; DataType _type; - int _sort_id; + int _sort_id; mutable gint block_notifications; mutable gint ignore_state_changes; mutable Glib::RecMutex region_lock; @@ -282,11 +290,11 @@ public: bool in_partition; bool _frozen; uint32_t subcnt; - uint32_t _read_data_count; PBD::ID _orig_diskstream_id; uint64_t layer_op_counter; framecnt_t freeze_length; bool auto_partition; + uint32_t _combine_ops; /** true if relayering should be done using region's current layers and their `pending explicit relayer' * flags; otherwise false if relayering should be done using the layer-model (most recently moved etc.) @@ -306,7 +314,7 @@ public: virtual void flush_notifications (bool from_undo = false); void clear_pending (); - void _set_sort_id (); + void _set_sort_id (); void notify_region_removed (boost::shared_ptr); void notify_region_added (boost::shared_ptr); @@ -368,6 +376,25 @@ public: void timestamp_layer_op (boost::shared_ptr); void _split_region (boost::shared_ptr, framepos_t position); + + typedef std::pair, boost::shared_ptr > TwoRegions; + virtual void copy_dependents (const std::vector&, Playlist*) const { } + + struct RegionInfo { + boost::shared_ptr region; + framepos_t position; + framecnt_t length; + framepos_t start; + }; + + /* this is called before we create a new compound region */ + virtual void pre_combine (std::vector >&) {} + /* this is called before we create a new compound region */ + virtual void post_combine (std::vector >&, boost::shared_ptr) {} + /* this is called before we remove a compound region and replace it + with its constituent regions + */ + virtual void pre_uncombine (std::vector >&, boost::shared_ptr) {} }; } /* namespace ARDOUR */