1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

Redo view mode choice in Tracks preferences

This commit is contained in:
Paul Licameli 2018-03-20 14:51:03 -04:00
parent 872b4f430c
commit 83a01e255f
4 changed files with 79 additions and 50 deletions

View File

@ -96,7 +96,7 @@ WaveTrack::WaveTrack(const std::shared_ptr<DirManager> &projDirManager, sampleFo
// Force creation always:
WaveformSettings &settings = GetIndependentWaveformSettings();
mDisplay = FindDefaultViewMode();
mDisplay = TracksPrefs::ViewModeChoice();
if (mDisplay == obsoleteWaveformDBDisplay) {
mDisplay = Waveform;
settings.scaleType = WaveformSettings::stLogarithmic;
@ -254,32 +254,6 @@ void WaveTrack::SetPanFromChannelType()
};
//static
WaveTrack::WaveTrackDisplay WaveTrack::FindDefaultViewMode()
{
// 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
WaveTrack::WaveTrackDisplay viewMode;
gPrefs->Read(wxT("/GUI/DefaultViewModeNew"), &viewMode, -1);
// Default to the old key only if not, default the value if it's not there either
wxASSERT(WaveTrack::MinDisplay >= 0);
if (viewMode < 0) {
int oldMode;
gPrefs->Read(wxT("/GUI/DefaultViewMode"), &oldMode,
(int)(WaveTrack::Waveform));
viewMode = WaveTrack::ConvertLegacyDisplayValue(oldMode);
}
// Now future-proof 2.1.1 against a recurrence of this sort of bug!
viewMode = WaveTrack::ValidateWaveTrackDisplay(viewMode);
return viewMode;
}
// static
WaveTrack::WaveTrackDisplay
WaveTrack::ConvertLegacyDisplayValue(int oldValue)

View File

@ -578,9 +578,6 @@ private:
kMaxZoom,
};
// Read appropriate value from preferences
static WaveTrackDisplay FindDefaultViewMode();
// Handle remapping of enum values from 2.1.0 and earlier
static WaveTrackDisplay ConvertLegacyDisplayValue(int oldValue);

View File

@ -45,17 +45,86 @@ namespace {
}
//////////
static const IdentInterfaceSymbol choicesView[] = {
{ XO("Waveform") },
{ wxT("WaveformDB"), XO("Waveform (dB)") },
{ XO("Spectrogram") }
};
static const int intChoicesView[] = {
(int)(WaveTrack::Waveform),
(int)(WaveTrack::obsoleteWaveformDBDisplay),
(int)(WaveTrack::Spectrum)
};
static const size_t nChoicesView = WXSIZEOF(choicesView);
static_assert( nChoicesView == WXSIZEOF(intChoicesView), "size mismatch" );
static const size_t defaultChoiceView = 0;
class TracksViewModeSetting : public EncodedEnumSetting {
public:
TracksViewModeSetting(
const wxString &key,
const IdentInterfaceSymbol symbols[], size_t nSymbols,
size_t defaultSymbol,
const int intValues[],
const wxString &oldKey
)
: EncodedEnumSetting{
key, symbols, nSymbols, defaultSymbol, intValues, oldKey }
{}
void Migrate( wxString &value ) override
{
// Special logic for this preference which was twice migrated!
// First test for the older but not oldest key:
EncodedEnumSetting::Migrate(value);
if (!value.empty())
return;
// 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
int oldMode;
gPrefs->Read(wxT("/GUI/DefaultViewMode"), // The very old key
&oldMode,
(int)(WaveTrack::Waveform));
auto viewMode = WaveTrack::ConvertLegacyDisplayValue(oldMode);
// Now future-proof 2.1.1 against a recurrence of this sort of bug!
viewMode = WaveTrack::ValidateWaveTrackDisplay(viewMode);
const_cast<TracksViewModeSetting*>(this)->WriteInt( viewMode );
gPrefs->Flush();
value = mSymbols[ FindInt(viewMode) ].Internal();
}
};
static TracksViewModeSetting viewModeSetting{
wxT("/GUI/DefaultViewModeChoice"),
choicesView, nChoicesView, defaultChoiceView,
intChoicesView,
wxT("/GUI/DefaultViewModeNew")
};
WaveTrack::WaveTrackDisplay TracksPrefs::ViewModeChoice()
{
return (WaveTrack::WaveTrackDisplay) viewModeSetting.ReadInt();
}
//////////
TracksPrefs::TracksPrefs(wxWindow * parent, wxWindowID winid)
/* i18n-hint: "Tracks" include audio recordings but also other collections of
* data associated with a time line, such as sequences of labels, and musical
* notes */
: PrefsPanel(parent, winid, _("Tracks"))
{
// Bugs 1043, 1044
// First rewrite legacy preferences
gPrefs->Write(wxT("/GUI/DefaultViewModeNew"),
(int) WaveTrack::FindDefaultViewMode());
Populate();
}
@ -68,15 +137,6 @@ void TracksPrefs::Populate()
// Keep view choices and codes in proper correspondence --
// we don't display them by increasing integer values.
mViewChoices.Add(_("Waveform"));
mViewCodes.push_back((int)(WaveTrack::Waveform));
mViewChoices.Add(_("Waveform (dB)"));
mViewCodes.push_back((int)(WaveTrack::obsoleteWaveformDBDisplay));
mViewChoices.Add(_("Spectrogram"));
mViewCodes.push_back(WaveTrack::Spectrum);
// How samples are displayed when zoomed in:
@ -153,10 +213,7 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S)
S.StartMultiColumn(2);
{
S.TieChoice(_("Default &view mode:"),
wxT("/GUI/DefaultViewModeNew"),
0,
mViewChoices,
mViewCodes);
viewModeSetting );
S.TieChoice(_("Display &samples:"),
wxT("/GUI/SampleView"),

View File

@ -20,6 +20,7 @@
#include <vector>
#include "PrefsPanel.h"
#include "../WaveTrack.h"
class ShuttleGui;
@ -36,14 +37,14 @@ class TracksPrefs final : public PrefsPanel
static wxString GetDefaultAudioTrackNamePreference();
static WaveTrack::WaveTrackDisplay ViewModeChoice();
private:
void Populate();
void PopulateOrExchange(ShuttleGui & S) override;
static int iPreferencePinned;
std::vector<int> mViewCodes;
wxArrayString mViewChoices;
std::vector<int> mSampleDisplayCodes;
wxArrayString mSampleDisplayChoices;
std::vector<int> mZoomCodes;