along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id$
*/
#include <pbd/failed_constructor.h>
sigc::signal<void,NamedSelection*> NamedSelection::NamedSelectionCreated;
-NamedSelection::NamedSelection (string n, list<Playlist*>& l)
+typedef std::list<boost::shared_ptr<Playlist> > PlaylistList;
+
+NamedSelection::NamedSelection (string n, PlaylistList& l)
: name (n)
{
playlists = l;
- for (list<Playlist*>::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);
}
const XMLNode* plnode;
string playlist_name;
- Playlist* playlist;
+ boost::shared_ptr<Playlist> 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 << string_compose (_("Chunk %1 uses an unknown playlist \"%2\""), name, property->value()) << endmsg;
NamedSelection::~NamedSelection ()
{
- for (list<Playlist*>::iterator i = playlists.begin(); i != playlists.end(); ++i) {
- (*i)->unref();
+ for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ (*i)->release ();
+ (*i)->GoingAway ();
}
}
root->add_property ("name", name);
child = root->add_child ("Playlists");
- for (list<Playlist*>::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());