From a69fba99904badc327c62d27895b521d3d934dbd Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 18 Jan 2020 20:09:35 -0500 Subject: [PATCH] TracksPrefs does not use hardcoded list of all view types... ... It does have some duplication of string values, but only for purposes of upgrading old config files. --- include/audacity/Types.h | 2 ++ src/Prefs.h | 2 +- src/ShuttleGui.cpp | 4 ++-- src/prefs/TracksPrefs.cpp | 39 ++++++++++++++++++++++----------------- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/include/audacity/Types.h b/include/audacity/Types.h index 144773533..e21551458 100644 --- a/include/audacity/Types.h +++ b/include/audacity/Types.h @@ -467,6 +467,8 @@ public: TranslatableString Stripped( unsigned options = MenuCodes ) const { return TranslatableString{ *this }.Strip( options ); } + wxString StrippedTranslation() const { return Stripped().Translation(); } + private: static const Formatter NullContextFormatter; diff --git a/src/Prefs.h b/src/Prefs.h index 3086d3dc2..723bd400e 100644 --- a/src/Prefs.h +++ b/src/Prefs.h @@ -214,7 +214,7 @@ public: EnumValueSymbols symbols, long defaultSymbol, - std::initializer_list< Enum > values, // must have same size as symbols + std::vector< Enum > values, // must have same size as symbols const wxString &oldKey = {} ) : EnumSettingBase{ diff --git a/src/ShuttleGui.cpp b/src/ShuttleGui.cpp index 7d57375e6..f86de3500 100644 --- a/src/ShuttleGui.cpp +++ b/src/ShuttleGui.cpp @@ -402,7 +402,7 @@ wxChoice * ShuttleGuiBase::AddChoice( const TranslatableString &Prompt, wxDefaultPosition, wxDefaultSize, transform_container( - choices, std::mem_fn( &TranslatableString::Translation ) ), + choices, std::mem_fn( &TranslatableString::StrippedTranslation ) ), GetStyle( 0 ) ); pChoice->SetMinSize( { 180, -1 } );// Use -1 for 'default size' - Platform specific. @@ -2421,7 +2421,7 @@ void ShuttleGui::SetMinSize( wxWindow *window, const TranslatableStrings & items { SetMinSize( window, transform_container( - items, std::mem_fn( &TranslatableString::Translation ) ) ); + items, std::mem_fn( &TranslatableString::StrippedTranslation ) ) ); } void ShuttleGui::SetMinSize( wxWindow *window, const wxArrayStringEx & items ) diff --git a/src/prefs/TracksPrefs.cpp b/src/prefs/TracksPrefs.cpp index b3a7ebe4c..2875a5014 100644 --- a/src/prefs/TracksPrefs.cpp +++ b/src/prefs/TracksPrefs.cpp @@ -27,6 +27,7 @@ #include "../Prefs.h" #include "../ShuttleGui.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" int TracksPrefs::iPreferencePinned = -1; @@ -81,8 +82,6 @@ namespace { 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") }; }; @@ -100,6 +99,9 @@ public: // to avoid confusing version 2.1.0 if it reads the preference file afterwards. // Prefer the NEW preference key if it is present + static const EnumValueSymbol waveformSymbol{ XO("Waveform") }; + static const EnumValueSymbol spectrumSymbol{ XO("Spectrogram") }; + WaveTrackViewConstants::Display viewMode; int oldMode; wxString newValue; @@ -143,23 +145,26 @@ public: } }; -static TracksViewModeEnumSetting viewModeSetting{ - key3, - { - { waveformSymbol }, - { spectrumSymbol } - }, - 0, // Waveform - - { - WaveTrackViewConstants::Waveform, - WaveTrackViewConstants::Spectrum - } -}; +static TracksViewModeEnumSetting viewModeSetting() +{ + // Do a delayed computation, so that registration of sub-view types completes + // first + const auto &types = WaveTrackSubView::AllTypes(); + auto symbols = transform_container< EnumValueSymbols >( + types, std::mem_fn( &WaveTrackSubView::Type::name ) ); + auto ids = transform_container< std::vector< WaveTrackSubView::Display > >( + types, std::mem_fn( &WaveTrackSubView::Type::id ) ); + return { + key3, + symbols, + 0, // Waveform + ids + }; +} WaveTrackViewConstants::Display TracksPrefs::ViewModeChoice() { - return viewModeSetting.ReadEnum(); + return viewModeSetting().ReadEnum(); } WaveformSettings::ScaleTypeValues TracksPrefs::WaveformScaleChoice() @@ -344,7 +349,7 @@ void TracksPrefs::PopulateOrExchange(ShuttleGui & S) #endif S.TieChoice(XO("Default &view mode:"), - viewModeSetting ); + viewModeSetting() ); S.TieChoice(XO("Default Waveform scale:"), waveformScaleSetting );