X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fplaylist_source.cc;h=07f72331bb8f136798760b0a744d07e7ed3c10ea;hb=6bf40e3a44d8bb6952972fc19f34bb8b07523a33;hp=a1597a76d2335d4d53c83afdc4e103796d4ee439;hpb=99aa8c6338e47b41143f799fdcb35d1699548076;p=ardour.git diff --git a/libs/ardour/playlist_source.cc b/libs/ardour/playlist_source.cc index a1597a76d2..07f72331bb 100644 --- a/libs/ardour/playlist_source.cc +++ b/libs/ardour/playlist_source.cc @@ -33,20 +33,18 @@ #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" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; using namespace PBD; -PlaylistSource::PlaylistSource (Session& s, const std::string& name, boost::shared_ptr p, DataType type, - frameoffset_t begin, framecnt_t len, Source::Flag flags) +PlaylistSource::PlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr p, DataType type, + frameoffset_t begin, framecnt_t len, Source::Flag /*flags*/) : Source (s, type, name) , _playlist (p) + , _original (orig) { /* PlaylistSources are never writable, renameable, removable or destructive */ _flags = Flag (_flags & ~(Writable|CanRename|Removable|RemovableIfEmpty|RemoveAtDestroy|Destructive)); @@ -63,7 +61,7 @@ PlaylistSource::PlaylistSource (Session& s, const XMLNode& node) { /* PlaylistSources are never writable, renameable, removable or destructive */ _flags = Flag (_flags & ~(Writable|CanRename|Removable|RemovableIfEmpty|RemoveAtDestroy|Destructive)); - + if (set_state (node, Stateful::loading_state_version)) { throw failed_constructor (); @@ -85,16 +83,17 @@ PlaylistSource::add_state (XMLNode& node) node.add_property ("offset", buf); snprintf (buf, sizeof (buf), "%" PRIu64, _playlist_length); node.add_property ("length", buf); - + node.add_property ("original", id().to_s()); + node.add_child_nocopy (_playlist->get_state()); } int -PlaylistSource::set_state (const XMLNode& node, int version) +PlaylistSource::set_state (const XMLNode& node, int /*version*/) { /* check that we have a playlist ID */ - const XMLProperty *prop = node.property (X_("playlist")); + XMLProperty const * prop = node.property (X_("playlist")); if (!prop) { error << _("No playlist ID in PlaylistSource XML!") << endmsg; @@ -116,7 +115,7 @@ PlaylistSource::set_state (const XMLNode& node, int version) } if (!_playlist) { - error << _("No playlist node in PlaylistSource XML!") << endmsg; + error << _("Could not construct playlist for PlaylistSource from session data!") << endmsg; throw failed_constructor (); } @@ -125,7 +124,7 @@ PlaylistSource::set_state (const XMLNode& node, int version) if ((prop = node.property (X_("name"))) == 0) { throw failed_constructor (); } - + set_name (prop->value()); if ((prop = node.property (X_("offset"))) == 0) { @@ -139,6 +138,16 @@ PlaylistSource::set_state (const XMLNode& node, int version) sscanf (prop->value().c_str(), "%" PRIu64, &_playlist_length); + /* XXX not quite sure why we set our ID back to the "original" one + here. october 2011, paul + */ + + if ((prop = node.property (X_("original"))) == 0) { + throw failed_constructor (); + } + + set_id (prop->value()); + _level = _playlist->max_source_level () + 1; return 0;