#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"
uint32_t n_regions() const;
bool all_regions_empty() const;
std::pair<framepos_t, framepos_t> get_extent () const;
+ std::pair<framepos_t, framepos_t> get_extent_with_endspace() const;
layer_t top_layer() const;
EditMode get_edit_mode() const { return _edit_mode; }
/* Editing operations */
- void add_region (boost::shared_ptr<Region>, framepos_t position, float times = 1, bool auto_partition = false);
+ void add_region (boost::shared_ptr<Region>, framepos_t position, float times = 1, bool auto_partition = false, const int32_t sub_num = 0);
void remove_region (boost::shared_ptr<Region>);
- void remove_region_by_source (boost::shared_ptr<Source>);
void get_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
void get_region_list_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
void get_source_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
void replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, framepos_t pos);
- void split_region (boost::shared_ptr<Region>, framepos_t position);
- void split (framepos_t at);
+ void split_region (boost::shared_ptr<Region>, 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<Region>, framepos_t position, float times);
+ void duplicate (boost::shared_ptr<Region>, framepos_t position, framecnt_t gap, float times);
+ void duplicate_until (boost::shared_ptr<Region>, framepos_t position, framecnt_t gap, framepos_t end);
+ void duplicate_range (AudioRange&, float times);
+ void duplicate_ranges (std::list<AudioRange>&, float times);
void nudge_after (framepos_t start, framecnt_t distance, bool forwards);
boost::shared_ptr<Region> combine (const RegionList&);
void uncombine (boost::shared_ptr<Region>);
boost::shared_ptr<Playlist> cut (std::list<AudioRange>&, bool result_is_hidden = true);
boost::shared_ptr<Playlist> copy (std::list<AudioRange>&, bool result_is_hidden = true);
- int paste (boost::shared_ptr<Playlist>, framepos_t position, float times);
+ int paste (boost::shared_ptr<Playlist>, 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<RegionList> region_list();
boost::shared_ptr<RegionList> regions_at (framepos_t frame);
uint32_t count_regions_at (framepos_t) const;
bool region_is_shuffle_constrained (boost::shared_ptr<Region>);
bool has_region_at (framepos_t const) const;
- bool uses_source (boost::shared_ptr<const Source> src) const;
+ bool uses_source (boost::shared_ptr<const Source> src, bool shallow = false) const;
+ void deep_sources (std::set<boost::shared_ptr<Source> >&) const;
framepos_t find_next_transient (framepos_t position, int dir);
void set_layer (boost::shared_ptr<Region>, double);
void set_capture_insertion_in_progress (bool yn);
-
+
protected:
friend class Session;
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) {
virtual XMLNode& state (bool);
- bool add_region_internal (boost::shared_ptr<Region>, framepos_t position);
+ bool add_region_internal (boost::shared_ptr<Region>, framepos_t position, const int32_t sub_num = 0);
int remove_region_internal (boost::shared_ptr<Region>);
void copy_regions (RegionList&) const;
void begin_undo ();
void end_undo ();
- void _split_region (boost::shared_ptr<Region>, framepos_t position);
+ void _split_region (boost::shared_ptr<Region>, framepos_t position, const int32_t sub_num);
typedef std::pair<boost::shared_ptr<Region>, boost::shared_ptr<Region> > TwoRegions;
void setup_layering_indices (RegionList const &);
void coalesce_and_check_crossfades (std::list<Evoral::Range<framepos_t> >);
boost::shared_ptr<RegionList> 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 */