summaryrefslogtreecommitdiff
path: root/libs/ardour/playlist_source.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-05-16 20:16:57 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-05-16 20:16:57 +0000
commit99aa8c6338e47b41143f799fdcb35d1699548076 (patch)
treea61140fd331b49a408894f00dcb8976cbb6543b8 /libs/ardour/playlist_source.cc
parent4b848856ebc2856bf7ab10a000cc88bdd3bc4a4a (diff)
rename join regions op as combine regions; save and restore nested playlists, sources, regions; add undo/redo for combine; fixup peakfile use/discovery
git-svn-id: svn://localhost/ardour2/branches/3.0@9528 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/playlist_source.cc')
-rw-r--r--libs/ardour/playlist_source.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/libs/ardour/playlist_source.cc b/libs/ardour/playlist_source.cc
index 7ac175959c..a1597a76d2 100644
--- a/libs/ardour/playlist_source.cc
+++ b/libs/ardour/playlist_source.cc
@@ -32,6 +32,7 @@
#include "ardour/playlist.h"
#include "ardour/playlist_source.h"
+#include "ardour/playlist_factory.h"
#include "ardour/session.h"
#include "ardour/session_playlists.h"
#include "ardour/source_factory.h"
@@ -84,26 +85,38 @@ PlaylistSource::add_state (XMLNode& node)
node.add_property ("offset", buf);
snprintf (buf, sizeof (buf), "%" PRIu64, _playlist_length);
node.add_property ("length", buf);
+
+ node.add_child_nocopy (_playlist->get_state());
}
int
PlaylistSource::set_state (const XMLNode& node, int version)
{
- /* get playlist ID */
+ /* check that we have a playlist ID */
const XMLProperty *prop = node.property (X_("playlist"));
if (!prop) {
+ error << _("No playlist ID in PlaylistSource XML!") << endmsg;
throw failed_constructor ();
}
- PBD::ID id (prop->value());
+ /* create playlist from child node */
+
+ XMLNodeList nlist;
+ XMLNodeConstIterator niter;
- /* get playlist */
+ nlist = node.children();
- boost::shared_ptr<Playlist> p = _session.playlists->by_id (id);
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+ if ((*niter)->name() == "Playlist") {
+ _playlist = PlaylistFactory::create (_session, **niter, true, false);
+ break;
+ }
+ }
if (!_playlist) {
+ error << _("No playlist node in PlaylistSource XML!") << endmsg;
throw failed_constructor ();
}