1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-14 17:14:07 +01:00

Separate default waveform scale choice in Tracks preferences...

... Some complications in handling correct migration of preferences from
config files in older versions
This commit is contained in:
Paul Licameli
2020-01-13 17:34:21 -05:00
parent 6c3731061f
commit b45e3e8aac
6 changed files with 93 additions and 72 deletions

View File

@@ -180,7 +180,7 @@ public:
long defaultSymbol, long defaultSymbol,
std::vector<int> intValues, // must have same size as symbols std::vector<int> intValues, // must have same size as symbols
const wxString &oldKey const wxString &oldKey = {}
); );
protected: protected:
@@ -215,7 +215,7 @@ public:
long defaultSymbol, long defaultSymbol,
std::initializer_list< Enum > values, // must have same size as symbols std::initializer_list< Enum > values, // must have same size as symbols
const wxString &oldKey const wxString &oldKey = {}
) )
: EnumSettingBase{ : EnumSettingBase{
key, symbols, defaultSymbol, key, symbols, defaultSymbol,

View File

@@ -53,70 +53,108 @@ namespace {
} }
namespace {
const auto waveformScaleKey = wxT("/GUI/DefaultWaveformScaleChoice");
const auto dbValueString = wxT("dB");
}
static EnumSetting< WaveformSettings::ScaleTypeValues > waveformScaleSetting{
waveformScaleKey,
{
{ XO("Linear") },
{ dbValueString, XO("Logarithmic (dB)") },
},
0, // linear
{
WaveformSettings::stLinear,
WaveformSettings::stLogarithmic,
}
};
////////// //////////
// There is a complicated migration history here!
namespace {
const auto key0 = wxT("/GUI/DefaultViewMode");
const auto key1 = wxT("/GUI/DefaultViewModeNew");
const auto key2 = wxT("/GUI/DefaultViewModeChoice");
const auto key3 = wxT("/GUI/DefaultViewModeChoiceNew");
const EnumValueSymbol waveformSymbol{ XO("Waveform") };
const EnumValueSymbol spectrumSymbol{ XO("Spectrogram") };
const wxString obsoleteValue{ wxT("WaveformDB") };
};
class TracksViewModeEnumSetting class TracksViewModeEnumSetting
: public EnumSetting< WaveTrackViewConstants::Display > { : public EnumSetting< WaveTrackViewConstants::Display > {
public: public:
TracksViewModeEnumSetting( using EnumSetting< WaveTrackViewConstants::Display >::EnumSetting;
const wxString &key,
EnumValueSymbols symbols,
long defaultSymbol,
std::initializer_list< WaveTrackViewConstants::Display > intValues,
const wxString &oldKey
)
: EnumSetting{
key, std::move( symbols ), defaultSymbol,
std::move( intValues ), oldKey
}
{}
void Migrate( wxString &value ) override void Migrate( wxString &value ) override
{ {
// Special logic for this preference which was twice migrated! // Special logic for this preference which was three times migrated!
// First test for the older but not oldest key:
EnumSetting::Migrate(value);
if (!value.empty())
return;
// PRL: Bugs 1043, 1044 // PRL: Bugs 1043, 1044
// 2.1.1 writes a NEW key for this preference, which got NEW values, // 2.1.1 writes a NEW key for this preference, which got NEW values,
// to avoid confusing version 2.1.0 if it reads the preference file afterwards. // to avoid confusing version 2.1.0 if it reads the preference file afterwards.
// Prefer the NEW preference key if it is present // Prefer the NEW preference key if it is present
WaveTrackViewConstants::Display viewMode;
int oldMode; int oldMode;
gPrefs->Read(wxT("/GUI/DefaultViewMode"), // The very old key wxString newValue;
auto stringValue =
[]( WaveTrackViewConstants::Display display ){
switch ( display ) {
case WaveTrackViewConstants::Spectrum:
return spectrumSymbol.Internal();
case WaveTrackViewConstants::obsoleteWaveformDBDisplay:
return obsoleteValue;
default:
return waveformSymbol.Internal();
}
};
if ( gPrefs->Read(key0, // The very old key
&oldMode, &oldMode,
(int)(WaveTrackViewConstants::Waveform)); (int)(WaveTrackViewConstants::Waveform) ) ) {
auto viewMode = WaveTrackViewConstants::ConvertLegacyDisplayValue(oldMode); viewMode = WaveTrackViewConstants::ConvertLegacyDisplayValue(oldMode);
newValue = stringValue( viewMode );
}
else if ( gPrefs->Read(key1,
&oldMode,
(int)(WaveTrackViewConstants::Waveform) ) ) {
viewMode = static_cast<WaveTrackViewConstants::Display>( oldMode );
newValue = stringValue( viewMode );
}
else
gPrefs->Read( key2, &newValue );
// Now future-proof 2.1.1 against a recurrence of this sort of bug! if ( !gPrefs->Read( key3, &value ) ) {
viewMode = WaveTrackViewConstants::ValidateWaveTrackDisplay(viewMode); if (newValue == obsoleteValue) {
newValue = waveformSymbol.Internal();
gPrefs->Write(waveformScaleKey, dbValueString);
}
const_cast<TracksViewModeEnumSetting*>(this)->WriteInt( viewMode ); Write( value = newValue );
gPrefs->Flush(); gPrefs->Flush();
return;
value = mSymbols[ FindInt(viewMode) ].Internal(); }
} }
}; };
static TracksViewModeEnumSetting viewModeSetting{ static TracksViewModeEnumSetting viewModeSetting{
wxT("/GUI/DefaultViewModeChoice"), key3,
{ {
{ XO("Waveform") }, { waveformSymbol },
{ wxT("WaveformDB"), XO("Waveform (dB)") }, { spectrumSymbol }
{ XO("Spectrogram") }
}, },
0, // Waveform 0, // Waveform
// for migrating old preferences:
{ {
WaveTrackViewConstants::Waveform, WaveTrackViewConstants::Waveform,
WaveTrackViewConstants::obsoleteWaveformDBDisplay,
WaveTrackViewConstants::Spectrum WaveTrackViewConstants::Spectrum
}, }
wxT("/GUI/DefaultViewModeNew")
}; };
WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice() WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice()
@@ -124,6 +162,11 @@ WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice()
return viewModeSetting.ReadEnum(); return viewModeSetting.ReadEnum();
} }
WaveformSettings::ScaleTypeValues TracksPrefs::WaveformScaleChoice()
{
return waveformScaleSetting.ReadEnum();
}
////////// //////////
static EnumSetting< WaveTrackViewConstants::SampleDisplay > static EnumSetting< WaveTrackViewConstants::SampleDisplay >
sampleDisplaySetting{ sampleDisplaySetting{
@@ -299,9 +342,13 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S)
30 30
); );
#endif #endif
S.TieChoice(XO("Default &view mode:"), S.TieChoice(XO("Default &view mode:"),
viewModeSetting ); viewModeSetting );
S.TieChoice(XO("Default Waveform scale:"),
waveformScaleSetting );
S.TieChoice(XO("Display &samples:"), S.TieChoice(XO("Display &samples:"),
sampleDisplaySetting ); sampleDisplaySetting );

View File

@@ -18,6 +18,7 @@
#include <vector> #include <vector>
#include "PrefsPanel.h" #include "PrefsPanel.h"
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" #include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
#include "WaveformSettings.h" // for ScaleTypeValues
class ShuttleGui; class ShuttleGui;
@@ -43,6 +44,7 @@ class TracksPrefs final : public PrefsPanel
static wxString GetDefaultAudioTrackNamePreference(); static wxString GetDefaultAudioTrackNamePreference();
static WaveTrackViewConstants::Display ViewModeChoice(); static WaveTrackViewConstants::Display ViewModeChoice();
static WaveformSettings::ScaleTypeValues WaveformScaleChoice();
static WaveTrackViewConstants::SampleDisplay SampleViewChoice(); static WaveTrackViewConstants::SampleDisplay SampleViewChoice();
static WaveTrackViewConstants::ZoomPresets Zoom1Choice(); static WaveTrackViewConstants::ZoomPresets Zoom1Choice();
static WaveTrackViewConstants::ZoomPresets Zoom2Choice(); static WaveTrackViewConstants::ZoomPresets Zoom2Choice();

View File

@@ -1206,13 +1206,12 @@ void WaveTrackView::BuildSubViews() const
// Force creation always: // Force creation always:
WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() ) WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() )
->GetIndependentWaveformSettings(); ->GetIndependentWaveformSettings();
if (display == WaveTrackViewConstants::obsoleteWaveformDBDisplay) { // Set the default scale type to linear or log, even if we are showing
display = WaveTrackViewConstants::Waveform; // spectrogram
settings.scaleType = WaveformSettings::stLogarithmic; settings.scaleType = TracksPrefs::WaveformScaleChoice();
}
pThis->DoSetDisplay( display ); pThis->DoSetDisplay( display );
} }
} }

View File

@@ -43,27 +43,3 @@ WaveTrackViewConstants::ConvertLegacyDisplayValue(int oldValue)
} }
return newValue; return newValue;
} }
// static
WaveTrackViewConstants::Display
WaveTrackViewConstants::ValidateWaveTrackDisplay(Display display)
{
switch (display) {
// non-obsolete codes
case Waveform:
case obsoleteWaveformDBDisplay:
case Spectrum:
return display;
// obsolete codes
case obsolete1: // was SpectrumLogDisplay
case obsolete2: // was SpectralSelectionDisplay
case obsolete3: // was SpectralSelectionLogDisplay
case obsolete4: // was PitchDisplay
return Spectrum;
// codes out of bounds (from future prefs files?)
default:
return MinDisplay;
}
}

View File

@@ -77,9 +77,6 @@ namespace WaveTrackViewConstants
// Handle remapping of enum values from 2.1.0 and earlier // Handle remapping of enum values from 2.1.0 and earlier
Display ConvertLegacyDisplayValue(int oldValue); Display ConvertLegacyDisplayValue(int oldValue);
// Handle restriction of range of values of the enum from future versions
Display ValidateWaveTrackDisplay(Display display);
} }
#endif #endif