21 #include "ardour/debug.h"
34 SessionPlaylists::~SessionPlaylists ()
38 for (List::iterator i = playlists.begin(); i != playlists.end(); ) {
39 SessionPlaylists::List::iterator tmp;
46 (*i)->drop_references ();
52 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ) {
60 (*i)->drop_references ();
66 unused_playlists.clear ();
74 bool const existing = find (playlists.begin(), playlists.end(), playlist) != playlists.end();
77 playlists.insert (playlists.begin(), playlist);
103 i = find (playlists.begin(), playlists.end(), playlist);
104 if (i != playlists.end()) {
108 i = find (unused_playlists.begin(), unused_playlists.end(), playlist);
109 if (i != unused_playlists.end()) {
110 unused_playlists.erase (i);
136 unused_playlists.insert (pl);
138 if ((x = playlists.find (pl)) != playlists.end()) {
145 playlists.insert (pl);
147 if ((x = unused_playlists.find (pl)) != unused_playlists.end()) {
148 unused_playlists.erase (x);
155 SessionPlaylists::n_playlists ()
const
158 return playlists.size();
162 SessionPlaylists::by_name (
string name)
166 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
167 if ((*i)->name() ==
name) {
172 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
173 if ((*i)->name() ==
name) {
186 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
187 if ((*i)->id() == id) {
192 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
193 if ((*i)->id() == id) {
206 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
207 if (!(*i)->get_orig_track_id().to_s().compare (
"0")) {
212 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
213 if (!(*i)->get_orig_track_id().to_s().compare (
"0")) {
224 for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
228 for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
238 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
239 (*i)->destroy_region (r);
242 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
243 (*i)->destroy_region (r);
251 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i)
252 (*i)->get_region_list_equivalent_regions (region, result);
263 for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) {
264 if ((*p)->uses_source (src)) {
270 for (List::const_iterator p = unused_playlists.begin(); p != unused_playlists.end(); ++p) {
271 if ((*p)->uses_source (src)) {
281 SessionPlaylists::sync_all_regions_with_regions ()
285 for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) {
286 (*p)->sync_all_regions_with_regions ();
291 SessionPlaylists::update_after_tempo_map_change ()
293 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
294 (*i)->update_after_tempo_map_change ();
297 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
298 (*i)->update_after_tempo_map_change ();
303 SessionPlaylists::add_state (
XMLNode* node,
bool full_state)
306 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
307 if (!(*i)->hidden()) {
316 child = node->
add_child (
"UnusedPlaylists");
317 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
318 if (!(*i)->hidden()) {
319 if (!(*i)->empty()) {
334 vector<boost::shared_ptr<Playlist> > playlists_tbd;
336 for (List::iterator x = unused_playlists.begin(); x != unused_playlists.end(); ++x) {
338 int status = ask (*x);
345 playlists_tbd.push_back (*x);
358 (*x)->drop_references ();
361 playlists_tbd.clear ();
375 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
377 if ((playlist = XMLPlaylistFactory (session, **niter)) == 0) {
378 error <<
_(
"Session: cannot create Playlist from XML description.") <<
endmsg;
394 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
396 if ((playlist = XMLPlaylistFactory (session, **niter)) == 0) {
397 error <<
_(
"Session: cannot create Playlist from XML description.") <<
endmsg;
413 return PlaylistFactory::create (session, node);
422 SessionPlaylists::find_crossfade (
const PBD::ID&
id)
428 for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
429 c = (*i)->find_crossfade (
id);
435 for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
436 c = (*i)->find_crossfade (
id);
451 for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
452 cnt += (*i)->region_use_count (region);
455 for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
456 cnt += (*i)->region_use_count (region);
463 vector<boost::shared_ptr<Playlist> >
466 vector<boost::shared_ptr<Playlist> > pl;
469 vector<boost::shared_ptr<Playlist> > pl_tr;
472 if (((*i)->get_orig_track_id() == tr->
id()) || (tr->
playlist()->
id() == (*i)->id())) {
473 pl_tr.push_back (*i);
PBD::Signal0< void > DropReferences
LIBARDOUR_API uint64_t Destruction
LIBPBD_API Transmitter error
const XMLNodeList & children(const std::string &str=std::string()) const
std::ostream & endmsg(std::ostream &ostr)
XMLNode * add_child(const char *)
std::list< XMLNode * > XMLNodeList
const PBD::ID & id() const
boost::shared_ptr< Playlist > playlist()
#define DEBUG_TRACE(bits, str)
void add_child_nocopy(XMLNode &)
PBD::Signal1< void, bool > InUse
XMLNodeList::const_iterator XMLNodeConstIterator
std::string string_compose(const std::string &fmt, const T1 &o1)