1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-17 08:30:06 +02:00

Conditional compilation (disabled) to make Spectral selection choice global...

... not per track,
and the preferences or View Settings page has a separate static box for
global settings as opposed to track settings.  This is the only global setting
for now.
This commit is contained in:
Paul Licameli 2015-06-16 11:39:26 -04:00
parent f74713f020
commit 7d379cde13
6 changed files with 85 additions and 4 deletions

View File

@ -2344,7 +2344,7 @@ void TrackArtist::DrawClipSpectrum(WaveTrackCache &waveTrackCache,
(zoomInfo.PositionToTime(0, -leftOffset) - tOffset)
);
const bool isSpectral = settings.spectralSelection;
const bool isSpectral = settings.SpectralSelectionEnabled();
const bool hidden = (ZoomInfo::HIDDEN == zoomInfo.GetFisheyeState());
const int begin = hidden
? 0

View File

@ -1813,7 +1813,7 @@ inline bool isSpectralSelectionTrack(const Track *pTrack, bool *pLogf = NULL) {
settings.scaleType == SpectrogramSettings::stLogarithmic;
*pLogf = logF;
}
return (display == WaveTrack::Spectrum) && settings.spectralSelection;
return (display == WaveTrack::Spectrum) && settings.SpectralSelectionEnabled();
}
else {
if (pLogf)

View File

@ -605,7 +605,7 @@ bool NyquistEffect::Process()
const WaveTrack::WaveTrackDisplay display = mCurTrack[0]->GetDisplay();
const bool bAllowSpectralEditing =
(display == WaveTrack::Spectrum) &&
mCurTrack[0]->GetSpectrogramSettings().spectralSelection;
mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled();
if (bAllowSpectralEditing) {
#if defined(EXPERIMENTAL_SPECTRAL_EDITING)

View File

@ -26,6 +26,33 @@ Paul Licameli
#include <algorithm>
#include <cmath>
SpectrogramSettings::Globals::Globals()
{
LoadPrefs();
}
void SpectrogramSettings::Globals::SavePrefs()
{
#ifdef SPECTRAL_SELECTION_GLOBAL_SWITCH
gPrefs->Write(wxT("/Spectrum/EnableSpectralSelection"), spectralSelection);
#endif
}
void SpectrogramSettings::Globals::LoadPrefs()
{
#ifdef SPECTRAL_SELECTION_GLOBAL_SWITCH
spectralSelection
= (gPrefs->Read(wxT("/Spectrum/EnableSpectralSelection"), 0L) != 0);
#endif
}
SpectrogramSettings::Globals
&SpectrogramSettings::Globals::Get()
{
static Globals instance;
return instance;
}
SpectrogramSettings::SpectrogramSettings()
: hFFT(0)
, window(0)
@ -48,7 +75,9 @@ SpectrogramSettings::SpectrogramSettings(const SpectrogramSettings &other)
#endif
, isGrayscale(other.isGrayscale)
, scaleType(other.scaleType)
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
, spectralSelection(other.spectralSelection)
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
, fftYGrid(other.fftYGrid)
#endif
@ -82,7 +111,9 @@ SpectrogramSettings &SpectrogramSettings::operator= (const SpectrogramSettings &
#endif
isGrayscale = other.isGrayscale;
scaleType = other.scaleType;
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
spectralSelection = other.spectralSelection;
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
fftYGrid = other.fftYGrid;
#endif
@ -219,7 +250,10 @@ void SpectrogramSettings::LoadPrefs()
isGrayscale = (gPrefs->Read(wxT("/Spectrum/Grayscale"), 0L) != 0);
scaleType = ScaleType(gPrefs->Read(wxT("/Spectrum/ScaleType"), 0L));
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
spectralSelection = (gPrefs->Read(wxT("/Spectrum/EnableSpectralSelection"), 0L) != 0);
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
fftYGrid = (gPrefs->Read(wxT("/Spectrum/FFTYGrid"), 0L) != 0);
@ -276,7 +310,10 @@ void SpectrogramSettings::SavePrefs()
gPrefs->Write(wxT("/Spectrum/Grayscale"), isGrayscale);
gPrefs->Write(wxT("/Spectrum/ScaleType"), scaleType);
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
gPrefs->Write(wxT("/Spectrum/EnableSpectralSelection"), spectralSelection);
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
gPrefs->Write(wxT("/Spectrum/FFTYGrid"), fftYGrid);
@ -486,3 +523,12 @@ int SpectrogramSettings::GetFFTLength(bool autocorrelation) const
#endif
;
}
bool SpectrogramSettings::SpectralSelectionEnabled() const
{
#ifdef SPECTRAL_SELECTION_GLOBAL_SWITCH
return Globals::Get().spectralSelection;
#else
return spectralSelection;
#endif
}

View File

@ -13,6 +13,8 @@ Paul Licameli
#include "../Experimental.h"
#undef SPECTRAL_SELECTION_GLOBAL_SWITCH
struct FFTParam;
class SpectrumPrefs;
class wxArrayString;
@ -22,6 +24,22 @@ class SpectrogramSettings
friend class SpectrumPrefs;
public:
// Singleton for settings that are not per-track
class Globals
{
public:
static Globals &Get();
void SavePrefs();
#ifdef SPECTRAL_SELECTION_GLOBAL_SWITCH
bool spectralSelection;
#endif
private:
Globals();
void LoadPrefs();
};
enum {
LogMinWindowSize = 3,
LogMaxWindowSize = 15,
@ -72,6 +90,7 @@ public:
int GetMaxFreq(double rate) const;
int GetLogMinFreq(double rate) const;
int GetLogMaxFreq(double rate) const;
bool SpectralSelectionEnabled() const;
void SetMinFreq(int freq);
void SetMaxFreq(int freq);
@ -95,7 +114,9 @@ public:
ScaleType scaleType;
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
bool spectralSelection; // But should this vary per track? -- PRL
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
bool fftYGrid;
@ -116,5 +137,4 @@ public:
mutable float *window;
#endif
};
#endif

View File

@ -218,8 +218,11 @@ void SpectrumPrefs::PopulateOrExchange(ShuttleGui & S)
S.Id(ID_GRAYSCALE).TieCheckBox(_("S&how the spectrum using grayscale colors"),
mTempSettings.isGrayscale);
#ifndef SPECTRAL_SELECTION_GLOBAL_SWITCH
S.Id(ID_SPECTRAL_SELECTION).TieCheckBox(_("Ena&ble spectral selection"),
mTempSettings.spectralSelection);
#endif
#ifdef EXPERIMENTAL_FFT_Y_GRID
S.TieCheckBox(_("Show a grid along the &Y-axis"),
@ -257,6 +260,15 @@ void SpectrumPrefs::PopulateOrExchange(ShuttleGui & S)
}
// S.EndStatic();
#ifdef SPECTRAL_SELECTION_GLOBAL_SWITCH
S.StartStatic(_("Global settings"));
{
S.TieCheckBox(_("Ena&ble spectral selection"),
SpectrogramSettings::Globals::Get().spectralSelection);
}
S.EndStatic();
#endif
S.StartMultiColumn(2, wxALIGN_RIGHT);
{
S.Id(ID_APPLY).AddButton(_("Appl&y"));
@ -340,7 +352,10 @@ bool SpectrumPrefs::Apply()
ShuttleGui S(this, eIsGettingFromDialog);
PopulateOrExchange(S);
mTempSettings.ConvertToActualWindowSizes();
SpectrogramSettings::Globals::Get().SavePrefs(); // always
if (mWt) {
if (mDefaulted) {
mWt->SetSpectrogramSettings(NULL);