25 #include <boost/lexical_cast.hpp>
31 #include "ardour/debug.h"
58 cerr <<
">>>>" <<
name << endl; playlist->dump(); cerr <<
"<<<<" <<
name << endl << endl;
74 RegionListProperty::RegionListProperty (
Playlist& pl)
83 , _playlist (p._playlist)
133 first_set_state =
false;
158 , _type(other->_type)
159 , _orig_track_id (other->_orig_track_id)
190 , _type(other->_type)
191 , _orig_track_id (other->_orig_track_id)
213 overlap = region->
coverage (start, end);
220 offset = start - region->
position();
232 offset = start - region->
position();
234 len = region->
length() - offset;
354 size_t dot_position =
_name.
val().find_last_of(
".");
356 if (dot_position == string::npos) {
359 string t =
_name.
val().substr(dot_position + 1);
362 _sort_id = boost::lexical_cast<
int>(t);
365 catch (boost::bad_lexical_cast e) {
493 list< Evoral::RangeMove<framepos_t> > m;
516 list<Evoral::Range<framepos_t> > r;
538 list<Evoral::Range<framepos_t> > r;
568 set<boost::shared_ptr<Region> >::iterator s;
569 bool regions_changed =
false;
578 regions_changed =
true;
594 list<Evoral::Range<framepos_t> > crossfade_ranges;
597 crossfade_ranges.push_back ((*r)->last_range ());
598 crossfade_ranges.push_back ((*r)->range ());
602 crossfade_ranges.push_back ((*s)->range ());
608 crossfade_ranges.push_back ((*s)->range ());
625 (*s)->clear_changes ();
671 times = fabs (times);
673 int itimes = (int) floor (times);
677 if (times == 1 && auto_partition){
693 for (
int i = 0; i < itimes; ++i) {
702 if (floor (times) != times) {
728 RegionList::iterator i;
732 (*i)->set_playlist (pl);
798 RegionList::iterator i;
833 if (
Config->get_use_overlap_equivalency()) {
835 if ((*i)->overlap_equivalent (other)) {
836 results.push_back (*i);
841 if ((*i)->equivalent (other)) {
842 results.push_back (*i);
853 if ((*i) && (*i)->region_list_equivalent (other)) {
854 results.push_back (*i);
864 if ((*i) && (*i)->any_source_equivalent (other)) {
865 results.push_back (*i);
877 for (RegionList::iterator i = thawlist.begin(); i != thawlist.end(); ++i) {
878 (*i)->resume_property_changes ();
898 RegionList::iterator tmp;
910 for (RegionList::iterator i = copy.begin(); i != copy.end(); i = tmp) {
978 new_regions.push_back (region);
998 new_regions.push_back (region);
1003 thawlist.push_back (current);
1037 new_regions.push_back (region);
1043 thawlist.push_back (current);
1081 new_regions.push_back (region);
1087 thawlist.push_back (current);
1111 new_regions.push_back (current);
1130 if (ranges.empty()) {
1134 start = ranges.front().start;
1136 for (list<AudioRange>::iterator i = ranges.begin(); i != ranges.end(); ++i) {
1138 pl = (this->*pmf)((*i).start, (*i).length(), result_is_hidden);
1140 if (i == ranges.begin()) {
1149 ret->
paste (pl, (*i).start - start, 1.0f);
1160 return cut_copy (pmf, ranges, result_is_hidden);
1167 return cut_copy (pmf, ranges, result_is_hidden);
1177 snprintf (buf,
sizeof (buf),
"%" PRIu32, ++
subcnt);
1178 string new_name =
_name;
1188 for (RegionList::iterator i = thawlist.begin(); i != thawlist.end(); ++i) {
1189 (*i)->resume_property_changes();
1200 snprintf (buf,
sizeof (buf),
"%" PRIu32, ++
subcnt);
1201 string new_name =
_name;
1213 times = fabs (times);
1218 int itimes = (int) floor (times);
1248 times = fabs (times);
1251 int itimes = (int) floor (times);
1261 if (floor (times) != times) {
1287 for (RegionList::iterator r =
copy.begin(); r !=
copy.end(); ++r) {
1289 if ((*r)->last_frame() < at) {
1294 if (at > (*r)->first_frame() && at < (*r)->last_frame()) {
1296 if (!move_intersected) {
1305 if (!ignore_music_glue && (*r)->position_lock_style() !=
AudioTime) {
1306 fixup.push_back (*r);
1310 (*r)->set_position ((*r)->position() + distance);
1314 for (RegionList::iterator r = fixup.begin(); r != fixup.end(); ++r) {
1315 (*r)->recompute_position_from_lock_style ();
1328 for (RegionList::iterator r =
copy.begin(); r !=
copy.end(); ++r) {
1343 if (!region->
covers (playlist_position)) {
1347 if (region->
position() == playlist_position ||
1364 before = playlist_position - region->
position();
1365 after = region->
length() - before;
1457 if (exclude && (*i) == exclude) {
1461 if ((*i)->position() >= at) {
1462 framepos_t new_pos = (*i)->position() + distance;
1469 (*i)->set_position (new_pos);
1496 if (distance == 0) {
1502 for (RegionList::iterator i = copy.
begin(); i != copy.
end(); ++i) {
1503 assert (i != copy.
end());
1506 if (std::find(exclude->begin(), exclude->end(), (*i)) != exclude->end()) {
1511 if ((*i)->position() >= at) {
1512 framepos_t new_pos = (*i)->position() + distance;
1516 }
else if (new_pos >= limit ) {
1520 (*i)->set_position (new_pos);
1579 list<Evoral::Range<framepos_t> > xf;
1624 if (what_changed.
contains (bounds)) {
1641 if (what_changed.
contains (our_interests)) {
1718 if ((*i)->covers (frame)) {
1734 if (rlist->size()) {
1737 region = rlist->back();
1750 for (RegionList::iterator i = rlist->begin(); i != rlist->end(); ) {
1752 RegionList::iterator tmp = i;
1755 if ((*i)->muted()) {
1764 if (rlist->size()) {
1767 region = rlist->back();
1781 if ((*i)->covers (frame)) {
1782 rlist->push_back (*i);
1796 if ((*i)->first_frame() >= range.
from && (*i)->first_frame() <= range.
to) {
1797 rlist->push_back (*i);
1811 if ((*i)->last_frame() >= range.
from && (*i)->last_frame() <= range.
to) {
1812 rlist->push_back (*i);
1837 rlist->push_back (*i);
1853 if ((*i)->last_frame() < from) {
1857 if ((*i)->first_frame() > from) {
1862 (*i)->get_transients (these_points);
1866 these_points.push_back ((*i)->first_frame());
1868 points.insert (points.end(), these_points.begin(), these_points.end());
1869 these_points.clear ();
1872 if (points.empty()) {
1877 bool reached =
false;
1880 for (AnalysisFeatureList::iterator x = points.begin(); x != points.end(); ++x) {
1885 if (reached && (*x) > from) {
1890 for (AnalysisFeatureList::reverse_iterator x = points.rbegin(); x != points.rend(); ++x) {
1895 if (reached && (*x) < from) {
1911 bool end_iter =
false;
1937 if ((distance = pos - frame) < closest) {
1949 if ((distance = frame - pos) < closest) {
1983 if (distance < closest) {
1993 if (distance < closest) {
2011 if (distance < closest) {
2021 if (distance < closest) {
2064 name(), change.added.size(), change.removed.size()));
2068 for (RegionListProperty::ChangeContainer::const_iterator i = change.added.begin(); i != change.added.end(); ++i) {
2072 for (RegionListProperty::ChangeContainer::const_iterator i = change.removed.begin(); i != change.removed.end(); ++i) {
2090 bool seen_region_nodes =
false;
2095 if (node.
name() !=
"Playlist") {
2106 for (piter = plist.begin(); piter != plist.end(); ++piter) {
2110 if (prop->
name() ==
X_(
"name")) {
2113 }
else if (prop->
name() ==
X_(
"orig-diskstream-id")) {
2116 }
else if (prop->
name() ==
X_(
"orig-track-id")) {
2118 }
else if (prop->
name() ==
X_(
"frozen")) {
2120 }
else if (prop->
name() ==
X_(
"combine-ops")) {
2129 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
2133 if (child->
name() ==
"Region") {
2135 seen_region_nodes =
true;
2137 if ((prop = child->
property (
"id")) == 0) {
2138 error <<
_(
"region state node has no ID, ignored") <<
endmsg;
2148 if (region->
set_state (*child, version)) {
2156 error <<
_(
"Playlist: cannot create region from XML") <<
endmsg;
2186 return state (
true);
2192 return state (
false);
2253 pair<framepos_t, framepos_t>
2260 pair<framepos_t, framepos_t>
2263 pair<framepos_t, framepos_t> l =
get_extent();
2268 pair<framepos_t, framepos_t>
2279 pair<framepos_t, framepos_t>
const e ((*i)->position(), (*i)->position() + (*i)->length());
2280 if (e.first < ext.first) {
2281 ext.first = e.first;
2283 if (e.second > ext.second) {
2284 ext.second = e.second;
2294 string newname =
name;
2298 }
while (session.
playlists->by_name (newname)!=NULL);
2311 top = max (top, (*i)->layer());
2341 copy.remove (region);
2345 RegionList::iterator i = copy.begin();
2346 while (i != copy.end ()) {
2347 if ((*i)->layer() > new_layer) {
2353 copy.insert (i, region);
2363 for (RegionList::const_iterator k = regions.begin(); k != regions.end(); ++k) {
2364 (*k)->set_layering_index (j++);
2392 int const divisions = 512;
2398 start = min (start, (*i)->position());
2399 end = max (end, (*i)->position() + (*i)->length());
2403 double const division_size = (end -
start) /
double (divisions);
2405 vector<vector<RegionList> > layers;
2406 layers.push_back (vector<RegionList> (divisions));
2410 switch (
Config->get_layer_model()) {
2420 for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {
2424 for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {
2430 int start_division = 0;
2431 int end_division = 0;
2433 if (division_size > 0) {
2434 start_division = floor ( ((*i)->position() -
start) / division_size);
2435 end_division = floor ( ((*i)->position() + (*i)->length() -
start) / division_size );
2436 if (end_division == divisions) {
2441 assert (divisions == 0 || end_division < divisions);
2444 size_t j = layers.size();
2450 bool overlap =
false;
2451 for (
int k = start_division; k <= end_division; ++k) {
2452 RegionList::iterator l = layers[j-1][k].begin ();
2453 while (l != layers[j-1][k].end()) {
2454 if ((*l)->overlap_equivalent (*i)) {
2474 if (j == layers.size()) {
2476 layers.push_back (vector<RegionList> (divisions));
2480 for (
int k = start_division; k <= end_division; ++k) {
2481 layers[j][k].push_back (*i);
2484 (*i)->set_layer (j);
2533 RegionList::iterator i;
2543 if ((*i)->position() >=
start) {
2552 new_pos = (*i)->position() + distance;
2557 if ((*i)->position() > distance) {
2558 new_pos = (*i)->position() - distance;
2564 (*i)->set_position (new_pos);
2583 if ((*r)->uses_source (src)) {
2599 if ((*i)->id() ==
id) {
2620 for (RegionFactory::CompoundAssociations::iterator it = cassocs.begin(); it != cassocs.end(); ++it) {
2622 if (it->second == r) {
2632 for (SourceList::const_iterator s = sl.begin(); s != sl.end(); ++s) {
2635 if (ps->
playlist()->region_use_count(it->first)) {
2651 if ((*i)->id() ==
id) {
2663 cerr <<
"Playlist \"" <<
_name <<
"\" " << endl
2669 cerr <<
" " << r->
name() <<
" ["
2702 RegionList::iterator next;
2705 if ((*i) == region) {
2711 if ((*next)->locked()) {
2717 if ((*next)->position() != region->
last_frame() + 1) {
2721 new_pos = (*next)->position();
2728 new_pos = region->
position() + (*next)->length();
2731 (*next)->set_position (region->
position());
2750 if ((*i) == region) {
2754 if ((*prev)->locked()) {
2759 if (region->
position() != (*prev)->last_frame() + 1) {
2769 new_pos = (*prev)->position() + region->
length();
2773 (*prev)->set_position (new_pos);
2825 for (RegionList::iterator i =
copy.begin(); i !=
copy.end(); ++i) {
2826 (*i)->update_after_tempo_map_change ();
2847 while (i !=
regions.
end() && !(*i)->covers (p)) {
2862 RegionList::iterator j = i;
2865 if ((*i)->uses_source (s)) {
2888 for (RegionList::const_iterator i = copy.begin(); i != copy.end(); ++i) {
2889 if ((*i)->position() >= t && (*i)->layer() == top) {
2890 return (*i)->position();
2901 uint32_t channels = 0;
2904 vector<TwoRegions> old_and_new_regions;
2905 vector<boost::shared_ptr<Region> > originals;
2906 vector<boost::shared_ptr<Region> > copies;
2909 uint32_t max_level = 0;
2913 for (RegionList::const_iterator i = r.begin(); i != r.end(); ++i) {
2914 max_level = max (max_level, (*i)->max_source_level());
2922 for (RegionList::const_iterator i = r.begin(); i != r.end(); ++i) {
2923 earliest_position = min (earliest_position, (*i)->position());
2939 for (RegionList::const_iterator i = sorted.begin(); i != sorted.end(); ++i) {
2946 old_and_new_regions.push_back (
TwoRegions (original_region,copied_region));
2947 originals.push_back (original_region);
2948 copies.push_back (copied_region);
2959 channels = max (channels, original_region->
n_channels());
2963 layer = max (layer, original_region->
layer());
2973 pair<framepos_t,framepos_t> extent = pl->
get_extent();
2975 for (uint32_t chn = 0; chn < channels; ++chn) {
3006 for (RegionList::const_iterator i = r.begin(); i != r.end(); ++i) {
3018 add_region (compound_region, earliest_position);
3024 return compound_region;
3032 vector<boost::shared_ptr<Region> > originals;
3033 vector<TwoRegions> old_and_new_regions;
3037 if ((pls = boost::dynamic_pointer_cast<PlaylistSource>(target->
source (0))) == 0) {
3071 bool same_playlist = (pls->
original() ==
id());
3073 for (RegionList::const_iterator i = rl.begin(); i != rl.end(); ++i) {
3077 RegionFactory::CompoundAssociations::iterator ca = cassocs.find (*i);
3079 if (ca == cassocs.end()) {
3085 bool modified_region;
3087 if (i == rl.begin()) {
3090 adjusted_end = adjusted_start + target->
length();
3093 if (!same_playlist) {
3109 modified_region =
false;
3111 switch (original->
coverage (adjusted_start, adjusted_end)) {
3122 original->
trim_to (adjusted_start, adjusted_end - adjusted_start);
3123 modified_region =
true;
3137 modified_region =
true;
3145 modified_region =
true;
3153 modified_region =
true;
3156 if (modified_region) {
3164 originals.push_back (original);
3165 old_and_new_regions.push_back (
TwoRegions (*i, original));
3194 for (list<AudioRange>::iterator r = ranges.begin(); r != ranges.end(); ++r) {
3196 (*i)->fade_range ((*r).start, (*r).end);
3208 lvl = max (lvl, (*i)->max_source_level());
3242 i->from = min (i->from, j->from);
3243 i->to = max (i->to, j->to);
RegionListProperty(Playlist &)
XMLPropertyList::const_iterator XMLPropertyConstIterator
virtual void resume_property_changes()
virtual void set_playlist(boost::weak_ptr< ARDOUR::Playlist >)
virtual void pre_uncombine(std::vector< boost::shared_ptr< Region > > &, boost::shared_ptr< Region >)
bool _capture_insertion_underway
void setup_layering_indices(RegionList const &)
LIBARDOUR_API uint64_t Layering
ARDOUR::Session & _session
void ripple(framepos_t at, framecnt_t distance, RegionList *exclude)
void notify_region_added(boost::shared_ptr< Region >)
static int region_name(std::string &, std::string, bool new_level=false)
int atoi(const string &s)
const XMLPropertyList & properties() const
boost::shared_ptr< Region > region_by_id(const PBD::ID &) const
virtual void flush_notifications(bool from_undo=false)
void trim_front(framepos_t new_position)
static void cleanup_transients(AnalysisFeatureList &, float sr, float gap_msecs)
ShowMeTheList(boost::shared_ptr< Playlist > pl, const string &n)
virtual bool region_changed(const PBD::PropertyChange &, boost::shared_ptr< Region >)
void core_splice(framepos_t at, framecnt_t distance, boost::shared_ptr< Region > exclude)
const std::string & value() const
PBD::Signal1< void, const PropertyChange & > PropertyChanged
boost::shared_ptr< RegionList > regions_with_end_within(Evoral::Range< framepos_t >)
boost::shared_ptr< RegionList > regions_touched(framepos_t start, framepos_t end)
Evoral::Range< framepos_t > last_range() const
LIBARDOUR_API PBD::PropertyDescriptor< layer_t > layer
void cut_end(framepos_t new_position)
LIBARDOUR_API uint64_t Destruction
void fade_range(std::list< AudioRange > &)
void mark_session_dirty()
Container::reverse_iterator rend()
Container::iterator begin()
std::map< boost::shared_ptr< Region >, boost::shared_ptr< Region > > CompoundAssociations
const char * to_string() const
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
LIBARDOUR_API PBD::PropertyDescriptor< std::string > name
const PBD::ID & original() const
const std::string & name() const
bool covers(framepos_t frame) const
void set_layer(boost::shared_ptr< Region >, double)
void raise_region(boost::shared_ptr< Region >)
virtual XMLNode & state(bool)
const std::string & name() const
bool uses_source(boost::shared_ptr< const Source > src) const
bool pending_contents_change
void add_command(Command *const cmd)
virtual void clear(bool with_signals=true)
std::list< XMLProperty * > XMLPropertyList
void add_property(PropertyBase &s)
void remove_region(boost::shared_ptr< Region >)
const SourceList & sources() const
void set_orig_track_id(const PBD::ID &did)
boost::shared_ptr< RegionList > regions_with_start_within(Evoral::Range< framepos_t >)
void get_region_list_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
static void add_compound_association(boost::shared_ptr< Region >, boost::shared_ptr< Region >)
friend class RegionReadLock
virtual void dump() const
XMLNode * add_child_copy(const XMLNode &)
T to
end of the range (inclusive: to lies inside the range)
void notify_region_start_trimmed(boost::shared_ptr< Region >)
PBD::Signal0< void > ContentsChanged
LIBPBD_API Transmitter error
void clear_owned_changes()
void set_edit_mode(EditMode)
const XMLNodeList & children(const std::string &str=std::string()) const
std::ostream & endmsg(std::ostream &ostr)
void copy_regions(RegionList &) const
void uncombine(boost::shared_ptr< Region >)
void region_changed_proxy(const PBD::PropertyChange &, boost::weak_ptr< Region >)
virtual void rdiff(std::vector< Command * > &) const
boost::shared_ptr< Source > source(uint32_t n=0) const
bool holding_state() const
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
static boost::shared_ptr< Source > createFromPlaylist(DataType type, Session &s, boost::shared_ptr< Playlist > p, const PBD::ID &orig, const std::string &name, uint32_t chn, frameoffset_t start, framecnt_t len, bool copy, bool defer_peaks)
framecnt_t frame_rate() const
virtual void pre_combine(std::vector< boost::shared_ptr< Region > > &)
void partition_internal(framepos_t start, framepos_t end, bool cutting, RegionList &thawlist)
void release_notifications(bool from_undo=false)
void thaw(bool from_undo=false)
framepos_t sync_position() const
boost::shared_ptr< Region > combine(const RegionList &)
framepos_t last_position() const
Container::iterator insert(typename Container::iterator i, const typename Container::value_type &v)
boost::shared_ptr< Region > top_unmuted_region_at(framepos_t frame)
boost::shared_ptr< Region > get_content_from_xml(XMLNode const &) const
std::list< XMLNode * > XMLNodeList
PBD::Signal0< void > EndUndoRedo
void split(framepos_t at)
std::list< Evoral::RangeMove< framepos_t > > pending_range_moves
void delay_notifications()
bool has_region_at(framepos_t const) const
void ripple_unlocked(framepos_t at, framecnt_t distance, RegionList *exclude)
static void map_add(boost::shared_ptr< Region >)
void possibly_splice_unlocked(framepos_t at, framecnt_t distance, boost::shared_ptr< Region > exclude=boost::shared_ptr< Region >())
void trim_end(framepos_t new_position)
PBD::Signal0< void > BeginUndoRedo
virtual int set_state(const XMLNode &, int version)
bool region_is_shuffle_constrained(boost::shared_ptr< Region >)
void add_region(boost::shared_ptr< Region >, framepos_t position, float times=1, bool auto_partition=false)
void notify_region_moved(boost::shared_ptr< Region >)
RegionListProperty * clone() const
const DataType & data_type() const
std::pair< framepos_t, framepos_t > get_extent_with_endspace() const
LIBARDOUR_API PBD::PropertyDescriptor< bool > automatic
uint32_t combine_ops() const
boost::shared_ptr< const Playlist > playlist() const
void set_layer(layer_t l)
PBD::Signal0< void > LayeringChanged
XMLProperty * property(const char *)
void update_after_tempo_map_change()
void partition(framepos_t start, framepos_t end, bool cut=false)
LIBARDOUR_API RCConfiguration * Config
void set_position(framepos_t)
boost::shared_ptr< Region > find_next_region(framepos_t frame, RegionPoint point, int dir)
void coalesce_and_check_crossfades(std::list< Evoral::Range< framepos_t > >)
std::pair< boost::shared_ptr< Region >, boost::shared_ptr< Region > > TwoRegions
std::list< framepos_t > AnalysisFeatureList
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)
boost::shared_ptr< Region > top_region_at(framepos_t frame)
std::set< boost::shared_ptr< Region > > all_regions
Container::iterator end()
bool string_is_affirmative(const std::string &str)
void shuffle(boost::shared_ptr< Region >, int dir)
boost::shared_ptr< RegionList > regions_at(framepos_t frame)
framepos_t find_next_region_boundary(framepos_t frame, int dir)
void update(const RegionListProperty::ChangeRecord &)
void lower_region(boost::shared_ptr< Region >)
RegionList pending_bounds
bool set_name(const std::string &str)
PBD::Signal1< void, boost::weak_ptr< Region > > RegionRemoved
static std::string bump_name(std::string old_name, Session &)
Container::iterator erase(typename Container::iterator i)
gint ignore_state_changes
void notify_region_removed(boost::shared_ptr< Region >)
boost::shared_ptr< Region > find_region(const PBD::ID &) const
const PBD::ID & id() const
void notify_layering_changed()
void splice_locked(framepos_t at, framecnt_t distance, boost::shared_ptr< Region > exclude)
virtual bool set_name(const std::string &str)
void print(char *buf, uint32_t bufsize) const
PBD::Signal2< void, std::list< Evoral::RangeMove< framepos_t > > const &, bool > RangesMoved
bool set_id(const XMLNode &)
void lower_region_to_bottom(boost::shared_ptr< Region >)
boost::shared_ptr< Playlist > cut_copy(boost::shared_ptr< Playlist >(Playlist::*pmf)(framepos_t, framecnt_t, bool), std::list< AudioRange > &ranges, bool result_is_hidden)
Evoral::OverlapType coverage(framepos_t start, framepos_t end) const
static CompoundAssociations & compound_associations()
LIBARDOUR_API PBD::PropertyDescriptor< bool > opaque
void remove_region_by_source(boost::shared_ptr< Source >)
void notify_region_end_trimmed(boost::shared_ptr< Region >)
std::set< boost::shared_ptr< Region > > pending_removes
void splice_unlocked(framepos_t at, framecnt_t distance, boost::shared_ptr< Region > exclude)
#define DEBUG_TRACE(bits, str)
LIBARDOUR_API void make_property_quarks()
void duplicate(boost::shared_ptr< Region >, framepos_t position, float times)
void foreach_region(boost::function< void(boost::shared_ptr< Region >)>)
LIBARDOUR_API PBD::PropertyDescriptor< bool > right_of_split
RegionListProperty regions
PBD::Property< std::string > _name
uint32_t max_source_level() const
static std::string compound_region_name(const std::string &playlist, uint32_t compound_ops, uint32_t depth, bool whole_source)
LIBARDOUR_API PBD::PropertyDescriptor< bool > regions
PBD::Signal1< void, std::list< Evoral::Range< framepos_t > > const & > RegionsExtended
void ripple_locked(framepos_t at, framecnt_t distance, RegionList *exclude)
void get_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
std::list< boost::shared_ptr< Region > > RegionList
framepos_t position() const
LIBPBD_API uint64_t Properties
Container::reverse_iterator rbegin()
LIBARDOUR_API std::string bump_name_once(const std::string &s, char delimiter)
virtual int set_state(const XMLNode &, int version)
XMLProperty * add_property(const char *name, const std::string &value)
void trim_to(framepos_t position, framecnt_t length)
uint32_t n_regions() const
void raise_region_to_top(boost::shared_ptr< Region >)
void set_capture_insertion_in_progress(bool yn)
LIBARDOUR_API PBD::PropertyDescriptor< uint64_t > layering_index
Container::size_type size() const
PBD::Signal1< void, boost::weak_ptr< Region > > RegionAdded
void get_content_as_xml(boost::shared_ptr< Region >, XMLNode &) const
void add_child_nocopy(XMLNode &)
void notify_contents_changed()
boost::shared_ptr< Playlist > copy(std::list< AudioRange > &, bool result_is_hidden=true)
uint32_t n_channels() const
RegionListProperty * create() const
const RegionListProperty & region_list() const
virtual void post_combine(std::vector< boost::shared_ptr< Region > > &, boost::shared_ptr< Region >)
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > position
void nudge_after(framepos_t start, framecnt_t distance, bool forwards)
uint64_t layering_index() const
void rdiff(std::vector< Command * > &) const
framecnt_t last_length() const
virtual void clear_owned_changes()
OverlapType coverage(T sa, T ea, T sb, T eb)
std::set< boost::shared_ptr< Region > > pending_adds
std::string _xml_node_name
name of node to use for this object in XML
void split_region(boost::shared_ptr< Region >, framepos_t position)
PBD::Signal1< void, bool > InUse
framepos_t find_next_top_layer_position(framepos_t) const
int remove_region_internal(boost::shared_ptr< Region >)
void get_source_equivalent_regions(boost::shared_ptr< Region >, std::vector< boost::shared_ptr< Region > > &)
boost::shared_ptr< RegionList > regions_touched_locked(framepos_t start, framepos_t end)
Playlist(Session &, const XMLNode &, DataType type, bool hidden=false)
void sync_all_regions_with_regions()
boost::shared_ptr< SessionPlaylists > playlists
virtual void remove_dependents(boost::shared_ptr< Region >)
bool add_region_internal(boost::shared_ptr< Region >, framepos_t position)
bool contains(PropertyDescriptor< T > p) const
framecnt_t length() const
Evoral::Range< framepos_t > range() const
static const framepos_t max_framepos
framepos_t first_frame() const
PBD::ScopedConnectionList region_state_changed_connections
void possibly_splice(framepos_t at, framecnt_t distance, boost::shared_ptr< Region > exclude=boost::shared_ptr< Region >())
layer_t top_layer() const
void region_bounds_changed(const PBD::PropertyChange &, boost::shared_ptr< Region >)
bool all_regions_empty() const
std::list< Evoral::Range< framepos_t > > pending_region_extensions
uint32_t region_use_count(boost::shared_ptr< Region >) const
void core_ripple(framepos_t at, framecnt_t distance, RegionList *exclude)
static boost::shared_ptr< Region > region_by_id(const PBD::ID &)
boost::shared_ptr< RegionList > find_regions_at(framepos_t)
uint32_t max_source_level() const
static boost::shared_ptr< Region > create(boost::shared_ptr< const Region > other, bool announce=false)
void set_region_ownership()
XMLNodeList::const_iterator XMLNodeConstIterator
boost::shared_ptr< Playlist > cut(std::list< AudioRange > &, bool result_is_hidden=true)
static boost::shared_ptr< Playlist > create(Session &, const XMLNode &, bool hidden=false, bool unused=false)
void shift(framepos_t at, frameoffset_t distance, bool move_intersected, bool ignore_music_glue)
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
LIBARDOUR_API PBD::PropertyDescriptor< bool > muted
std::vector< boost::shared_ptr< Source > > SourceList
std::pair< framepos_t, framepos_t > _get_extent() const
bool add(PropertyBase *prop)
LIBARDOUR_API PBD::PropertyDescriptor< bool > whole_file
std::string string_compose(const std::string &fmt, const T1 &o1)
int paste(boost::shared_ptr< Playlist >, framepos_t position, float times)
uint32_t count_regions_at(framepos_t) const
LIBARDOUR_API PBD::PropertyDescriptor< bool > left_of_split
framepos_t find_next_transient(framepos_t position, int dir)
std::pair< framepos_t, framepos_t > get_extent() const
void suspend_property_changes()
framepos_t last_frame() const
LIBARDOUR_API PBD::PropertyDescriptor< framecnt_t > length