Fix unit-test data (XML attributes changed)
[ardour.git] / libs / ardour / region.cc
index 151f4a7f1bf70a7a4cae65c9790b96520d4b1e42..9d82ff93956c943deb9892e9b52b19234fbad04c 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <glibmm/threads.h>
 #include "pbd/xml++.h"
+#include "pbd/types_convert.h"
 
 #include "ardour/debug.h"
 #include "ardour/filter.h"
@@ -37,6 +38,7 @@
 #include "ardour/source.h"
 #include "ardour/tempo.h"
 #include "ardour/transient_detector.h"
+#include "ardour/types_convert.h"
 
 #include "pbd/i18n.h"
 
@@ -610,9 +612,9 @@ Region::set_position (framepos_t pos, int32_t sub_num)
        } else {
                if (!_session.loading()) {
                        _beat = _session.tempo_map().exact_beat_at_frame (pos, sub_num);
+                       _quarter_note = _session.tempo_map().quarter_note_at_beat (_beat);
                }
 
-               /* will set quarter note accordingly */
                set_position_internal (pos, false, sub_num);
        }
 
@@ -1255,10 +1257,7 @@ XMLNode&
 Region::state ()
 {
        XMLNode *node = new XMLNode ("Region");
-       char buf[64];
        char buf2[64];
-       LocaleGuard lg;
-       const char* fe = NULL;
 
        /* custom version of 'add_properties (*node);'
         * skip values that have have dedicated save functions
@@ -1273,9 +1272,10 @@ Region::state ()
                i->second->get_value (*node);
        }
 
-       id().print (buf, sizeof (buf));
-       node->add_property ("id", buf);
-       node->add_property ("type", _type.to_string());
+       node->set_property ("id", id ());
+       node->set_property ("type", _type);
+
+       std::string fe;
 
        switch (_first_edit) {
        case EditChangesNothing:
@@ -1292,20 +1292,18 @@ Region::state ()
                break;
        }
 
-       node->add_property ("first-edit", fe);
+       node->set_property ("first-edit", fe);
 
        /* note: flags are stored by derived classes */
 
        for (uint32_t n=0; n < _sources.size(); ++n) {
                snprintf (buf2, sizeof(buf2), "source-%d", n);
-               _sources[n]->id().print (buf, sizeof(buf));
-               node->add_property (buf2, buf);
+               node->set_property (buf2, _sources[n]->id());
        }
 
        for (uint32_t n=0; n < _master_sources.size(); ++n) {
                snprintf (buf2, sizeof(buf2), "master-source-%d", n);
-               _master_sources[n]->id().print (buf, sizeof (buf));
-               node->add_property (buf2, buf);
+               node->set_property (buf2, _master_sources[n]->id ());
        }
 
        /* Only store nested sources for the whole-file region that acts
@@ -1353,7 +1351,6 @@ Region::set_state (const XMLNode& node, int version)
 int
 Region::_set_state (const XMLNode& node, int /*version*/, PropertyChange& what_changed, bool send)
 {
-       XMLProperty const * prop;
        Timecode::BBT_Time bbt_time;
 
        Stateful::save_extra_xml (node);
@@ -1363,8 +1360,9 @@ Region::_set_state (const XMLNode& node, int /*version*/, PropertyChange& what_c
        set_id (node);
 
        if (_position_lock_style == MusicTime) {
-               if ((prop = node.property ("bbt-position")) != 0) {
-                       if (sscanf (prop->value().c_str(), "%d|%d|%d",
+               std::string bbt_str;
+               if (node.get_property ("bbt-position", bbt_str)) {
+                       if (sscanf (bbt_str.c_str(), "%d|%d|%d",
                                    &bbt_time.bars,
                                    &bbt_time.beats,
                                    &bbt_time.ticks) != 3) {
@@ -1394,8 +1392,9 @@ Region::_set_state (const XMLNode& node, int /*version*/, PropertyChange& what_c
        }
 
        /* Quick fix for 2.x sessions when region is muted */
-       if ((prop = node.property (X_("flags")))) {
-               if (string::npos != prop->value().find("Muted")){
+       std::string flags;
+       if (node.get_property (X_("flags"), flags)) {
+               if (string::npos != flags.find("Muted")){
                        set_muted (true);
                }
        }
@@ -1910,9 +1909,7 @@ Region::is_compound () const
 void
 Region::post_set (const PropertyChange& pc)
 {
-       if (pc.contains (Properties::position)) {
-               _quarter_note = _session.tempo_map().quarter_note_at_beat (_beat);
-       }
+       _quarter_note = _session.tempo_map().quarter_note_at_beat (_beat);
 }
 
 void