X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fnamed_selection.cc;h=fbb4b748df5176ed71e7d9c93d6c149e8ca5dcf2;hb=8ab17e96312f1a61c014c50687e15430d5ae786b;hp=44e169edff2c69d9c8f0ac1bb9d3d146ff17a697;hpb=8af0757b61990767f2a85e68f535a5af9976fd79;p=ardour.git diff --git a/libs/ardour/named_selection.cc b/libs/ardour/named_selection.cc index 44e169edff..fbb4b748df 100644 --- a/libs/ardour/named_selection.cc +++ b/libs/ardour/named_selection.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -29,16 +28,29 @@ #include "i18n.h" using namespace ARDOUR; +using namespace PBD; sigc::signal NamedSelection::NamedSelectionCreated; -NamedSelection::NamedSelection (string n, list& l) +typedef std::list > PlaylistList; + +NamedSelection::NamedSelection (string n, PlaylistList& l) : name (n) { playlists = l; - for (list::iterator i = playlists.begin(); i != playlists.end(); ++i) { - (*i)->ref(); + for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) { + string new_name; + + /* rename playlists to reflect our ownership */ + + new_name = name; + new_name += '/'; + new_name += (*i)->name(); + + (*i)->set_name (new_name); + (*i)->use(); } + NamedSelectionCreated (this); } @@ -64,19 +76,19 @@ NamedSelection::NamedSelection (Session& session, const XMLNode& node) const XMLNode* plnode; string playlist_name; - Playlist* playlist; + boost::shared_ptr playlist; plnode = *niter; if ((property = plnode->property ("name")) != 0) { if ((playlist = session.playlist_by_name (property->value())) != 0) { - playlist->ref(); + playlist->use(); playlists.push_back (playlist); } else { - warning << compose (_("Chunk %1 uses an unknown playlist \"%2\""), name, property->value()) << endmsg; + warning << string_compose (_("Chunk %1 uses an unknown playlist \"%2\""), name, property->value()) << endmsg; } } else { - error << compose (_("Chunk %1 contains misformed playlist information"), name) << endmsg; + error << string_compose (_("Chunk %1 contains misformed playlist information"), name) << endmsg; throw failed_constructor(); } } @@ -86,8 +98,9 @@ NamedSelection::NamedSelection (Session& session, const XMLNode& node) NamedSelection::~NamedSelection () { - for (list::iterator i = playlists.begin(); i != playlists.end(); ++i) { - (*i)->unref(); + for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) { + (*i)->release (); + (*i)->GoingAway (); } } @@ -106,7 +119,7 @@ NamedSelection::get_state () root->add_property ("name", name); child = root->add_child ("Playlists"); - for (list::iterator i = playlists.begin(); i != playlists.end(); ++i) { + for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) { XMLNode* plnode = new XMLNode ("Playlist"); plnode->add_property ("name", (*i)->name());