13
0

Use XMLNode::get/set_property API in ARDOUR::Speakers class

This will improve the precision of the float conversions and negate the need
for a LocaleGuard
This commit is contained in:
Tim Mayberry 2016-08-25 23:12:58 +10:00
parent cd58473003
commit d1382a20ac

View File

@ -17,7 +17,6 @@
*/
#include "pbd/error.h"
#include "pbd/convert.h"
#include "pbd/locale_guard.h"
#include "ardour/speaker.h"
@ -244,18 +243,14 @@ XMLNode&
Speakers::get_state ()
{
XMLNode* node = new XMLNode (X_("Speakers"));
char buf[32];
LocaleGuard lg;
for (vector<Speaker>::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
XMLNode* speaker = new XMLNode (X_("Speaker"));
snprintf (buf, sizeof (buf), "%.12g", (*i).angles().azi);
speaker->add_property (X_("azimuth"), buf);
snprintf (buf, sizeof (buf), "%.12g", (*i).angles().ele);
speaker->add_property (X_("elevation"), buf);
snprintf (buf, sizeof (buf), "%.12g", (*i).angles().length);
speaker->add_property (X_("distance"), buf);
speaker->set_property (X_("azimuth"), (*i).angles().azi);
speaker->set_property (X_("elevation"), (*i).angles().ele);
speaker->set_property (X_("distance"), (*i).angles().length);
node->add_child_nocopy (*speaker);
}
@ -267,32 +262,19 @@ int
Speakers::set_state (const XMLNode& node, int /*version*/)
{
XMLNodeConstIterator i;
XMLProperty const * prop;
double a, e, d;
LocaleGuard lg;
int n = 0;
_speakers.clear ();
for (i = node.children().begin(); i != node.children().end(); ++i, ++n) {
for (i = node.children().begin(); i != node.children().end(); ++i) {
if ((*i)->name() == X_("Speaker")) {
if ((prop = (*i)->property (X_("azimuth"))) == 0) {
warning << _("Speaker information is missing azimuth - speaker ignored") << endmsg;
double a, e, d;
if (!(*i)->get_property (X_("azimuth"), a) ||
!(*i)->get_property (X_("elevation"), e) ||
!(*i)->get_property (X_("distance"), d)) {
warning << _("Speaker information is missing - speaker ignored") << endmsg;
continue;
}
a = atof (prop->value());
if ((prop = (*i)->property (X_("elevation"))) == 0) {
warning << _("Speaker information is missing elevation - speaker ignored") << endmsg;
continue;
}
e = atof (prop->value());
if ((prop = (*i)->property (X_("distance"))) == 0) {
warning << _("Speaker information is missing distance - speaker ignored") << endmsg;
continue;
}
d = atof (prop->value());
add_speaker (AngularVector (a, e, d));
}