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:
@@ -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,
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user