diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 1d8a4908d3..a95c70ec14 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -110,6 +110,9 @@ public: bool set_name (const std::string& str); void set_region_ownership (); + std::string pgroup_id() { return _pgroup_id; } + void set_pgroup_id(std::string pgid) { _pgroup_id = pgid; } + virtual void clear (bool with_signals = true); virtual void dump () const; @@ -461,6 +464,8 @@ private: samplepos_t _end_space; //this is used when we are pasting a range with extra space at the end bool _playlist_shift_active; + + std::string _pgroup_id; /*when we make multiple playlists in one action, they will share the same pgroup_id */ }; } /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h index cd9c919e31..a9508d5ee7 100644 --- a/libs/ardour/ardour/session_playlists.h +++ b/libs/ardour/ardour/session_playlists.h @@ -50,6 +50,7 @@ class LIBARDOUR_API SessionPlaylists : public PBD::ScopedConnectionList public: ~SessionPlaylists (); + boost::shared_ptr for_pgroup (std::string name, const PBD::ID& for_track); boost::shared_ptr by_name (std::string name); boost::shared_ptr by_id (const PBD::ID&); uint32_t source_use_count (boost::shared_ptr src) const; diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 950206e88b..a91ac9f759 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -2331,6 +2331,8 @@ Playlist::set_state (const XMLNode& node, int version) node.get_property (X_("orig-track-id"), _orig_track_id); node.get_property (X_("frozen"), _frozen); + node.get_property (X_("pgroup-id"), _pgroup_id); + node.get_property (X_("combine-ops"), _combine_ops); string shared_ids; @@ -2421,6 +2423,7 @@ Playlist::state (bool full_state) node->set_property (X_("name"), name ()); node->set_property (X_("type"), _type); node->set_property (X_("orig-track-id"), _orig_track_id); + node->set_property (X_("pgroup-id"), _pgroup_id); string shared_ids; list::const_iterator it = _shared_with_ids.begin (); diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index d8e014a7e1..aee3623c03 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -186,6 +186,30 @@ SessionPlaylists::n_playlists () const return playlists.size(); } +boost::shared_ptr +SessionPlaylists::for_pgroup (string pgroup_id, const PBD::ID& id) +{ + Glib::Threads::Mutex::Lock lm (lock); + + for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) { + if ((*i)->pgroup_id() == pgroup_id) { + if ((*i)->get_orig_track_id() == id) { + return* i; + } + } + } + + for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) { + if ((*i)->pgroup_id() == pgroup_id) { + if ((*i)->get_orig_track_id() == id) { + return* i; + } + } + } + + return boost::shared_ptr(); +} + boost::shared_ptr SessionPlaylists::by_name (string name) {