diff --git a/include/audacity/EffectAutomationParameters.h b/include/audacity/EffectAutomationParameters.h index 90e05332c..7e0e996f1 100644 --- a/include/audacity/EffectAutomationParameters.h +++ b/include/audacity/EffectAutomationParameters.h @@ -50,6 +50,8 @@ #include #include +#include "IdentInterface.h" + /** \brief CommandParameters, derived from wxFileConfig, is essentially doing @@ -162,7 +164,7 @@ public: using ObsoleteMap = std::pair< wxString, size_t >; bool ReadEnum(const wxString & key, int *pi, - const wxString choices[], size_t nChoices, + const IdentInterfaceSymbol choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { @@ -172,7 +174,7 @@ public: return false; } *pi = std::find( choices, choices + nChoices, - s ) - choices; + IdentInterfaceSymbol{ s, {} } ) - choices; if (*pi == nChoices) *pi = -1; if (*pi < 0 && obsoletes) { @@ -187,7 +189,7 @@ public: } bool ReadEnum(const wxString & key, int *pi, int defVal, - const wxString choices[], size_t nChoices, + const IdentInterfaceSymbol choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { @@ -199,14 +201,14 @@ public: } bool WriteEnum(const wxString & key, int value, - const wxString choices[], size_t nChoices) + const IdentInterfaceSymbol choices[], size_t nChoices) { if (value < 0 || value >= nChoices) { return false; } - return wxFileConfig::Write(key, choices[value]); + return wxFileConfig::Write(key, choices[value].Internal()); } bool ReadAndVerify(const wxString & key, float *val, float defVal, float min, float max) const @@ -246,7 +248,7 @@ public: } bool ReadAndVerify(const wxString & key, int *val, int defVal, - const wxString choices[], size_t nChoices, + const IdentInterfaceSymbol choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { diff --git a/src/Internat.cpp b/src/Internat.cpp index 7a93104fd..f63e67fd9 100644 --- a/src/Internat.cpp +++ b/src/Internat.cpp @@ -31,6 +31,7 @@ and on Mac OS X for the filesystem. #include "FileNames.h" #include "widgets/ErrorDialog.h" #include "Internat.h" +#include "../include/audacity/IdentInterface.h" // in order for the static member variables to exist, they must appear here // (_outside_) the class definition, in order to be allocated some storage. @@ -298,3 +299,12 @@ wxString Internat::StripAccelerators(const wxString &s) } return result; } + +wxArrayString LocalizedStrings( + const IdentInterfaceSymbol strings[], size_t nStrings) +{ + wxArrayString results; + std::transform( strings, strings + nStrings, std::back_inserter(results), + std::mem_fun_ref( &IdentInterfaceSymbol::Translation ) ); + return results; +} diff --git a/src/Internat.h b/src/Internat.h index 21c90c6cc..85a875873 100644 --- a/src/Internat.h +++ b/src/Internat.h @@ -169,20 +169,9 @@ private: #define UTF8CTOWX(X) wxString((X), wxConvUTF8) #define LAT1CTOWX(X) wxString((X), wxConvISO8859_1) -inline wxArrayString LocalizedStrings(const wxString strings[], size_t nStrings) -{ - wxArrayString results; - std::transform( strings, strings + nStrings, std::back_inserter(results), - GetCustomTranslation ); - return results; -} - -inline wxArrayString LocalizedStrings(const wxArrayString &strings) -{ - if (strings.empty()) - return {}; - return LocalizedStrings( &strings[0], strings.size() ); -} +class IdentInterfaceSymbol; +wxArrayString LocalizedStrings( + const IdentInterfaceSymbol strings[], size_t nStrings); // This object pairs an internal string, maybe empty, with a translated string. // Any internal string may be written to configuration or other files and, diff --git a/src/Shuttle.cpp b/src/Shuttle.cpp index d111c1337..2e50f4edc 100644 --- a/src/Shuttle.cpp +++ b/src/Shuttle.cpp @@ -343,7 +343,7 @@ void ShuttleParams::Define( float & var, const wxChar * key, const float vdef void ShuttleParams::Define( double & var, const wxChar * key, const float vdefault, const float vmin, const float vmax, const float vscl ){;}; void ShuttleParams::Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl ){;}; void ShuttleParams::Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin, const wxString vmax, const wxString vscl ){;}; -void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ){;}; +void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, const IdentInterfaceSymbol strings[], size_t nStrings ){;}; @@ -403,10 +403,10 @@ void ShuttleGetAutomation::Define( wxString &var, const wxChar * key, const wxSt } -void ShuttleGetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ) +void ShuttleGetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const IdentInterfaceSymbol strings[], size_t nStrings ) { if( !ShouldSet() ) return; - mpEap->Write(key, strings[var]); + mpEap->Write(key, strings[var].Internal()); } @@ -513,7 +513,7 @@ void ShuttleSetAutomation::Define( wxString &var, const wxChar * key, const wxSt } -void ShuttleSetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ) +void ShuttleSetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const IdentInterfaceSymbol strings[], size_t nStrings ) { CouldGet( key ); if( !bOK ) @@ -630,7 +630,7 @@ void ShuttleGetDefinition::Define( wxString &var, const wxChar * key, const wxSt void ShuttleGetDefinition::DefineEnum( int &var, const wxChar * key, const int vdefault, - const wxString strings[], size_t nStrings ) + const IdentInterfaceSymbol strings[], size_t nStrings ) { StartStruct(); AddItem( wxString(key), "key" ); @@ -638,11 +638,11 @@ void ShuttleGetDefinition::DefineEnum( int &var, if( IsOptional() ) AddItem( "unchanged", "default" ); else - AddItem( strings[vdefault], "default" ); + AddItem( strings[vdefault].Internal(), "default" ); StartField( "enum" ); StartArray(); for( size_t i = 0; i < nStrings; i++ ) - AddItem( strings[i] ); + AddItem( strings[i].Internal() ); EndArray(); EndField(); EndStruct(); diff --git a/src/Shuttle.h b/src/Shuttle.h index 405cb9168..e7b656715 100644 --- a/src/Shuttle.h +++ b/src/Shuttle.h @@ -12,7 +12,9 @@ #define __AUDACITY_SHUTTLE__ #include "commands/CommandTargets.h" +#include "../include/audacity/IdentInterface.h" +class IdentInterfaceSymbol; class WrappedType; class Shuttle /* not final */ { @@ -76,7 +78,7 @@ public: virtual void Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl=1.0f ); virtual void Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin="", const wxString vmax="", const wxString vscl="" ); virtual void DefineEnum( int &var, const wxChar * key, const int vdefault, - const wxString strings[], size_t nStrings ); + const IdentInterfaceSymbol strings[], size_t nStrings ); }; /**************************************************************************//** @@ -94,7 +96,7 @@ public: void Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl ) override; void Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin, const wxString vmax, const wxString vscl ) override; void DefineEnum( int &var, const wxChar * key, const int vdefault, - const wxString strings[], size_t nStrings ) override; + const IdentInterfaceSymbol strings[], size_t nStrings ) override; }; /**************************************************************************//** @@ -118,7 +120,7 @@ public: void Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl ) override; void Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin, const wxString vmax, const wxString vscl ) override; void DefineEnum( int &var, const wxChar * key, const int vdefault, - const wxString strings[], size_t nStrings ) override; + const IdentInterfaceSymbol strings[], size_t nStrings ) override; }; /**************************************************************************//** @@ -139,7 +141,7 @@ public: void Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl ) override; void Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin, const wxString vmax, const wxString vscl ) override; void DefineEnum( int &var, const wxChar * key, const int vdefault, - const wxString strings[], size_t nStrings ) override; + const IdentInterfaceSymbol strings[], size_t nStrings ) override; }; @@ -176,7 +178,7 @@ public: const wxString WXUNUSED(vmin), const wxString WXUNUSED(vmax), const wxString WXUNUSED(vscl) ) override { var = vdefault;}; void DefineEnum( int &var, const wxChar * WXUNUSED(key), const int vdefault, - const wxString WXUNUSED(strings) [], size_t WXUNUSED( nStrings ) ) + const IdentInterfaceSymbol WXUNUSED(strings) [], size_t WXUNUSED( nStrings ) ) override { var = vdefault;}; }; diff --git a/src/commands/DragCommand.cpp b/src/commands/DragCommand.cpp index 02268c0d5..163aa267d 100644 --- a/src/commands/DragCommand.cpp +++ b/src/commands/DragCommand.cpp @@ -38,12 +38,12 @@ enum kCoordTypes nCoordTypes }; -static const wxString kCoordTypeStrings[nCoordTypes] = +static const IdentInterfaceSymbol kCoordTypeStrings[nCoordTypes] = { - XO("Panel"), - XO("App"), - XO("Track0"), - XO("Track1"), + { XO("Panel") }, + { XO("App") }, + { XO("Track0") }, + { XO("Track1") }, }; diff --git a/src/commands/GetInfoCommand.cpp b/src/commands/GetInfoCommand.cpp index dff75ba89..16bfc4594 100644 --- a/src/commands/GetInfoCommand.cpp +++ b/src/commands/GetInfoCommand.cpp @@ -55,17 +55,17 @@ enum { nTypes }; -static const wxString kTypes[nTypes] = +static const IdentInterfaceSymbol kTypes[nTypes] = { - XO("Commands"), - XO("Commands+"), - XO("Menus"), - XO("Preferences"), - XO("Tracks"), - XO("Clips"), - XO("Envelopes"), - XO("Labels"), - XO("Boxes") + { XO("Commands") }, + { XO("Commands+") }, + { XO("Menus") }, + { XO("Preferences") }, + { XO("Tracks") }, + { XO("Clips") }, + { XO("Envelopes") }, + { XO("Labels") }, + { XO("Boxes") }, }; enum { @@ -75,11 +75,11 @@ enum { nFormats }; -static const wxString kFormats[nFormats] = +static const IdentInterfaceSymbol kFormats[nFormats] = { - XO("JSON"), - XO("LISP"), - XO("Brief") + { XO("JSON") }, + { XO("LISP") }, + { XO("Brief") } }; diff --git a/src/commands/GetTrackInfoCommand.cpp b/src/commands/GetTrackInfoCommand.cpp index 521c58917..0d5c5e99b 100644 --- a/src/commands/GetTrackInfoCommand.cpp +++ b/src/commands/GetTrackInfoCommand.cpp @@ -26,11 +26,11 @@ #include "CommandContext.h" const int nTypes =3; -static const wxString kTypes[nTypes] = +static const IdentInterfaceSymbol kTypes[nTypes] = { - XO("Tracks"), - XO("Clips"), - XO("Labels") + { XO("Tracks") }, + { XO("Clips") }, + { XO("Labels") }, }; diff --git a/src/commands/ScreenshotCommand.cpp b/src/commands/ScreenshotCommand.cpp index 2ba539a47..7843cd264 100644 --- a/src/commands/ScreenshotCommand.cpp +++ b/src/commands/ScreenshotCommand.cpp @@ -46,48 +46,50 @@ small calculations of rectangles. #include "CommandContext.h" -static const wxString kCaptureWhatStrings[ ScreenshotCommand::nCaptureWhats ] = +static const IdentInterfaceSymbol +kCaptureWhatStrings[ ScreenshotCommand::nCaptureWhats ] = { - XO("Window"), - XO("Full_Window"), - XO("Window_Plus"), - XO("Fullscreen"), - XO("Toolbars"), - XO("Effects"), - XO("Scriptables"), - XO("Preferences"), - XO("Selectionbar"), - XO("Spectral_Selection"), - XO("Tools"), - XO("Transport"), - XO("Mixer"), - XO("Meter"), - XO("Play_Meter"), - XO("Record_Meter"), - XO("Edit"), - XO("Device"), - XO("Scrub"), - XO("Transcription"), - XO("Trackpanel"), - XO("Ruler"), - XO("Tracks"), - XO("First_Track"), - XO("First_Two_Tracks"), - XO("First_Three_Tracks"), - XO("First_Four_Tracks"), - XO("Second_Track"), - XO("Tracks_Plus"), - XO("First_Track_Plus"), - XO("All_Tracks"), - XO("All_Tracks_Plus"), + { XO("Window") }, + { XO("Full_Window") }, + { XO("Window_Plus") }, + { XO("Fullscreen") }, + { XO("Toolbars") }, + { XO("Effects") }, + { XO("Scriptables") }, + { XO("Preferences") }, + { XO("Selectionbar") }, + { XO("Spectral_Selection") }, + { XO("Tools") }, + { XO("Transport") }, + { XO("Mixer") }, + { XO("Meter") }, + { XO("Play_Meter") }, + { XO("Record_Meter") }, + { XO("Edit") }, + { XO("Device") }, + { XO("Scrub") }, + { XO("Transcription") }, + { XO("Trackpanel") }, + { XO("Ruler") }, + { XO("Tracks") }, + { XO("First_Track") }, + { XO("First_Two_Tracks") }, + { XO("First_Three_Tracks") }, + { XO("First_Four_Tracks") }, + { XO("Second_Track") }, + { XO("Tracks_Plus") }, + { XO("First_Track_Plus") }, + { XO("All_Tracks") }, + { XO("All_Tracks_Plus") }, }; -static const wxString kBackgroundStrings[ ScreenshotCommand::nBackgrounds ] = +static const IdentInterfaceSymbol +kBackgroundStrings[ ScreenshotCommand::nBackgrounds ] = { - XO("Blue"), - XO("White"), - XO("None") + { XO("Blue") }, + { XO("White") }, + { XO("None") }, }; @@ -627,7 +629,7 @@ void ScreenshotCommand::GetDerivedParams() // Build a suitable filename mFileName = MakeFileName(mFilePath, - GetCustomTranslation( kCaptureWhatStrings[ mCaptureMode ] )); + kCaptureWhatStrings[ mCaptureMode ].Translation() ); if (mBack == kBlue) { @@ -777,7 +779,7 @@ wxRect ScreenshotCommand::GetTrackRect( AudacityProject * pProj, TrackPanel * pa wxString ScreenshotCommand::WindowFileName(AudacityProject * proj, wxTopLevelWindow *w){ if (w != proj && w->GetTitle() != wxT("")) { mFileName = MakeFileName(mFilePath, - GetCustomTranslation( kCaptureWhatStrings[ mCaptureMode ] ) + + kCaptureWhatStrings[ mCaptureMode ].Translation() + (wxT("-") + w->GetTitle() + wxT("-"))); } return mFileName; diff --git a/src/commands/SelectCommand.cpp b/src/commands/SelectCommand.cpp index f21b6063d..414f5c59a 100644 --- a/src/commands/SelectCommand.cpp +++ b/src/commands/SelectCommand.cpp @@ -44,14 +44,14 @@ explicitly code all three. // Relative to project and relative to selection cover MOST options, since you can already // set a selection to a clip. const int nRelativeTos =6; -static const wxString kRelativeTo[nRelativeTos] = +static const IdentInterfaceSymbol kRelativeTo[nRelativeTos] = { - XO("Project Start"), - XO("Project"), - XO("Project End"), - XO("Selection Start"), - XO("Selection"), - XO("Selection End") + { XO("Project Start") }, + { XO("Project") }, + { XO("Project End") }, + { XO("Selection Start") }, + { XO("Selection") }, + { XO("Selection End") } }; bool SelectTimeCommand::DefineParams( ShuttleParams & S ){ @@ -167,12 +167,12 @@ bool SelectFrequenciesCommand::Apply(const CommandContext & context){ } const int nModes =3; -static const wxString kModes[nModes] = +static const IdentInterfaceSymbol kModes[nModes] = { /* i18n-hint verb, imperative */ - XO("Set"), - XO("Add"), - XO("Remove") + { XO("Set") }, + { XO("Add") }, + { XO("Remove") }, }; bool SelectTracksCommand::DefineParams( ShuttleParams & S ){ diff --git a/src/commands/SetClipCommand.cpp b/src/commands/SetClipCommand.cpp index 782b6575f..be6c3caba 100644 --- a/src/commands/SetClipCommand.cpp +++ b/src/commands/SetClipCommand.cpp @@ -38,12 +38,12 @@ enum kColours nColours }; -static const wxString kColourStrings[nColours] = +static const IdentInterfaceSymbol kColourStrings[nColours] = { - XO("Color0"), - XO("Color1"), - XO("Color2"), - XO("Color3"), + { XO("Color0") }, + { XO("Color1") }, + { XO("Color2") }, + { XO("Color3") }, }; diff --git a/src/commands/SetTrackInfoCommand.cpp b/src/commands/SetTrackInfoCommand.cpp index 0d4e8065a..f2c4df7d4 100644 --- a/src/commands/SetTrackInfoCommand.cpp +++ b/src/commands/SetTrackInfoCommand.cpp @@ -236,12 +236,12 @@ enum kColours nColours }; -static const wxString kColourStrings[nColours] = +static const IdentInterfaceSymbol kColourStrings[nColours] = { - XO("Color0"), - XO("Color1"), - XO("Color2"), - XO("Color3"), + { XO("Color0") }, + { XO("Color1") }, + { XO("Color2") }, + { XO("Color3") }, }; @@ -252,10 +252,10 @@ enum kDisplayTypes nDisplayTypes }; -static const wxString kDisplayTypeStrings[nDisplayTypes] = +static const IdentInterfaceSymbol kDisplayTypeStrings[nDisplayTypes] = { - XO("Waveform"), - XO("Spectrogram"), + { XO("Waveform") }, + { XO("Spectrogram") }, }; enum kScaleTypes @@ -265,10 +265,10 @@ enum kScaleTypes nScaleTypes }; -static const wxString kScaleTypeStrings[nScaleTypes] = +static const IdentInterfaceSymbol kScaleTypeStrings[nScaleTypes] = { - XO("Linear"), - XO("dB"), + { XO("Linear") }, + { XO("dB") }, }; enum kZoomTypes @@ -279,11 +279,11 @@ enum kZoomTypes nZoomTypes }; -static const wxString kZoomTypeStrings[nZoomTypes] = +static const IdentInterfaceSymbol kZoomTypeStrings[nZoomTypes] = { - XO("Reset"), - XO("Times2"), - XO("HalfWave"), + { XO("Reset") }, + { XO("Times2") }, + { XO("HalfWave") }, }; bool SetTrackVisualsCommand::DefineParams( ShuttleParams & S ){ diff --git a/src/effects/Distortion.cpp b/src/effects/Distortion.cpp index 69a9f0001..4e56be899 100644 --- a/src/effects/Distortion.cpp +++ b/src/effects/Distortion.cpp @@ -57,19 +57,19 @@ enum kTableType nTableTypes }; -static const wxString kTableTypeStrings[nTableTypes] = +static const IdentInterfaceSymbol kTableTypeStrings[nTableTypes] = { - XO("Hard Clipping"), - XO("Soft Clipping"), - XO("Soft Overdrive"), - XO("Medium Overdrive"), - XO("Hard Overdrive"), - XO("Cubic Curve (odd harmonics)"), - XO("Even Harmonics"), - XO("Expand and Compress"), - XO("Leveller"), - XO("Rectifier Distortion"), - XO("Hard Limiter 1413") + { XO("Hard Clipping") }, + { XO("Soft Clipping") }, + { XO("Soft Overdrive") }, + { XO("Medium Overdrive") }, + { XO("Hard Overdrive") }, + { XO("Cubic Curve (odd harmonics)") }, + { XO("Even Harmonics") }, + { XO("Expand and Compress") }, + { XO("Leveller") }, + { XO("Rectifier Distortion") }, + { XO("Hard Limiter 1413") } }; // Define keys, defaults, minimums, and maximums for the effect parameters @@ -293,7 +293,8 @@ bool EffectDistortion::DefineParams( ShuttleParams & S ){ bool EffectDistortion::GetAutomationParameters(CommandParameters & parms) { - parms.Write(KEY_TableTypeIndx, kTableTypeStrings[mParams.mTableChoiceIndx]); + parms.Write(KEY_TableTypeIndx, + kTableTypeStrings[mParams.mTableChoiceIndx].Internal()); parms.Write(KEY_DCBlock, mParams.mDCBlock); parms.Write(KEY_Threshold_dB, mParams.mThreshold_dB); parms.Write(KEY_NoiseFloor, mParams.mNoiseFloor); diff --git a/src/effects/Equalization.cpp b/src/effects/Equalization.cpp index fee675a80..1f190359b 100644 --- a/src/effects/Equalization.cpp +++ b/src/effects/Equalization.cpp @@ -144,12 +144,12 @@ enum kInterpolations #define EQCURVES_REVISION 0 #define UPDATE_ALL 0 // 0 = merge NEW presets only, 1 = Update all factory presets. -static const wxString kInterpStrings[nInterpolations] = +static const IdentInterfaceSymbol kInterpStrings[nInterpolations] = { /* i18n-hint: Technical term for a kind of curve.*/ - XO("B-spline"), - XO("Cosine"), - XO("Cubic") + { XO("B-spline") }, + { XO("Cosine") }, + { XO("Cubic") } }; static const double kThirdOct[] = diff --git a/src/effects/Noise.cpp b/src/effects/Noise.cpp index bd12cd78d..15752bba0 100644 --- a/src/effects/Noise.cpp +++ b/src/effects/Noise.cpp @@ -35,11 +35,11 @@ enum kTypes nTypes }; -static const wxString kTypeStrings[nTypes] = +static const IdentInterfaceSymbol kTypeStrings[nTypes] = { - XO("White"), - XO("Pink"), - XO("Brownian") + { XO("White") }, + { XO("Pink") }, + { XO("Brownian") } }; // Define keys, defaults, minimums, and maximums for the effect parameters @@ -169,7 +169,7 @@ bool EffectNoise::DefineParams( ShuttleParams & S ){ bool EffectNoise::GetAutomationParameters(CommandParameters & parms) { - parms.Write(KEY_Type, kTypeStrings[mType]); + parms.Write(KEY_Type, kTypeStrings[mType].Internal()); parms.Write(KEY_Amp, mAmp); return true; diff --git a/src/effects/ScienFilter.cpp b/src/effects/ScienFilter.cpp index 143b83e93..276dbbeb0 100644 --- a/src/effects/ScienFilter.cpp +++ b/src/effects/ScienFilter.cpp @@ -86,14 +86,14 @@ enum kTypes nTypes }; -static const wxString kTypeStrings[nTypes] = +static const IdentInterfaceSymbol kTypeStrings[nTypes] = { /*i18n-hint: Butterworth is the name of the person after whom the filter type is named.*/ - XO("Butterworth"), + { XO("Butterworth") }, /*i18n-hint: Chebyshev is the name of the person after whom the filter type is named.*/ - XO("Chebyshev Type I"), + { XO("Chebyshev Type I") }, /*i18n-hint: Chebyshev is the name of the person after whom the filter type is named.*/ - XO("Chebyshev Type II") + { XO("Chebyshev Type II") } }; enum kSubTypes @@ -103,10 +103,10 @@ enum kSubTypes nSubTypes }; -static const wxString kSubTypeStrings[nSubTypes] = +static const IdentInterfaceSymbol kSubTypeStrings[nSubTypes] = { - XO("Lowpass"), - XO("Highpass") + { XO("Lowpass") }, + { XO("Highpass") } }; // Define keys, defaults, minimums, and maximums for the effect parameters @@ -252,8 +252,8 @@ bool EffectScienFilter::DefineParams( ShuttleParams & S ){ bool EffectScienFilter::GetAutomationParameters(CommandParameters & parms) { - parms.Write(KEY_Type, kTypeStrings[mFilterType]); - parms.Write(KEY_Subtype, kSubTypeStrings[mFilterSubtype]); + parms.Write(KEY_Type, kTypeStrings[mFilterType].Internal()); + parms.Write(KEY_Subtype, kSubTypeStrings[mFilterSubtype].Internal()); parms.Write(KEY_Order, mOrder); parms.WriteFloat(KEY_Cutoff, mCutoff); parms.WriteFloat(KEY_Passband, mRipple); diff --git a/src/effects/ToneGen.cpp b/src/effects/ToneGen.cpp index 661fa9447..8dc8fd63b 100644 --- a/src/effects/ToneGen.cpp +++ b/src/effects/ToneGen.cpp @@ -39,10 +39,10 @@ enum kInterpolations nInterpolations }; -static const wxString kInterStrings[nInterpolations] = +static const IdentInterfaceSymbol kInterStrings[nInterpolations] = { - XO("Linear"), - XO("Logarithmic") + { XO("Linear") }, + { XO("Logarithmic") } }; enum kWaveforms @@ -54,12 +54,12 @@ enum kWaveforms nWaveforms }; -static const wxString kWaveStrings[nWaveforms] = +static const IdentInterfaceSymbol kWaveStrings[nWaveforms] = { - XO("Sine"), - XO("Square"), - XO("Sawtooth"), - XO("Square, no alias") + { XO("Sine") }, + { XO("Square") }, + { XO("Sawtooth") }, + { XO("Square, no alias") } }; // Define keys, defaults, minimums, and maximums for the effect parameters @@ -284,8 +284,8 @@ bool EffectToneGen::GetAutomationParameters(CommandParameters & parms) parms.Write(KEY_Amplitude, mAmplitude[0]); } - parms.Write(KEY_Waveform, kWaveStrings[mWaveform]); - parms.Write(KEY_Interp, kInterStrings[mInterpolation]); + parms.Write(KEY_Waveform, kWaveStrings[mWaveform].Internal()); + parms.Write(KEY_Interp, kInterStrings[mInterpolation].Internal()); return true; } diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index 629751a65..c7e67332a 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -38,23 +38,23 @@ class Enums { public: static const size_t NumDbChoices; static const double Db2Signal[]; - static const wxString DbChoices[]; + static const IdentInterfaceSymbol DbChoices[]; }; -const wxString Enums::DbChoices[] = { - wxT("-20 dB"), - wxT("-25 dB"), - wxT("-30 dB"), - wxT("-35 dB"), - wxT("-40 dB"), - wxT("-45 dB"), - wxT("-50 dB"), - wxT("-55 dB"), - wxT("-60 dB"), - wxT("-65 dB"), - wxT("-70 dB"), - wxT("-75 dB"), - wxT("-80 dB") +const IdentInterfaceSymbol Enums::DbChoices[] = { + { wxT("-20 dB") }, + { wxT("-25 dB") }, + { wxT("-30 dB") }, + { wxT("-35 dB") }, + { wxT("-40 dB") }, + { wxT("-45 dB") }, + { wxT("-50 dB") }, + { wxT("-55 dB") }, + { wxT("-60 dB") }, + { wxT("-65 dB") }, + { wxT("-70 dB") }, + { wxT("-75 dB") }, + { wxT("-80 dB") } }; const double Enums::Db2Signal[] = @@ -77,10 +77,10 @@ enum kActions nActions }; -static const wxString kActionStrings[nActions] = +static const IdentInterfaceSymbol kActionStrings[nActions] = { - XO("Truncate Detected Silence"), - XO("Compress Excess Silence") + { XO("Truncate Detected Silence") }, + { XO("Compress Excess Silence") } }; static CommandParameters::ObsoleteMap kObsoleteActions[] = { @@ -186,8 +186,8 @@ bool EffectTruncSilence::DefineParams( ShuttleParams & S ){ bool EffectTruncSilence::GetAutomationParameters(CommandParameters & parms) { - parms.Write(KEY_DbIndex, Enums::DbChoices[mTruncDbChoiceIndex]); - parms.Write(KEY_ActIndex, kActionStrings[mActionIndex]); + parms.Write(KEY_DbIndex, Enums::DbChoices[mTruncDbChoiceIndex].Internal()); + parms.Write(KEY_ActIndex, kActionStrings[mActionIndex].Internal()); parms.Write(KEY_Minimum, mInitialAllowedSilence); parms.Write(KEY_Truncate, mTruncLongestAllowedSilence); parms.Write(KEY_Compress, mSilenceCompressPercent); diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 5a640040a..ce925ffda 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -1481,16 +1481,16 @@ wxString NyquistEffect::EscapeString(const wxString & inStr) return str; } -wxArrayString NyquistEffect::ParseChoice(const wxString & text) +std::vector NyquistEffect::ParseChoice(const wxString & text) { + std::vector results; if (text[0] == wxT('(')) { // New style: expecting a Lisp-like list of strings Tokenizer tzer; tzer.Tokenize(text, true, 1, 1); auto &choices = tzer.tokens; for (auto &choice : choices) - choice = UnQuote(choice); - return choices; + results.push_back( { UnQuote(choice) } ); } else { // Old style: expecting a comma-separated list of @@ -1501,9 +1501,9 @@ wxArrayString NyquistEffect::ParseChoice(const wxString & text) wxT(",") ); for (auto &choice : choices) - choice = choice.Trim(true).Trim(false); - return choices; + results.push_back( { choice.Trim(true).Trim(false) } ); } + return results; } void NyquistEffect::RedirectOutput() @@ -2266,7 +2266,7 @@ bool NyquistEffect::TransferDataToEffectWindow() if (ctrl.type == NYQ_CTRL_CHOICE) { - const auto count = ctrl.choices.GetCount(); + const auto count = ctrl.choices.size(); int val = (int)ctrl.val; if (val < 0 || val >= (int)count) @@ -2430,7 +2430,8 @@ void NyquistEffect::BuildEffectWindow(ShuttleGui & S) { S.AddSpace(10, 10); - auto choices = LocalizedStrings(ctrl.choices); + auto choices = + LocalizedStrings(ctrl.choices.data(), ctrl.choices.size()); S.Id(ID_Choice + i).AddChoice( {}, wxT(""), &choices); } else diff --git a/src/effects/nyquist/Nyquist.h b/src/effects/nyquist/Nyquist.h index dab4c5b12..0836eaf4f 100644 --- a/src/effects/nyquist/Nyquist.h +++ b/src/effects/nyquist/Nyquist.h @@ -57,7 +57,7 @@ public: wxString var; wxString name; wxString label; - wxArrayString choices; // translatable + std::vector choices; wxString valStr; wxString lowStr; wxString highStr; @@ -143,7 +143,7 @@ private: static wxString NyquistToWxString(const char *nyqString); wxString EscapeString(const wxString & inStr); - static wxArrayString ParseChoice(const wxString & text); + static std::vector ParseChoice(const wxString & text); static int StaticGetCallback(float *buffer, int channel, long start, long len, long totlen, diff --git a/src/effects/vamp/VampEffect.cpp b/src/effects/vamp/VampEffect.cpp index 6ed5d360d..10ea1ceeb 100644 --- a/src/effects/vamp/VampEffect.cpp +++ b/src/effects/vamp/VampEffect.cpp @@ -180,7 +180,7 @@ bool VampEffect::GetAutomationParameters(CommandParameters & parms) mParameters[p].quantizeStep == 1.0 && !mParameters[p].valueNames.empty()) { - wxArrayString choices; + std::vector choices; int val = 0; for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++) @@ -227,7 +227,7 @@ bool VampEffect::SetAutomationParameters(CommandParameters & parms) mParameters[p].quantizeStep == 1.0 && !mParameters[p].valueNames.empty()) { - wxArrayString choices; + std::vector choices; int val; for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++) @@ -273,7 +273,7 @@ bool VampEffect::SetAutomationParameters(CommandParameters & parms) mParameters[p].quantizeStep == 1.0 && !mParameters[p].valueNames.empty()) { - wxArrayString choices; + std::vector choices; int val = 0; for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++)