1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
/**********************************************************************
Audacity: A Digital Audio Editor
SelectedRegion.cpp
Paul Licameli
*******************************************************************/
#include "SelectedRegion.h"
#include "XMLWriter.h"
#include "XMLAttributeValueView.h"
const char* SelectedRegion::sDefaultT0Name = "selStart";
const char *SelectedRegion::sDefaultT1Name = "selEnd";
namespace {
const char* sDefaultF0Name = "selLow";
const char* sDefaultF1Name = "selHigh";
}
void SelectedRegion::WriteXMLAttributes
(XMLWriter &xmlFile,
const char *legacyT0Name, const char *legacyT1Name) const
// may throw
{
xmlFile.WriteAttr(legacyT0Name, t0(), 10);
xmlFile.WriteAttr(legacyT1Name, t1(), 10);
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
if (f0() >= 0)
xmlFile.WriteAttr(sDefaultF0Name, f0(), 10);
if (f1() >= 0)
xmlFile.WriteAttr(sDefaultF1Name, f1(), 10);
#endif
}
bool SelectedRegion::HandleXMLAttribute
(const std::string_view &attr, const XMLAttributeValueView &value,
const char *legacyT0Name, const char *legacyT1Name)
{
// Keep this function consistent with the table in the next!
typedef bool (SelectedRegion::*Setter)(double, bool);
Setter setter = 0;
if (attr == legacyT0Name)
setter = &SelectedRegion::setT0;
else if (attr == legacyT1Name)
setter = &SelectedRegion::setT1;
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
else if (attr == sDefaultF0Name)
setter = &SelectedRegion::setF0;
else if (attr == sDefaultF1Name)
setter = &SelectedRegion::setF1;
#endif
else
return false;
double dblValue;
if (!value.TryGet(dblValue))
return false;
// False means don't flip time or frequency boundaries
(void)(this->*setter)(dblValue, false);
return true;
}
XMLMethodRegistryBase::Mutators<SelectedRegion>
SelectedRegion::Mutators(
const char *legacyT0Name, const char *legacyT1Name)
{
// Keep this table consistent with the previous function!
return {
{ legacyT0Name, [=](auto &selectedRegion, auto value){
selectedRegion
.HandleXMLAttribute(legacyT0Name, value,
legacyT0Name, legacyT1Name);
} },
{ legacyT1Name, [=](auto &selectedRegion, auto value){
selectedRegion
.HandleXMLAttribute(legacyT1Name, value,
legacyT0Name, legacyT1Name);
} },
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
{ sDefaultF0Name, [=](auto &selectedRegion, auto value){
selectedRegion
.HandleXMLAttribute(sDefaultF0Name, value, "", "");
} },
{ sDefaultF1Name, [=](auto &selectedRegion, auto value){
selectedRegion
.HandleXMLAttribute(sDefaultF1Name, value, "", "");
} },
#endif
};
};
|