diff options
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/session_playlists.h | 4 | ||||
-rw-r--r-- | libs/ardour/session_playlists.cc | 21 |
2 files changed, 23 insertions, 2 deletions
diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h index 96321f2f9c..5f69ba8001 100644 --- a/libs/ardour/ardour/session_playlists.h +++ b/libs/ardour/ardour/session_playlists.h @@ -42,6 +42,7 @@ class Region; class Source; class Session; class Crossfade; +class Track; class SessionPlaylists : public PBD::ScopedConnectionList { @@ -53,11 +54,12 @@ public: uint32_t source_use_count (boost::shared_ptr<const Source> src) const; uint32_t region_use_count (boost::shared_ptr<Region> region) const; template<class T> void foreach (T *obj, void (T::*func)(boost::shared_ptr<Playlist>)); - void get (std::vector<boost::shared_ptr<Playlist> >&); + void get (std::vector<boost::shared_ptr<Playlist> >&) const; void unassigned (std::list<boost::shared_ptr<Playlist> > & list); void destroy_region (boost::shared_ptr<Region>); boost::shared_ptr<Crossfade> find_crossfade (const PBD::ID &); void sync_all_regions_with_regions (); + std::vector<boost::shared_ptr<Playlist> > playlists_for_track (boost::shared_ptr<Track>) const; private: friend class Session; diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index a5772c23e3..1e31801271 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -27,6 +27,7 @@ #include "ardour/playlist_factory.h" #include "ardour/session.h" #include "ardour/source.h" +#include "ardour/track.h" #include "i18n.h" using namespace std; @@ -219,7 +220,7 @@ SessionPlaylists::unassigned (std::list<boost::shared_ptr<Playlist> > & list) } void -SessionPlaylists::get (vector<boost::shared_ptr<Playlist> >& s) +SessionPlaylists::get (vector<boost::shared_ptr<Playlist> >& s) const { Glib::Mutex::Lock lm (lock); @@ -450,3 +451,21 @@ SessionPlaylists::region_use_count (boost::shared_ptr<Region> region) const return cnt; } + +/** @return list of Playlists that are associated with a track */ +vector<boost::shared_ptr<Playlist> > +SessionPlaylists::playlists_for_track (boost::shared_ptr<Track> tr) const +{ + vector<boost::shared_ptr<Playlist> > pl; + get (pl); + + vector<boost::shared_ptr<Playlist> > pl_tr; + + for (vector<boost::shared_ptr<Playlist> >::iterator i = pl.begin(); i != pl.end(); ++i) { + if (((*i)->get_orig_diskstream_id() == tr->diskstream_id()) || (tr->playlist()->id() == (*i)->id())) { + pl_tr.push_back (*i); + } + } + + return pl_tr; +} |