X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fnamed_selection.cc;h=4bcc3f3b726da25f3e9b0dd9d43aa17a7488716a;hb=8f46b0dc4bbc54d0b6072376712654f69b36c4fa;hp=605d7cae13109346695f54525363e730bede9bf9;hpb=912da52a539981193941d8739fa6f103b5e406db;p=ardour.git diff --git a/libs/ardour/named_selection.cc b/libs/ardour/named_selection.cc index 605d7cae13..4bcc3f3b72 100644 --- a/libs/ardour/named_selection.cc +++ b/libs/ardour/named_selection.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2003 Paul Davis + Copyright (C) 2003 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,32 +15,43 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ -#include -#include +#include "pbd/failed_constructor.h" +#include "pbd/error.h" -#include -#include -#include -#include +#include "ardour/session.h" +#include "ardour/utils.h" +#include "ardour/playlist.h" +#include "ardour/named_selection.h" +#include "ardour/session_playlists.h" #include "i18n.h" +using namespace std; using namespace ARDOUR; using namespace PBD; -sigc::signal NamedSelection::NamedSelectionCreated; +PBD::Signal1 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); } NamedSelection::NamedSelection (Session& session, const XMLNode& node) @@ -53,7 +64,7 @@ NamedSelection::NamedSelection (Session& session, const XMLNode& node) } name = property->value(); - + if ((lists_node = find_named_node (node, "Playlists")) == 0) { return; } @@ -65,13 +76,13 @@ 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(); + if ((playlist = session.playlists->by_name (property->value())) != 0) { + playlist->use(); playlists.push_back (playlist); } else { warning << string_compose (_("Chunk %1 uses an unknown playlist \"%2\""), name, property->value()) << endmsg; @@ -87,13 +98,15 @@ 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) { + /* XXX who really owns these? us or the session? */ + (*i)->drop_references (); + (*i)->release (); } } int -NamedSelection::set_state (const XMLNode& node) +NamedSelection::set_state (const XMLNode& /*node*/, int /*version*/) { return 0; } @@ -107,12 +120,12 @@ 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()); child->add_child_nocopy (*plnode); } - + return *root; }