File: SelectedRegion.cpp

package info (click to toggle)
audacity 3.2.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 106,704 kB
  • sloc: cpp: 277,038; ansic: 73,623; lisp: 7,761; python: 3,305; sh: 2,715; perl: 821; xml: 275; makefile: 119
file content (96 lines) | stat: -rw-r--r-- 2,783 bytes parent folder | download
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
   };
};