#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;
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; }
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>);
+ void fade_range (std::list<AudioRange>&);
void shuffle (boost::shared_ptr<Region>, int dir);
+ void ripple (framepos_t at, framecnt_t distance, RegionList *exclude);
+ void ripple (framepos_t at, framecnt_t distance, boost::shared_ptr<Region> exclude) {
+ RegionList el;
+ if (exclude)
+ el.push_back (exclude);
+ ripple (at, distance, &el);
+ }
+
void update_after_tempo_map_change ();
boost::shared_ptr<Playlist> cut (std::list<AudioRange>&, bool result_is_hidden = true);
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) {
bool first_set_state;
bool _hidden;
bool _splicing;
+ bool _rippling;
bool _shuffling;
bool _nudging;
uint32_t _refcnt;
void splice_locked (framepos_t at, framecnt_t distance, boost::shared_ptr<Region> exclude);
void splice_unlocked (framepos_t at, framecnt_t distance, boost::shared_ptr<Region> 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> /*region*/) {}
virtual XMLNode& state (bool);
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 */