/*
- 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
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>
-#include <pbd/error.h>
+#include "pbd/failed_constructor.h"
+#include "pbd/error.h"
-#include <ardour/session.h>
-#include <ardour/utils.h>
-#include <ardour/playlist.h>
-#include <ardour/named_selection.h>
+#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<void,NamedSelection*> NamedSelection::NamedSelectionCreated;
+PBD::Signal1<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);
}
NamedSelection::NamedSelection (Session& session, const XMLNode& node)
}
name = property->value();
-
+
if ((lists_node = find_named_node (node, "Playlists")) == 0) {
return;
}
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();
+ 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;
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) {
+ /* 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;
}
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());
child->add_child_nocopy (*plnode);
}
-
+
return *root;
}