169 lines
3.4 KiB
C++
169 lines
3.4 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
WaveformSettings.cpp
|
|
|
|
Paul Licameli
|
|
|
|
*******************************************************************//**
|
|
|
|
\class WaveformSettings
|
|
\brief Waveform settings, either for one track or as defaults.
|
|
|
|
*//*******************************************************************/
|
|
|
|
#include "../Audacity.h"
|
|
#include "WaveformSettings.h"
|
|
#include "GUISettings.h"
|
|
#include "GUIPrefs.h"
|
|
|
|
#include <algorithm>
|
|
#include <wx/intl.h>
|
|
|
|
#include "../Prefs.h"
|
|
#include "../TranslatableStringArray.h"
|
|
#include "../Internat.h"
|
|
|
|
|
|
WaveformSettings::Globals::Globals()
|
|
{
|
|
LoadPrefs();
|
|
}
|
|
|
|
void WaveformSettings::Globals::SavePrefs()
|
|
{
|
|
}
|
|
|
|
void WaveformSettings::Globals::LoadPrefs()
|
|
{
|
|
}
|
|
|
|
WaveformSettings::Globals
|
|
&WaveformSettings::Globals::Get()
|
|
{
|
|
static Globals instance;
|
|
return instance;
|
|
}
|
|
|
|
WaveformSettings::WaveformSettings()
|
|
{
|
|
LoadPrefs();
|
|
}
|
|
|
|
WaveformSettings::WaveformSettings(const WaveformSettings &other)
|
|
: scaleType(other.scaleType)
|
|
, dBRange(other.dBRange)
|
|
{
|
|
}
|
|
|
|
WaveformSettings &WaveformSettings::operator= (const WaveformSettings &other)
|
|
{
|
|
if (this != &other) {
|
|
scaleType = other.scaleType;
|
|
dBRange = other.dBRange;
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
WaveformSettings& WaveformSettings::defaults()
|
|
{
|
|
static WaveformSettings instance;
|
|
return instance;
|
|
}
|
|
|
|
bool WaveformSettings::Validate(bool /* quiet */)
|
|
{
|
|
scaleType = ScaleType(
|
|
std::max(0, std::min((int)(stNumScaleTypes) - 1, (int)(scaleType)))
|
|
);
|
|
|
|
ConvertToEnumeratedDBRange();
|
|
ConvertToActualDBRange();
|
|
|
|
return true;
|
|
}
|
|
|
|
void WaveformSettings::LoadPrefs()
|
|
{
|
|
scaleType = ScaleType(gPrefs->Read(wxT("/Waveform/ScaleType"), 0L));
|
|
bool newPrefFound = gPrefs->Read(wxT("/Waveform/dBRange"), &dBRange);
|
|
if (!newPrefFound)
|
|
dBRange = gPrefs->Read(ENV_DB_KEY, ENV_DB_RANGE);
|
|
|
|
// Enforce legal values
|
|
Validate(true);
|
|
|
|
Update();
|
|
}
|
|
|
|
void WaveformSettings::SavePrefs()
|
|
{
|
|
gPrefs->Write(wxT("/Waveform/ScaleType"), long(scaleType));
|
|
gPrefs->Write(wxT("/Waveform/dBRange"), long(dBRange));
|
|
}
|
|
|
|
void WaveformSettings::Update()
|
|
{
|
|
}
|
|
|
|
void WaveformSettings::ConvertToEnumeratedDBRange()
|
|
{
|
|
// Assumes the codes are in ascending sequence.
|
|
wxArrayStringEx codes;
|
|
GUIPrefs::GetRangeChoices(NULL, &codes);
|
|
int ii = 0;
|
|
for (int nn = codes.size(); ii < nn; ++ii) {
|
|
long value = 0;
|
|
codes[ii].ToLong(&value);
|
|
if (dBRange < value)
|
|
break;
|
|
}
|
|
dBRange = std::max(0, ii - 1);
|
|
}
|
|
|
|
void WaveformSettings::ConvertToActualDBRange()
|
|
{
|
|
wxArrayStringEx codes;
|
|
GUIPrefs::GetRangeChoices(NULL, &codes);
|
|
long value = 0;
|
|
codes[std::max(0, std::min((int)(codes.size()) - 1, dBRange))]
|
|
.ToLong(&value);
|
|
dBRange = (int)(value);
|
|
}
|
|
|
|
void WaveformSettings::NextLowerDBRange()
|
|
{
|
|
ConvertToEnumeratedDBRange();
|
|
++dBRange;
|
|
ConvertToActualDBRange();
|
|
}
|
|
|
|
void WaveformSettings::NextHigherDBRange()
|
|
{
|
|
ConvertToEnumeratedDBRange();
|
|
--dBRange;
|
|
ConvertToActualDBRange();
|
|
}
|
|
|
|
//static
|
|
const wxArrayStringEx &WaveformSettings::GetScaleNames()
|
|
{
|
|
class ScaleNamesArray final : public TranslatableStringArray
|
|
{
|
|
void Populate() override
|
|
{
|
|
// Keep in correspondence with enum WaveTrack::WaveTrackDisplay:
|
|
mContents.push_back(_("Linear"));
|
|
mContents.push_back(_("Logarithmic"));
|
|
}
|
|
};
|
|
|
|
static ScaleNamesArray theArray;
|
|
return theArray.Get();
|
|
}
|
|
|
|
WaveformSettings::~WaveformSettings()
|
|
{
|
|
}
|