mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-02 17:23:18 +02: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:
parent
6c3731061f
commit
b45e3e8aac
@ -180,7 +180,7 @@ public:
|
||||
long defaultSymbol,
|
||||
|
||||
std::vector<int> intValues, // must have same size as symbols
|
||||
const wxString &oldKey
|
||||
const wxString &oldKey = {}
|
||||
);
|
||||
|
||||
protected:
|
||||
@ -215,7 +215,7 @@ public:
|
||||
long defaultSymbol,
|
||||
|
||||
std::initializer_list< Enum > values, // must have same size as symbols
|
||||
const wxString &oldKey
|
||||
const wxString &oldKey = {}
|
||||
)
|
||||
: EnumSettingBase{
|
||||
key, symbols, defaultSymbol,
|
||||
|
@ -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
|
||||
: public EnumSetting< WaveTrackViewConstants::Display > {
|
||||
public:
|
||||
TracksViewModeEnumSetting(
|
||||
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
|
||||
}
|
||||
{}
|
||||
using EnumSetting< WaveTrackViewConstants::Display >::EnumSetting;
|
||||
|
||||
void Migrate( wxString &value ) override
|
||||
{
|
||||
// Special logic for this preference which was twice migrated!
|
||||
|
||||
// First test for the older but not oldest key:
|
||||
EnumSetting::Migrate(value);
|
||||
if (!value.empty())
|
||||
return;
|
||||
// Special logic for this preference which was three times migrated!
|
||||
|
||||
// PRL: Bugs 1043, 1044
|
||||
// 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.
|
||||
// Prefer the NEW preference key if it is present
|
||||
|
||||
WaveTrackViewConstants::Display viewMode;
|
||||
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,
|
||||
(int)(WaveTrackViewConstants::Waveform));
|
||||
auto viewMode = WaveTrackViewConstants::ConvertLegacyDisplayValue(oldMode);
|
||||
(int)(WaveTrackViewConstants::Waveform) ) ) {
|
||||
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!
|
||||
viewMode = WaveTrackViewConstants::ValidateWaveTrackDisplay(viewMode);
|
||||
if ( !gPrefs->Read( key3, &value ) ) {
|
||||
if (newValue == obsoleteValue) {
|
||||
newValue = waveformSymbol.Internal();
|
||||
gPrefs->Write(waveformScaleKey, dbValueString);
|
||||
}
|
||||
|
||||
const_cast<TracksViewModeEnumSetting*>(this)->WriteInt( viewMode );
|
||||
gPrefs->Flush();
|
||||
|
||||
value = mSymbols[ FindInt(viewMode) ].Internal();
|
||||
Write( value = newValue );
|
||||
gPrefs->Flush();
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static TracksViewModeEnumSetting viewModeSetting{
|
||||
wxT("/GUI/DefaultViewModeChoice"),
|
||||
key3,
|
||||
{
|
||||
{ XO("Waveform") },
|
||||
{ wxT("WaveformDB"), XO("Waveform (dB)") },
|
||||
{ XO("Spectrogram") }
|
||||
{ waveformSymbol },
|
||||
{ spectrumSymbol }
|
||||
},
|
||||
0, // Waveform
|
||||
|
||||
// for migrating old preferences:
|
||||
{
|
||||
WaveTrackViewConstants::Waveform,
|
||||
WaveTrackViewConstants::obsoleteWaveformDBDisplay,
|
||||
WaveTrackViewConstants::Spectrum
|
||||
},
|
||||
wxT("/GUI/DefaultViewModeNew")
|
||||
}
|
||||
};
|
||||
|
||||
WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice()
|
||||
@ -124,6 +162,11 @@ WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice()
|
||||
return viewModeSetting.ReadEnum();
|
||||
}
|
||||
|
||||
WaveformSettings::ScaleTypeValues TracksPrefs::WaveformScaleChoice()
|
||||
{
|
||||
return waveformScaleSetting.ReadEnum();
|
||||
}
|
||||
|
||||
//////////
|
||||
static EnumSetting< WaveTrackViewConstants::SampleDisplay >
|
||||
sampleDisplaySetting{
|
||||
@ -299,9 +342,13 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S)
|
||||
30
|
||||
);
|
||||
#endif
|
||||
|
||||
S.TieChoice(XO("Default &view mode:"),
|
||||
viewModeSetting );
|
||||
|
||||
S.TieChoice(XO("Default Waveform scale:"),
|
||||
waveformScaleSetting );
|
||||
|
||||
S.TieChoice(XO("Display &samples:"),
|
||||
sampleDisplaySetting );
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <vector>
|
||||
#include "PrefsPanel.h"
|
||||
#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h"
|
||||
#include "WaveformSettings.h" // for ScaleTypeValues
|
||||
|
||||
class ShuttleGui;
|
||||
|
||||
@ -43,6 +44,7 @@ class TracksPrefs final : public PrefsPanel
|
||||
static wxString GetDefaultAudioTrackNamePreference();
|
||||
|
||||
static WaveTrackViewConstants::Display ViewModeChoice();
|
||||
static WaveformSettings::ScaleTypeValues WaveformScaleChoice();
|
||||
static WaveTrackViewConstants::SampleDisplay SampleViewChoice();
|
||||
static WaveTrackViewConstants::ZoomPresets Zoom1Choice();
|
||||
static WaveTrackViewConstants::ZoomPresets Zoom2Choice();
|
||||
|
@ -1206,13 +1206,12 @@ void WaveTrackView::BuildSubViews() const
|
||||
|
||||
// Force creation always:
|
||||
WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() )
|
||||
->GetIndependentWaveformSettings();
|
||||
|
||||
if (display == WaveTrackViewConstants::obsoleteWaveformDBDisplay) {
|
||||
display = WaveTrackViewConstants::Waveform;
|
||||
settings.scaleType = WaveformSettings::stLogarithmic;
|
||||
}
|
||||
|
||||
->GetIndependentWaveformSettings();
|
||||
|
||||
// Set the default scale type to linear or log, even if we are showing
|
||||
// spectrogram
|
||||
settings.scaleType = TracksPrefs::WaveformScaleChoice();
|
||||
|
||||
pThis->DoSetDisplay( display );
|
||||
}
|
||||
}
|
||||
|
@ -43,27 +43,3 @@ WaveTrackViewConstants::ConvertLegacyDisplayValue(int oldValue)
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -77,9 +77,6 @@ namespace WaveTrackViewConstants
|
||||
|
||||
// Handle remapping of enum values from 2.1.0 and earlier
|
||||
Display ConvertLegacyDisplayValue(int oldValue);
|
||||
|
||||
// Handle restriction of range of values of the enum from future versions
|
||||
Display ValidateWaveTrackDisplay(Display display);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user