summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/session_playlists.h4
-rw-r--r--libs/ardour/session_playlists.cc21
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;
+}