From dbe00236ff5cfce8f539cf84a6d34b353542dfff Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 3 Mar 2013 08:26:46 +0000 Subject: fix region fade/env XML save - fixes #5353 In rev 12740 FadeIn/Out became stateful properties which are automatically saved when Region:state() calls Stateful::add_properties(). AudioRegion::state() called Region:state() AND Stateful::add_properties() which added a 2nd redundant copy to the XML. Finally AudioRegion::state() adds custom serialization for Fades. Furthermore this custom serialization also used names which did not match the Property name. git-svn-id: svn://localhost/ardour2/branches/3.0@14117 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/audioregion.cc | 10 ++++------ libs/ardour/region.cc | 13 ++++++++++++- libs/ardour/session_state.cc | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 9694e2430b..fe09774bc5 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -764,8 +764,6 @@ AudioRegion::state () snprintf (buf, sizeof (buf), "%u", (uint32_t) _sources.size()); node.add_property ("channels", buf); - Stateful::add_properties (node); - child = node.add_child ("Envelope"); bool default_env = false; @@ -796,7 +794,7 @@ AudioRegion::state () } if (_inverse_fade_in) { - child = node.add_child (X_("InvFadeIn")); + child = node.add_child (X_("InverseFadeIn")); child->add_child_nocopy (_inverse_fade_in->get_state ()); } @@ -809,7 +807,7 @@ AudioRegion::state () } if (_inverse_fade_out) { - child = node.add_child (X_("InvFadeOut")); + child = node.add_child (X_("InverseFadeOut")); child->add_child_nocopy (_inverse_fade_out->get_state ()); } @@ -908,12 +906,12 @@ AudioRegion::_set_state (const XMLNode& node, int version, PropertyChange& what_ } } - } else if (child->name() == "InvFadeIn") { + } else if (child->name() == "InverseFadeIn") { XMLNode* grandchild = child->child ("AutomationList"); if (grandchild) { _inverse_fade_in->set_state (*grandchild, version); } - } else if (child->name() == "InvFadeOut") { + } else if (child->name() == "InverseFadeOut") { XMLNode* grandchild = child->child ("AutomationList"); if (grandchild) { _inverse_fade_out->set_state (*grandchild, version); diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 952e8b5c9c..4ccd3c77b0 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -1126,7 +1126,18 @@ Region::state () LocaleGuard lg (X_("POSIX")); const char* fe = NULL; - add_properties (*node); + /* custom version of 'add_properties (*node);' + * skip values that have have dedicated save functions + * in AudioRegion::state() + */ + for (OwnedPropertyList::iterator i = _properties->begin(); i != _properties->end(); ++i) { + if (!strcmp(i->second->property_name(), (const char*)"Envelope")) continue; + if (!strcmp(i->second->property_name(), (const char*)"FadeIn")) continue; + if (!strcmp(i->second->property_name(), (const char*)"FadeOut")) continue; + if (!strcmp(i->second->property_name(), (const char*)"InverseFadeIn")) continue; + if (!strcmp(i->second->property_name(), (const char*)"InverseFadeOut")) continue; + i->second->get_value (*node); + } id().print (buf, sizeof (buf)); node->add_property ("id", buf); diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index b6569ba00e..2dd2dfa7a0 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1078,7 +1078,7 @@ Session::state (bool full_state) boost::shared_ptr r = i->second; /* only store regions not attached to playlists */ if (r->playlist() == 0) { - child->add_child_nocopy (r->state ()); + child->add_child_nocopy (r->get_state ()); } } -- cgit v1.2.3