1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 15:49:41 +02:00

Some more translatable string matters

This commit is contained in:
Paul Licameli 2020-05-23 13:56:10 -04:00
commit 29201bba1b
11 changed files with 164 additions and 110 deletions

View File

@ -20,6 +20,7 @@
#include <math.h>
#include <wx/intl.h>
#include <wx/simplebook.h>
#include <wx/valgen.h>
#include "../Internat.h"
@ -55,7 +56,7 @@ Param( DualMono, bool, wxT("DualMono"), true, false, tr
Param( NormalizeTo, int, wxT("NormalizeTo"), kLoudness , 0 , nAlgos-1, 1 );
BEGIN_EVENT_TABLE(EffectLoudness, wxEvtHandler)
EVT_CHOICE(wxID_ANY, EffectLoudness::OnUpdateUI)
EVT_CHOICE(wxID_ANY, EffectLoudness::OnChoice)
EVT_CHECKBOX(wxID_ANY, EffectLoudness::OnUpdateUI)
EVT_TEXT(wxID_ANY, EffectLoudness::OnUpdateUI)
END_EVENT_TABLE()
@ -300,29 +301,69 @@ void EffectLoudness::PopulateOrExchange(ShuttleGui & S)
S.AddVariableText(XO("&Normalize"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
S
mChoice = S
.Validator<wxGenericValidator>( &mNormalizeTo )
.AddChoice( {},
Msgids(kNormalizeTargetStrings, nAlgos),
mNormalizeTo
);
S.AddVariableText(XO("t&o"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
mNormalizeTo );
S
.AddVariableText(XO("t&o"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
mLevelTextCtrl = S
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
.Name( XO("Loudness LUFS") )
.Validator<FloatingPointValidator<double>>(
2, &mLUFSLevel,
NumValidatorStyle::ONE_TRAILING_ZERO,
MIN_LUFSLevel, MAX_LUFSLevel
)
.AddTextBox( {}, wxT(""), 10);
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
mLeveldB = S.AddVariableText(XO("LUFS"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
mWarning = S.AddVariableText( {}, false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
// Use a notebook so we can have two controls but show only one
// They target different variables with their validators
mBook =
S
.StartSimplebook();
{
S.StartNotebookPage({});
{
S.StartHorizontalLay(wxALIGN_LEFT, false);
{
S
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
.Name( XO("Loudness LUFS") )
.Validator<FloatingPointValidator<double>>(
2, &mLUFSLevel,
NumValidatorStyle::ONE_TRAILING_ZERO,
MIN_LUFSLevel, MAX_LUFSLevel )
.AddTextBox( {}, wxT(""), 10);
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
S
.AddVariableText(XO("LUFS"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
}
S.EndHorizontalLay();
}
S.EndNotebookPage();
S.StartNotebookPage({});
{
S.StartHorizontalLay(wxALIGN_LEFT, false);
{
S
.Name( XO("RMS dB") )
.Validator<FloatingPointValidator<double>>(
2, &mRMSLevel,
NumValidatorStyle::ONE_TRAILING_ZERO,
MIN_RMSLevel, MAX_RMSLevel )
.AddTextBox( {}, wxT(""), 10);
S
.AddVariableText(XO("dB"), false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
}
S.EndHorizontalLay();
}
S.EndNotebookPage();
}
S.EndSimplebook();
mWarning =
S
.AddVariableText( {}, false,
wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT);
}
S.EndHorizontalLay();
@ -341,8 +382,6 @@ void EffectLoudness::PopulateOrExchange(ShuttleGui & S)
S.EndMultiColumn();
}
S.EndVerticalLay();
// To ensure that the UpdateUI on creation sets the prompts correctly.
mGUINormalizeTo = !mNormalizeTo;
}
bool EffectLoudness::TransferDataToWindow()
@ -541,6 +580,14 @@ bool EffectLoudness::UpdateProgress()
return !TotalProgress(mProgressVal, mProgressMsg);
}
void EffectLoudness::OnChoice(wxCommandEvent & WXUNUSED(evt))
{
mChoice->GetValidator()->TransferFromWindow();
mBook->SetSelection( mNormalizeTo );
UpdateUI();
mDualMonoCheckBox->Enable(mNormalizeTo == kLoudness);
}
void EffectLoudness::OnUpdateUI(wxCommandEvent & WXUNUSED(evt))
{
UpdateUI();
@ -557,33 +604,4 @@ void EffectLoudness::UpdateUI()
}
mWarning->SetLabel(wxT(""));
EnableApply(true);
// Changing the prompts causes an unwanted UpdateUI event.
// This 'guard' stops that becoming an infinite recursion.
if (mNormalizeTo != mGUINormalizeTo)
{
mGUINormalizeTo = mNormalizeTo;
if(mNormalizeTo == kLoudness)
{
FloatingPointValidator<double> vldLevel(2, &mLUFSLevel, NumValidatorStyle::ONE_TRAILING_ZERO);
vldLevel.SetRange(MIN_LUFSLevel, MAX_LUFSLevel);
mLevelTextCtrl->SetValidator(vldLevel);
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
mLevelTextCtrl->SetName(_("Loudness LUFS"));
mLevelTextCtrl->SetValue(wxString::FromDouble(mLUFSLevel));
/* i18n-hint: LUFS is a particular method for measuring loudnesss */
mLeveldB->SetLabel(_("LUFS"));
}
else // RMS
{
FloatingPointValidator<double> vldLevel(2, &mRMSLevel, NumValidatorStyle::ONE_TRAILING_ZERO);
vldLevel.SetRange(MIN_RMSLevel, MAX_RMSLevel);
mLevelTextCtrl->SetValidator(vldLevel);
mLevelTextCtrl->SetName(_("RMS dB"));
mLevelTextCtrl->SetValue(wxString::FromDouble(mRMSLevel));
mLeveldB->SetLabel(_("dB"));
}
}
mDualMonoCheckBox->Enable(mNormalizeTo == kLoudness);
}

View File

@ -22,6 +22,8 @@
#include "Biquad.h"
#include "EBUR128.h"
class wxChoice;
class wxSimplebook;
class ShuttleGui;
class EffectLoudness final : public Effect
@ -72,6 +74,7 @@ private:
sampleCount pos, size_t len);
bool UpdateProgress();
void OnChoice(wxCommandEvent & evt);
void OnUpdateUI(wxCommandEvent & evt);
void UpdateUI();
@ -81,7 +84,6 @@ private:
double mRMSLevel;
bool mDualMono;
int mNormalizeTo;
int mGUINormalizeTo;
double mCurT0;
double mCurT1;
@ -96,8 +98,8 @@ private:
float mRMS[2];
std::unique_ptr<EBUR128> mLoudnessProcessor;
wxTextCtrl *mLevelTextCtrl;
wxStaticText *mLeveldB;
wxSimplebook *mBook;
wxChoice *mChoice;
wxStaticText *mWarning;
wxCheckBox *mStereoIndCheckBox;
wxCheckBox *mDualMonoCheckBox;

View File

@ -157,7 +157,9 @@ enum {
///////////////////////////////////////////////////////////////////////////////
// Table class
class NoteTrackVRulerMenuTable : public PopupMenuTable
class NoteTrackVRulerMenuTable
: public PopupMenuTable
, private PrefsListener
{
NoteTrackVRulerMenuTable()
: PopupMenuTable{ "NoteTrackVRuler" }
@ -205,6 +207,12 @@ private:
}
void InitUserData(void *pUserData) override;
void UpdatePrefs() override
{
// Because labels depend on advanced vertical zoom setting
PopupMenuTable::Clear();
}
};
NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance()
@ -248,15 +256,25 @@ void NoteTrackVRulerMenuTable::OnZoom( int iZoomCode ){
BEGIN_POPUP_MENU(NoteTrackVRulerMenuTable)
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
BeginSection( "Zoom" );
BeginSection( "Basic" );
AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset\tShift-Right-Click"), POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "Reset", OnZoomResetID,
MakeLabel( XXO("Zoom Reset"), bVZoom, XXO("Shift-Right-Click")),
POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "Max", OnZoomMaxID, XXO("Max Zoom"), POPUP_MENU_FN( OnZoomMax ) );
EndSection();
BeginSection( "InOut" );
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) );
AppendItem( "In", OnZoomInVerticalID,
MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ),
POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID,
MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ),
POPUP_MENU_FN( OnZoomOutVertical ) );
EndSection();
EndSection();
@ -285,9 +303,6 @@ UIHandle::Result NoteTrackVZoomHandle::Release
const bool rightUp = event.RightUp();
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Popup menu...
if (
rightUp &&
@ -301,25 +316,13 @@ UIHandle::Result NoteTrackVZoomHandle::Release
(PopupMenuTable *) &NoteTrackVRulerMenuTable::Instance();
auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data);
// Accelerators only if zooming enabled.
if( !bVZoom )
{
wxMenuItemList & L = pMenu->GetMenuItems();
// let's iterate over the list in STL syntax
wxMenuItemList::iterator iter;
for (iter = L.begin(); iter != L.end(); ++iter)
{
wxMenuItem *pItem = *iter;
// Remove accelerator, if any.
pItem->SetItemLabel( (pItem->GetItemLabel() + "\t" ).BeforeFirst('\t') );
}
}
pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result;
}
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
bVZoom &= event.GetId() != kCaptureLostEventId;
if( !bVZoom )
return RefreshAll;

View File

@ -290,14 +290,21 @@ EndSection();
BeginSection( "Zoom" );
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
AppendItem( "Reset", OnZoomResetID, XXO("Zoom Reset"),
POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "Fit", OnZoomFitVerticalID, XXO("Zoom to Fit\tShift-Right-Click"),
POPUP_MENU_FN( OnZoomFitVertical ) );
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"),
POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"),
POPUP_MENU_FN( OnZoomOutVertical ) );
AppendItem( "Fit", OnZoomFitVerticalID,
MakeLabel( XXO("Zoom to Fit"), bVZoom, XXO("Shift-Right-Click") ),
POPUP_MENU_FN( OnZoomFitVertical ) );
AppendItem( "In", OnZoomInVerticalID,
MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ),
POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID,
MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ),
POPUP_MENU_FN( OnZoomOutVertical ) );
EndSection();
END_POPUP_MENU()

View File

@ -20,7 +20,6 @@ Paul Licameli split from TrackPanel.cpp
#include "WaveTrackViewConstants.h"
#include "../../../../AudioIOBase.h"
#include "../../../../CellularPanel.h"
#include "../../../../Menus.h"
#include "../../../../Project.h"
#include "../../../../ProjectAudioIO.h"
#include "../../../../ProjectHistory.h"

View File

@ -52,6 +52,12 @@ void WaveTrackVRulerMenuTable::OnZoom(
mpData->result = UpdateVRuler | RefreshAll;
}
void WaveTrackVRulerMenuTable::UpdatePrefs()
{
// Because labels depend on advanced vertical zoom setting
PopupMenuTable::Clear();
}
///////////////////////////////////////////////////////////////////////////////
HitTestPreview WaveTrackVZoomHandle::HitPreview(const wxMouseState &state)
@ -105,10 +111,7 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease(
const bool rightUp = event.RightUp();
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Popup menu...
// Popup menu...
using namespace WaveTrackViewConstants;
if (
rightUp &&
@ -119,27 +122,13 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease(
pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom };
auto pMenu = PopupMenuTable::BuildMenu(pParent, &table, &data);
// Accelerators only if zooming enabled.
if( !bVZoom )
{
wxMenuItemList & L = pMenu->GetMenuItems();
// let's iterate over the list in STL syntax
wxMenuItemList::iterator iter;
for (iter = L.begin(); iter != L.end(); ++iter)
{
wxMenuItem *pItem = *iter;
// Remove accelerator, if any.
pItem->SetItemLabel( (pItem->GetItemLabel() + "\t" ).BeforeFirst('\t') );
}
}
pParent->PopupMenu(pMenu.get(), event.m_x, event.m_y);
return data.result;
}
else{
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
// Ignore Capture Lost event
bVZoom &= event.GetId() != kCaptureLostEventId;
// shiftDown | rightUp | ZoomKind

View File

@ -16,7 +16,7 @@ class PopupMenuTable;
class WaveTrack;
#include "WaveTrackViewConstants.h"
#include "../../../../UIHandle.h"
#include "../../../../Prefs.h"
namespace WaveTrackVZoomHandle
{
@ -53,7 +53,9 @@ namespace WaveTrackVZoomHandle
#include "../../../../widgets/PopupMenuTable.h" // to inherit
class WaveTrackVRulerMenuTable : public PopupMenuTable
class WaveTrackVRulerMenuTable
: public PopupMenuTable
, private PrefsListener
{
public:
struct InitMenuData
@ -98,6 +100,8 @@ protected:
{ OnZoom( WaveTrackViewConstants::kZoomIn );};
void OnZoomOutVertical(wxCommandEvent&)
{ OnZoom( WaveTrackViewConstants::kZoomOut );};
void UpdatePrefs() override;
};
enum {

View File

@ -265,6 +265,9 @@ PopupMenuTable &WaveformVRulerMenuTable::Instance()
}
BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
// Accelerators only if zooming enabled.
bool bVZoom;
gPrefs->Read(wxT("/GUI/VerticalZooming"), &bVZoom, false);
BeginSection( "Scales" );
{
@ -289,8 +292,11 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
BeginSection( "Zoom" );
BeginSection( "Basic" );
AppendItem( "Reset", OnZoomFitVerticalID, XXO("Zoom Reset\tShift-Right-Click"), POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "TimesHalf", OnZoomDiv2ID, XXO("Zoom x1/2"), POPUP_MENU_FN( OnZoomDiv2Vertical ) );
AppendItem( "Reset", OnZoomFitVerticalID,
MakeLabel( XXO("Zoom Reset"), bVZoom, XXO("Shift-Right-Click") ),
POPUP_MENU_FN( OnZoomReset ) );
AppendItem( "TimesHalf", OnZoomDiv2ID, XXO("Zoom x1/2"),
POPUP_MENU_FN( OnZoomDiv2Vertical ) );
AppendItem( "TimesTwo", OnZoomTimes2ID, XXO("Zoom x2"), POPUP_MENU_FN( OnZoomTimes2Vertical ) );
#ifdef EXPERIMENTAL_HALF_WAVE
@ -299,8 +305,12 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
EndSection();
BeginSection( "InOut" );
AppendItem( "In", OnZoomInVerticalID, XXO("Zoom In\tLeft-Click/Left-Drag"), POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID, XXO("Zoom Out\tShift-Left-Click"), POPUP_MENU_FN( OnZoomOutVertical ) );
AppendItem( "In", OnZoomInVerticalID,
MakeLabel( XXO("Zoom In"), bVZoom, XXO("Left-Click/Left-Drag") ),
POPUP_MENU_FN( OnZoomInVertical ) );
AppendItem( "Out", OnZoomOutVerticalID,
MakeLabel( XXO("Zoom Out"), bVZoom, XXO("Shift-Left-Click") ),
POPUP_MENU_FN( OnZoomOutVertical ) );
EndSection();
EndSection();

View File

@ -78,7 +78,9 @@ enum
OnMoveBottomID,
};
class TrackMenuTable : public PopupMenuTable
class TrackMenuTable
: public PopupMenuTable
, private PrefsListener
{
TrackMenuTable()
: PopupMenuTable{ "Track" }
@ -100,6 +102,12 @@ private:
}
CommonTrackControls::InitMenuData *mpData{};
void UpdatePrefs() override
{
// Because labels depend on keyboard preferences
PopupMenuTable::Clear();
}
};
TrackMenuTable &TrackMenuTable::Instance()

View File

@ -17,7 +17,6 @@ Paul Licameli split from TrackPanel.cpp
#include "../../AudioIO.h"
#include "../../CommonCommandFlags.h"
#include "../../Menus.h"
#include "../../Project.h"
#include "../../ProjectAudioIO.h"
#include "../../ProjectAudioManager.h"

View File

@ -141,6 +141,11 @@ public:
return mTop;
}
void Clear()
{
mTop.reset();
}
// Forms a computed item, which may be omitted when function returns null
// and thus can be a conditional item
template< typename Table >
@ -162,6 +167,16 @@ private:
const Registry::Placement &placement, Registry::BaseItemPtr pItem );
protected:
// This convenience function composes a label, with the following optional
// part put in parentheses if useExtra is true
static TranslatableString MakeLabel( const TranslatableString &label,
bool useExtra, const TranslatableString &extra )
{
return useExtra
? XXO("%s (%s)").Format( label, extra )
: label;
}
virtual void Populate() = 0;
// To be used in implementations of Populate():