Fix mismatched initialisation order.
[ardour.git] / libs / ardour / session_playlists.cc
index 1e31801271ee8955a8046272fee6e67c4bfb4bf9..b586ab196ebd318d65f09d9951fe86fa815664ac 100644 (file)
 */
 #include <vector>
 
-#include "pbd/xml++.h"
-#include "pbd/compose.h"
 #include "ardour/debug.h"
-#include "ardour/session_playlists.h"
 #include "ardour/playlist.h"
-#include "ardour/region.h"
 #include "ardour/playlist_factory.h"
-#include "ardour/session.h"
-#include "ardour/source.h"
+#include "ardour/session_playlists.h"
 #include "ardour/track.h"
 #include "i18n.h"
+#include "pbd/compose.h"
+#include "pbd/xml++.h"
 
 using namespace std;
 using namespace PBD;
@@ -72,7 +69,7 @@ SessionPlaylists::~SessionPlaylists ()
 bool
 SessionPlaylists::add (boost::shared_ptr<Playlist> playlist)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        bool const existing = find (playlists.begin(), playlists.end(), playlist) != playlists.end();
 
@@ -99,7 +96,7 @@ SessionPlaylists::remove_weak (boost::weak_ptr<Playlist> playlist)
 void
 SessionPlaylists::remove (boost::shared_ptr<Playlist> playlist)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        List::iterator i;
 
@@ -132,7 +129,7 @@ SessionPlaylists::track (bool inuse, boost::weak_ptr<Playlist> wpl)
        }
 
        {
-               Glib::Mutex::Lock lm (lock);
+               Glib::Threads::Mutex::Lock lm (lock);
 
                if (!inuse) {
 
@@ -157,14 +154,14 @@ SessionPlaylists::track (bool inuse, boost::weak_ptr<Playlist> wpl)
 uint32_t
 SessionPlaylists::n_playlists () const
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
        return playlists.size();
 }
 
 boost::shared_ptr<Playlist>
 SessionPlaylists::by_name (string name)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
                if ((*i)->name() == name) {
@@ -184,7 +181,7 @@ SessionPlaylists::by_name (string name)
 boost::shared_ptr<Playlist>
 SessionPlaylists::by_id (const PBD::ID& id)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
                if ((*i)->id() == id) {
@@ -204,16 +201,16 @@ SessionPlaylists::by_id (const PBD::ID& id)
 void
 SessionPlaylists::unassigned (std::list<boost::shared_ptr<Playlist> > & list)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
-               if (!(*i)->get_orig_diskstream_id().to_s().compare ("0")) {
+               if (!(*i)->get_orig_track_id().to_s().compare ("0")) {
                        list.push_back (*i);
                }
        }
 
        for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
-               if (!(*i)->get_orig_diskstream_id().to_s().compare ("0")) {
+               if (!(*i)->get_orig_track_id().to_s().compare ("0")) {
                        list.push_back (*i);
                }
        }
@@ -222,13 +219,13 @@ SessionPlaylists::unassigned (std::list<boost::shared_ptr<Playlist> > & list)
 void
 SessionPlaylists::get (vector<boost::shared_ptr<Playlist> >& s) const
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
-       for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+       for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
                s.push_back (*i);
        }
 
-       for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
+       for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
                s.push_back (*i);
        }
 }
@@ -236,7 +233,7 @@ SessionPlaylists::get (vector<boost::shared_ptr<Playlist> >& s) const
 void
 SessionPlaylists::destroy_region (boost::shared_ptr<Region> r)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
                 (*i)->destroy_region (r);
@@ -255,7 +252,9 @@ SessionPlaylists::find_equivalent_playlist_regions (boost::shared_ptr<Region> re
                (*i)->get_region_list_equivalent_regions (region, result);
 }
 
-/** Return the number of playlists (not regions) that contain @a src */
+/** Return the number of playlists (not regions) that contain @a src
+ *  Important: this counts usage in both used and not-used playlists.
+ */
 uint32_t
 SessionPlaylists::source_use_count (boost::shared_ptr<const Source> src) const
 {
@@ -267,13 +266,21 @@ SessionPlaylists::source_use_count (boost::shared_ptr<const Source> src) const
                         break;
                 }
        }
+
+       for (List::const_iterator p = unused_playlists.begin(); p != unused_playlists.end(); ++p) {
+                if ((*p)->uses_source (src)) {
+                        ++count;
+                        break;
+                }
+       }
+
        return count;
 }
 
 void
 SessionPlaylists::sync_all_regions_with_regions ()
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) {
                 (*p)->sync_all_regions_with_regions ();
@@ -414,7 +421,7 @@ SessionPlaylists::XMLPlaylistFactory (Session& session, const XMLNode& node)
 boost::shared_ptr<Crossfade>
 SessionPlaylists::find_crossfade (const PBD::ID& id)
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
 
        boost::shared_ptr<Crossfade> c;
 
@@ -438,14 +445,14 @@ SessionPlaylists::find_crossfade (const PBD::ID& id)
 uint32_t
 SessionPlaylists::region_use_count (boost::shared_ptr<Region> region) const
 {
-       Glib::Mutex::Lock lm (lock);
+       Glib::Threads::Mutex::Lock lm (lock);
         uint32_t cnt = 0;
 
-       for (List::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+       for (List::const_iterator i = playlists.begin(); i != playlists.end(); ++i) {
                 cnt += (*i)->region_use_count (region);
        }
 
-       for (List::iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
+       for (List::const_iterator i = unused_playlists.begin(); i != unused_playlists.end(); ++i) {
                 cnt += (*i)->region_use_count (region);
        }
 
@@ -462,7 +469,7 @@ SessionPlaylists::playlists_for_track (boost::shared_ptr<Track> tr) const
        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())) {
+               if (((*i)->get_orig_track_id() == tr->id()) || (tr->playlist()->id() == (*i)->id())) {
                        pl_tr.push_back (*i);
                }
        }