From 70ec69fa3d2f77fb1930660160e03de17d1ca9ed Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 5 Jan 2019 19:16:13 -0500 Subject: [PATCH] Pass untranslated command labels to CommandManager... ... and deduce whether to exclude from macros inside NewIdentifier, simplifying argument lists further Also fix the localization of "..." added to names by PluginMenus.cpp --- lib-src/mod-null/ModNullCallback.cpp | 6 ++-- lib-src/mod-nyq-bench/NyqBench.cpp | 3 +- src/Internat.h | 3 ++ src/Menus.cpp | 7 ++--- src/commands/CommandManager.cpp | 28 ++++++++--------- src/commands/CommandManager.h | 33 ++++++++++---------- src/menus/ClipMenus.cpp | 10 +++--- src/menus/EditMenus.cpp | 2 -- src/menus/ExtraMenus.cpp | 2 -- src/menus/FileMenus.cpp | 2 -- src/menus/HelpMenus.cpp | 2 -- src/menus/LabelMenus.cpp | 18 +++++------ src/menus/NavigationMenus.cpp | 2 -- src/menus/PluginMenus.cpp | 46 +++++++++++++--------------- src/menus/SelectMenus.cpp | 34 ++++++++++---------- src/menus/ToolbarMenus.cpp | 2 -- src/menus/TrackMenus.cpp | 12 +++----- src/menus/TransportMenus.cpp | 6 ++-- src/menus/ViewMenus.cpp | 6 ++-- src/menus/WindowMenus.cpp | 2 -- src/tracks/ui/Scrubbing.cpp | 5 +-- 21 files changed, 100 insertions(+), 131 deletions(-) diff --git a/lib-src/mod-null/ModNullCallback.cpp b/lib-src/mod-null/ModNullCallback.cpp index 4ded39a1f..454d38847 100644 --- a/lib-src/mod-null/ModNullCallback.cpp +++ b/lib-src/mod-null/ModNullCallback.cpp @@ -162,14 +162,12 @@ int ModuleDispatch(ModuleDispatchTypes type) // We add two new commands into the Analyze menu. c->AddItem( _T("A New Command"), // internal name - _T("1st Experimental Command"), //displayed name - true, // has dialog + XO("1st Experimental Command..."), //displayed name ModNullFN( OnFuncFirst ), AudioIONotBusyFlag ); c->AddItem( _T("Another New Command"), - _T("2nd Experimental Command"), - false, // no dialog + XO("2nd Experimental Command"), ModNullFN( OnFuncSecond ), AudioIONotBusyFlag ); c->ClearCurrentMenu(); diff --git a/lib-src/mod-nyq-bench/NyqBench.cpp b/lib-src/mod-nyq-bench/NyqBench.cpp index e1c3720ec..dc1a06612 100755 --- a/lib-src/mod-nyq-bench/NyqBench.cpp +++ b/lib-src/mod-nyq-bench/NyqBench.cpp @@ -195,8 +195,7 @@ extern "C" c->SetCurrentMenu(pMenu); c->AddSeparator(); c->AddItem(wxT("NyqBench"), - _("&Nyquist Workbench..."), - true, + XO("&Nyquist Workbench..."), findme, static_cast(&NyqBench::ShowNyqBench), AudioIONotBusyFlag); diff --git a/src/Internat.h b/src/Internat.h index 5a51ef46e..cee41301c 100644 --- a/src/Internat.h +++ b/src/Internat.h @@ -30,6 +30,9 @@ extern AUDACITY_DLL_API const wxString& GetCustomSubstitution(const wxString& st // Marks strings for extraction only... use .Translate() to translate. #define XO(s) (TranslatableString{ wxT(s), {} }) +// XXO is used instead of XO in some places, for reasons that are +// no longer important. The two are equivalent now. +#define XXO(s) XO(s) #ifdef _ #undef _ diff --git a/src/Menus.cpp b/src/Menus.cpp index 59187c9c9..3b5a9823c 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -133,13 +133,12 @@ ConditionalGroupItem::~ConditionalGroupItem() {} SeparatorItem::~SeparatorItem() {} CommandItem::CommandItem(const CommandID &name_, - const wxString &label_in_, - bool excludeFromMacros_, + const TranslatableString &label_in_, CommandHandlerFinder finder_, CommandFunctorPointer callback_, CommandFlag flags_, const CommandManager::Options &options_) -: name{ name_ }, label_in{ label_in_ }, excludeFromMacros{ excludeFromMacros_ } +: name{ name_ }, label_in{ label_in_ } , finder{ finder_ }, callback{ callback_ } , flags{ flags_ }, options{ options_ } {} @@ -193,7 +192,7 @@ void VisitItem( AudacityProject &project, MenuTable::BaseItem *pItem ) if (const auto pCommand = dynamic_cast( pItem )) { manager.AddItem( - pCommand->name, pCommand->label_in, pCommand->excludeFromMacros, + pCommand->name, pCommand->label_in, pCommand->finder, pCommand->callback, pCommand->flags, pCommand->options ); diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 9f439b8cc..40df1e07d 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -504,8 +504,7 @@ void CommandManager::ClearCurrentMenu() void CommandManager::AddItem(const CommandID &name, - const wxChar *label_in, - bool excludeFromMacros, + const TranslatableString &label_in, CommandHandlerFinder finder, CommandFunctorPointer callback, CommandFlag flags, @@ -514,7 +513,7 @@ void CommandManager::AddItem(const CommandID &name, if (options.global) { wxASSERT( flags == AlwaysEnabledFlag ); AddGlobalCommand( - name, label_in, excludeFromMacros, finder, callback, options ); + name, label_in, finder, callback, options ); return; } @@ -523,7 +522,6 @@ void CommandManager::AddItem(const CommandID &name, CommandListEntry *entry = NewIdentifier(name, label_in, - excludeFromMacros, CurrentMenu(), finder, callback, {}, 0, 0, options); @@ -563,9 +561,7 @@ void CommandManager::AddItemList(const CommandID & name, for (size_t i = 0, cnt = nItems; i < cnt; i++) { CommandListEntry *entry = NewIdentifier(name, - items[i].Translation(), - // No means yet to specify excludeFromMacros ! - false, + items[i].Msgid(), CurrentMenu(), finder, callback, @@ -581,14 +577,13 @@ void CommandManager::AddItemList(const CommandID & name, } void CommandManager::AddGlobalCommand(const CommandID &name, - const wxChar *label_in, - bool excludeFromMacros, + const TranslatableString &label_in, CommandHandlerFinder finder, CommandFunctorPointer callback, const Options &options) { CommandListEntry *entry = - NewIdentifier(name, label_in, excludeFromMacros, NULL, finder, callback, + NewIdentifier(name, label_in, NULL, finder, callback, {}, 0, 0, options); entry->enabled = false; @@ -620,8 +615,7 @@ int CommandManager::NextIdentifier(int ID) ///If it does, a workaround may be to keep controls below wxID_LOWEST ///and keep menus above wxID_HIGHEST CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn, - const wxString & label, - bool excludeFromMacros, + const TranslatableString & labelIn, wxMenu *menu, CommandHandlerFinder finder, CommandFunctorPointer callback, @@ -630,8 +624,9 @@ CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn, int count, const Options &options) { - // if empty, new identifier's long label will be same as label, below: - const auto &longLabel = options.longName; + bool excludeFromMacros = + (options.allowInMacros == 0) || + ((options.allowInMacros == -1) && labelIn.MSGID().GET().Contains("...")); const wxString & accel = options.accel; bool bIsEffect = options.bIsEffect; @@ -642,6 +637,11 @@ CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn, else cookedParameter = parameter; + auto label = labelIn.Translation(); + + // if empty, new identifier's long label will be same as label, below: + const auto &longLabel = options.longName.Translation(); + const bool multi = !nameSuffix.empty(); auto name = nameIn; diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index 152bb8aa9..37fe8b0fe 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -147,7 +147,9 @@ class AUDACITY_DLL_API CommandManager final // a very common case Options( const wxChar *accel_ ) : accel{ accel_ } {} // A two-argument constructor for another common case - Options( const wxChar *accel_, const wxString &longName_ ) + Options( + const wxChar *accel_, + const TranslatableString &longName_ ) : accel{ accel_ }, longName{ longName_ } {} Options &&Accel (const wxChar *value) && @@ -158,20 +160,23 @@ class AUDACITY_DLL_API CommandManager final { bIsEffect = value; return std::move(*this); } Options &&Parameter (const CommandParameter &value) && { parameter = value; return std::move(*this); } - Options &&LongName (const wxString &value) && + Options &&LongName (const TranslatableString &value ) && { longName = value; return std::move(*this); } Options &&IsGlobal () && { global = true; return std::move(*this); } Options &&UseStrictFlags () && { useStrictFlags = true; return std::move(*this); } + Options &&AllowInMacros ( int value = 1 ) && + { allowInMacros = value; return std::move(*this); } const wxChar *accel{ wxT("") }; int check{ -1 }; // default value means it's not a check item bool bIsEffect{ false }; CommandParameter parameter{}; - wxString longName{}; // translated + TranslatableString longName{}; bool global{ false }; bool useStrictFlags{ false }; + int allowInMacros{ -1 }; // 0 = never, 1 = always, -1 = deduce from label }; void AddItemList(const CommandID & name, @@ -182,9 +187,8 @@ class AUDACITY_DLL_API CommandManager final CommandFlag flags, bool bIsEffect = false); - void AddItem(const CommandID &name, - const wxChar *label_in, - bool excludeFromMacros, + void AddItem(const CommandID & name, + const TranslatableString &label_in, CommandHandlerFinder finder, CommandFunctorPointer callback, CommandFlag flags, @@ -301,8 +305,7 @@ private: int NextIdentifier(int ID); CommandListEntry *NewIdentifier(const CommandID & name, - const wxString & label, - bool excludeFromMacros, + const TranslatableString & label, wxMenu *menu, CommandHandlerFinder finder, CommandFunctorPointer callback, @@ -312,8 +315,7 @@ private: const Options &options); void AddGlobalCommand(const CommandID &name, - const wxChar *label, - bool excludeFromMacros, + const TranslatableString &label, CommandHandlerFinder finder, CommandFunctorPointer callback, const Options &options = {}); @@ -489,8 +491,7 @@ namespace MenuTable { struct CommandItem final : BaseItem { CommandItem(const CommandID &name_, - const wxString &label_in_, - bool excludeFromMacros_, + const TranslatableString &label_in_, CommandHandlerFinder finder_, CommandFunctorPointer callback_, CommandFlag flags_, @@ -498,8 +499,7 @@ namespace MenuTable { ~CommandItem() override; const CommandID name; - const wxString label_in; - bool excludeFromMacros; + const TranslatableString label_in; CommandHandlerFinder finder; CommandFunctorPointer callback; CommandFlag flags; @@ -588,12 +588,13 @@ namespace MenuTable { { return std::make_unique(); } inline std::unique_ptr Command( - const CommandID &name, const wxString &label_in, bool excludeFromMacros, + const CommandID &name, + const TranslatableString &label_in, CommandHandlerFinder finder, CommandFunctorPointer callback, CommandFlag flags, const CommandManager::Options &options = {}) { return std::make_unique( - name, label_in, excludeFromMacros, finder, callback, flags, options + name, label_in, finder, callback, flags, options ); } diff --git a/src/menus/ClipMenus.cpp b/src/menus/ClipMenus.cpp index 731cd794e..a0413deaf 100644 --- a/src/menus/ClipMenus.cpp +++ b/src/menus/ClipMenus.cpp @@ -822,7 +822,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& ClipActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& ) { @@ -840,10 +839,10 @@ MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& ) WaveTracksExistFlag ), Command( wxT("SelPrevClip"), XXO("Previo&us Clip"), FN(OnSelectPrevClip), WaveTracksExistFlag, - Options{ wxT("Alt+,"), _("Select Previous Clip") } ), + Options{ wxT("Alt+,"), XO("Select Previous Clip") } ), Command( wxT("SelNextClip"), XXO("N&ext Clip"), FN(OnSelectNextClip), WaveTracksExistFlag, - Options{ wxT("Alt+."), _("Select Next Clip") } ) + Options{ wxT("Alt+."), XO("Select Next Clip") } ) ); } @@ -856,11 +855,11 @@ MenuTable::BaseItemPtr ClipCursorItems( AudacityProject & ) Command( wxT("CursPrevClipBoundary"), XXO("Pre&vious Clip Boundary"), FN(OnCursorPrevClipBoundary), WaveTracksExistFlag, - Options{}.LongName( _("Cursor to Prev Clip Boundary") ) ), + Options{}.LongName( XO("Cursor to Prev Clip Boundary") ) ), Command( wxT("CursNextClipBoundary"), XXO("Ne&xt Clip Boundary"), FN(OnCursorNextClipBoundary), WaveTracksExistFlag, - Options{}.LongName( _("Cursor to Next Clip Boundary") ) ) + Options{}.LongName( XO("Cursor to Next Clip Boundary") ) ) ); } @@ -876,5 +875,4 @@ MenuTable::BaseItemPtr ExtraClipCursorItems( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index 8685f9fd0..09efd465a 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -1002,7 +1002,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& EditActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr LabelEditMenus( AudacityProject &project ); @@ -1208,5 +1207,4 @@ RegisteredMenuItemEnabler selectWaveTracks2{{ selectAll }}; -#undef XXO #undef FN diff --git a/src/menus/ExtraMenus.cpp b/src/menus/ExtraMenus.cpp index a33dd61bf..fff58663b 100644 --- a/src/menus/ExtraMenus.cpp +++ b/src/menus/ExtraMenus.cpp @@ -136,7 +136,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& ExtraActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") // Imported menu item definitions @@ -254,5 +253,4 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project ) ); } -#undef XXO #undef FN diff --git a/src/menus/FileMenus.cpp b/src/menus/FileMenus.cpp index 91e3d51c8..ec973332f 100644 --- a/src/menus/FileMenus.cpp +++ b/src/menus/FileMenus.cpp @@ -545,7 +545,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& FileActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr FileMenu( AudacityProject& ) { @@ -696,5 +695,4 @@ MenuTable::BaseItemPtr FileMenu( AudacityProject& ) ); } -#undef XXO #undef FN diff --git a/src/menus/HelpMenus.cpp b/src/menus/HelpMenus.cpp index be161aa2c..0fc156e3f 100644 --- a/src/menus/HelpMenus.cpp +++ b/src/menus/HelpMenus.cpp @@ -411,7 +411,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& HelpActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr HelpMenu( AudacityProject & ) { @@ -475,5 +474,4 @@ MenuTable::BaseItemPtr HelpMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/LabelMenus.cpp b/src/menus/LabelMenus.cpp index 6e9a0ae52..a9e417d25 100644 --- a/src/menus/LabelMenus.cpp +++ b/src/menus/LabelMenus.cpp @@ -560,7 +560,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& LabelEditActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & ) { @@ -612,42 +611,42 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & ) Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels), AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag | TimeSelectedFlag | IsNotSyncLockedFlag, - Options{ wxT("Alt+X"), _("Label Cut") } ), + Options{ wxT("Alt+X"), XO("Label Cut") } ), Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels), AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag | TimeSelectedFlag | IsNotSyncLockedFlag, - Options{ wxT("Alt+K"), _("Label Delete") } ), + Options{ wxT("Alt+K"), XO("Label Delete") } ), Separator(), /* i18n-hint: (verb) A special way to cut out a piece of audio*/ Command( wxT("SplitCutLabels"), XXO("&Split Cut"), FN(OnSplitCutLabels), NotBusyLabelsAndWaveFlags, - Options{ wxT("Alt+Shift+X"), _("Label Split Cut") } ), + Options{ wxT("Alt+Shift+X"), XO("Label Split Cut") } ), Command( wxT("SplitDeleteLabels"), XXO("Sp&lit Delete"), FN(OnSplitDeleteLabels), NotBusyLabelsAndWaveFlags, - Options{ wxT("Alt+Shift+K"), _("Label Split Delete") } ), + Options{ wxT("Alt+Shift+K"), XO("Label Split Delete") } ), Separator(), Command( wxT("SilenceLabels"), XXO("Silence &Audio"), FN(OnSilenceLabels), NotBusyLabelsAndWaveFlags, - Options{ wxT("Alt+L"), _("Label Silence") } ), + Options{ wxT("Alt+L"), XO("Label Silence") } ), /* i18n-hint: (verb)*/ Command( wxT("CopyLabels"), XXO("Co&py"), FN(OnCopyLabels), NotBusyLabelsAndWaveFlags, - Options{ wxT("Alt+Shift+C"), _("Label Copy") } ), + Options{ wxT("Alt+Shift+C"), XO("Label Copy") } ), Separator(), /* i18n-hint: (verb)*/ Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels), AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag, - Options{ wxT("Alt+I"), _("Label Split") } ), + Options{ wxT("Alt+I"), XO("Label Split") } ), /* i18n-hint: (verb)*/ Command( wxT("JoinLabels"), XXO("&Join"), FN(OnJoinLabels), NotBusyLabelsAndWaveFlags, - Options{ wxT("Alt+J"), _("Label Join") } ), + Options{ wxT("Alt+J"), XO("Label Join") } ), Command( wxT("DisjoinLabels"), XXO("Detac&h at Silences"), FN(OnDisjoinLabels), NotBusyLabelsAndWaveFlags, wxT("Alt+Shift+J") ) @@ -656,5 +655,4 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & ) ); // two menus } -#undef XXO #undef FN diff --git a/src/menus/NavigationMenus.cpp b/src/menus/NavigationMenus.cpp index 41d42846b..c84261f2d 100644 --- a/src/menus/NavigationMenus.cpp +++ b/src/menus/NavigationMenus.cpp @@ -555,7 +555,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { #define FN(X) findCommandHandler, \ static_cast(& NavigationActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr ExtraGlobalCommands( AudacityProject & ) { @@ -603,5 +602,4 @@ MenuTable::BaseItemPtr ExtraFocusMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/PluginMenus.cpp b/src/menus/PluginMenus.cpp index 64593cf50..29f178aa9 100644 --- a/src/menus/PluginMenus.cpp +++ b/src/menus/PluginMenus.cpp @@ -227,9 +227,7 @@ void AddEffectMenuItems( auto name = plug->GetSymbol().Translation(); if (plug->IsEffectInteractive()) - { - name += wxT("..."); - } + name += _("..."); if (groupBy == wxT("groupby:publisher")) { @@ -297,9 +295,7 @@ void AddEffectMenuItems( auto name = plug->GetSymbol().Translation(); if (plug->IsEffectInteractive()) - { - name += wxT("..."); - } + name += _("..."); wxString group; if (groupBy == wxT("sortby:publisher:name")) @@ -587,7 +583,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& PluginActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") // ... buf first some more helper definitions, which use FN namespace { @@ -657,12 +652,13 @@ void AddEffectMenuItemGroup( wxString item = plug->GetPath(); if( plug->GetPluginType() == PluginTypeEffect ) temp2.push_back( Command( item, - item, - false, + TranslatableString{ item }, FN(OnEffect), flags[i], CommandManager::Options{} - .IsEffect().Parameter( plugs[i] ) ) ); + .IsEffect() + .AllowInMacros() + .Parameter( plugs[i] ) ) ); i++; } @@ -676,12 +672,13 @@ void AddEffectMenuItemGroup( PluginManager::Get().GetPlugin(plugs[i]); if( plug->GetPluginType() == PluginTypeEffect ) pTable->push_back( Command( names[i], - names[i], - false, + TranslatableString{ names[i] }, FN(OnEffect), flags[i], CommandManager::Options{} - .IsEffect().Parameter( plugs[i] ) ) ); + .IsEffect() + .AllowInMacros() + .Parameter( plugs[i] ) ) ); } if (max > 0) @@ -712,14 +709,17 @@ void AddEffectMenuItemGroup( MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags ) { MenuTable::BaseItemPtrs result; - auto names = MacroCommands::GetNames(); + auto names = MacroCommands::GetNames(); // these names come from filenames int i; for (i = 0; i < (int)names.size(); i++) { auto MacroID = ApplyMacroDialog::MacroIdOfName( names[i] ); result.push_back( MenuTable::Command( MacroID, - names[i], false, FN(OnApplyMacroDirectly), - flags ) ); + TranslatableString{ names[i] }, // file name verbatim + FN(OnApplyMacroDirectly), + flags, + CommandManager::Options{}.AllowInMacros() + ) ); } return result; @@ -765,13 +765,12 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project ) // the plugin manager...sorry! :-( const auto &lastEffect = MenuManager::Get(project).mLastEffect; - wxString buildMenuLabel; - if (!lastEffect.empty()) { - buildMenuLabel.Printf(_("Repeat %s"), - EffectManager::Get().GetCommandName(lastEffect)); - } + TranslatableString buildMenuLabel; + if (!lastEffect.empty()) + buildMenuLabel = XO("Repeat %s") + .Format( EffectManager::Get().GetCommandName(lastEffect) ); else - buildMenuLabel = _("Repeat Last Effect"); + buildMenuLabel = XO("Repeat Last Effect"); return Menu( _("Effe&ct"), #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT @@ -781,7 +780,7 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project ) Separator(), #endif - Command( wxT("RepeatLastEffect"), buildMenuLabel, false, + Command( wxT("RepeatLastEffect"), buildMenuLabel, FN(OnRepeatLastEffect), AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag | HasLastEffectFlag, @@ -978,5 +977,4 @@ MenuTable::BaseItemPtr ExtraScriptablesIIMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index 65d2f6edd..2db3ebe87 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -1025,7 +1025,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { #define FN(X) findCommandHandler, \ static_cast(& SelectActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& ); @@ -1038,10 +1037,10 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& ) return Menu( _("&Select"), Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll), TracksExistFlag, - Options{ wxT("Ctrl+A"), _("Select All") } ), + Options{ wxT("Ctrl+A"), XO("Select All") } ), Command( wxT("SelectNone"), XXO("&None"), FN(OnSelectNone), TracksExistFlag, - Options{ wxT("Ctrl+Shift+A"), _("Select None") } ), + Options{ wxT("Ctrl+Shift+A"), XO("Select None") } ), ////////////////////////////////////////////////////////////////////////// @@ -1056,7 +1055,7 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& ) Command( wxT("SelSyncLockTracks"), XXO("In All &Sync-Locked Tracks"), FN(OnSelectSyncLockSel), TracksSelectedFlag | IsSyncLockedFlag, - Options{ wxT("Ctrl+Shift+Y"), _("Select Sync-Locked") } ) + Options{ wxT("Ctrl+Shift+Y"), XO("Select Sync-Locked") } ) #endif ), @@ -1065,19 +1064,19 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& ) Menu( _("R&egion"), Command( wxT("SetLeftSelection"), XXO("&Left at Playback Position"), FN(OnSetLeftSelection), TracksExistFlag, - Options{ wxT("["), _("Set Selection Left at Play Position") } ), + Options{ wxT("["), XO("Set Selection Left at Play Position") } ), Command( wxT("SetRightSelection"), XXO("&Right at Playback Position"), FN(OnSetRightSelection), TracksExistFlag, - Options{ wxT("]"), _("Set Selection Right at Play Position") } ), + Options{ wxT("]"), XO("Set Selection Right at Play Position") } ), Command( wxT("SelTrackStartToCursor"), XXO("Track &Start to Cursor"), FN(OnSelectStartCursor), AlwaysEnabledFlag, - Options{ wxT("Shift+J"), _("Select Track Start to Cursor") } ), + Options{ wxT("Shift+J"), XO("Select Track Start to Cursor") } ), Command( wxT("SelCursorToTrackEnd"), XXO("Cursor to Track &End"), FN(OnSelectCursorEnd), AlwaysEnabledFlag, - Options{ wxT("Shift+K"), _("Select Cursor to Track End") } ), + Options{ wxT("Shift+K"), XO("Select Cursor to Track End") } ), Command( wxT("SelTrackStartToEnd"), XXO("Track Start to En&d"), FN(OnSelectTrackStartToEnd), AlwaysEnabledFlag, - Options{}.LongName( _("Select Track Start to End") ) ), + Options{}.LongName( XO("Select Track Start to End") ) ), Separator(), @@ -1120,7 +1119,7 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& ) Command( wxT("SelCursorStoredCursor"), XXO("Cursor to Stored &Cursor Position"), FN(OnSelectCursorStoredCursor), TracksExistFlag, - Options{}.LongName( _("Select Cursor to Stored") ) ), + Options{}.LongName( XO("Select Cursor to Stored") ) ), Command( wxT("StoreCursorPosition"), XXO("Store Cursor Pos&ition"), FN(OnCursorPositionStore), @@ -1132,7 +1131,7 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& ) Command( wxT("ZeroCross"), XXO("At &Zero Crossings"), FN(OnZeroCrossing), TracksSelectedFlag, - Options{ wxT("Z"), _("Select Zero Crossing") } ) + Options{ wxT("Z"), XO("Select Zero Crossing") } ) ); } @@ -1192,30 +1191,30 @@ MenuTable::BaseItemPtr CursorMenu( AudacityProject & ) Command( wxT("CursSelStart"), XXO("Selection Star&t"), FN(OnCursorSelStart), TimeSelectedFlag, - Options{}.LongName( _("Cursor to Selection Start") ) ), + Options{}.LongName( XO("Cursor to Selection Start") ) ), Command( wxT("CursSelEnd"), XXO("Selection En&d"), FN(OnCursorSelEnd), TimeSelectedFlag, - Options{}.LongName( _("Cursor to Selection End") ) ), + Options{}.LongName( XO("Cursor to Selection End") ) ), Command( wxT("CursTrackStart"), XXO("Track &Start"), FN(OnCursorTrackStart), TracksSelectedFlag, - Options{ wxT("J"), _("Cursor to Track Start") } ), + Options{ wxT("J"), XO("Cursor to Track Start") } ), Command( wxT("CursTrackEnd"), XXO("Track &End"), FN(OnCursorTrackEnd), TracksSelectedFlag, - Options{ wxT("K"), _("Cursor to Track End") } ), + Options{ wxT("K"), XO("Cursor to Track End") } ), ClipCursorItems, Command( wxT("CursProjectStart"), XXO("&Project Start"), FN(OnSkipStart), CanStopFlags, - Options{ wxT("Home"), _("Cursor to Project Start") } ), + Options{ wxT("Home"), XO("Cursor to Project Start") } ), Command( wxT("CursProjectEnd"), XXO("Project E&nd"), FN(OnSkipEnd), CanStopFlags, - Options{ wxT("End"), _("Cursor to Project End") } ) + Options{ wxT("End"), XO("Cursor to Project End") } ) ); } @@ -1265,5 +1264,4 @@ MenuTable::BaseItemPtr ExtraSeekMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/ToolbarMenus.cpp b/src/menus/ToolbarMenus.cpp index 3357000f4..36f95c387 100644 --- a/src/menus/ToolbarMenus.cpp +++ b/src/menus/ToolbarMenus.cpp @@ -244,7 +244,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& ToolbarActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ) { @@ -341,5 +340,4 @@ MenuTable::BaseItemPtr ExtraToolsMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/TrackMenus.cpp b/src/menus/TrackMenus.cpp index 59c396075..9b5968c53 100644 --- a/src/menus/TrackMenus.cpp +++ b/src/menus/TrackMenus.cpp @@ -1247,7 +1247,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& TrackActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr TracksMenu( AudacityProject & ) { @@ -1320,13 +1319,13 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & ) // require the tracks to be selected. Command( wxT("PanLeft"), XXO("&Left"), FN(OnPanLeft), TracksSelectedFlag, - Options{}.LongName( _("Pan Left") ) ), + Options{}.LongName( XO("Pan Left") ) ), Command( wxT("PanRight"), XXO("&Right"), FN(OnPanRight), TracksSelectedFlag, - Options{}.LongName( _("Pan Right") ) ), + Options{}.LongName( XO("Pan Right") ) ), Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter), TracksSelectedFlag, - Options{}.LongName( _("Pan Center") ) ) + Options{}.LongName( XO("Pan Center") ) ) ), Separator(), @@ -1381,10 +1380,10 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & ) Menu( _("S&ort Tracks"), Command( wxT("SortByTime"), XXO("By &Start Time"), FN(OnSortTime), TracksExistFlag, - Options{}.LongName( _("Sort by Time") ) ), + Options{}.LongName( XO("Sort by Time") ) ), Command( wxT("SortByName"), XXO("By &Name"), FN(OnSortName), TracksExistFlag, - Options{}.LongName( _("Sort by Name") ) ) + Options{}.LongName( XO("Sort by Name") ) ) ) ////////////////////////////////////////////////////////////////////////// @@ -1453,5 +1452,4 @@ MenuTable::BaseItemPtr ExtraTrackMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/TransportMenus.cpp b/src/menus/TransportMenus.cpp index cf409ddb2..cb24b7091 100644 --- a/src/menus/TransportMenus.cpp +++ b/src/menus/TransportMenus.cpp @@ -889,7 +889,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& TransportActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr CursorMenu( AudacityProject& ); @@ -931,8 +930,8 @@ MenuTable::BaseItemPtr TransportMenu( AudacityProject &project ) // We supply the name for the 'other one' here. // It should be bound to Shift+R (gPrefs->ReadBool("/GUI/PreferNewTrackRecord", false) - ? _("&Append Record") : _("Record &New Track")), - false, FN(OnRecord2ndChoice), CanStopFlags, + ? XO("&Append Record") : XO("Record &New Track")), + FN(OnRecord2ndChoice), CanStopFlags, wxT("Shift+R") ), @@ -1082,5 +1081,4 @@ MenuTable::BaseItemPtr ExtraPlayAtSpeedMenu( AudacityProject & ) ); } -#undef XXO #undef FN diff --git a/src/menus/ViewMenus.cpp b/src/menus/ViewMenus.cpp index e1b9a0ef7..6aa61e341 100644 --- a/src/menus/ViewMenus.cpp +++ b/src/menus/ViewMenus.cpp @@ -431,7 +431,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { #define FN(X) findCommandHandler, \ static_cast(& ViewActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ); @@ -474,10 +473,10 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& ) Menu( _("Sk&ip to"), Command( wxT("SkipSelStart"), XXO("Selection Sta&rt"), FN(OnGoSelStart), TimeSelectedFlag, - Options{ wxT("Ctrl+["), _("Skip to Selection Start") } ), + Options{ wxT("Ctrl+["), XO("Skip to Selection Start") } ), Command( wxT("SkipSelEnd"), XXO("Selection En&d"), FN(OnGoSelEnd), TimeSelectedFlag, - Options{ wxT("Ctrl+]"), _("Skip to Selection End") } ) + Options{ wxT("Ctrl+]"), XO("Skip to Selection End") } ) ), Separator(), @@ -550,5 +549,4 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& ) ); } -#undef XXO #undef FN diff --git a/src/menus/WindowMenus.cpp b/src/menus/WindowMenus.cpp index 7da14a17d..fa6058df6 100644 --- a/src/menus/WindowMenus.cpp +++ b/src/menus/WindowMenus.cpp @@ -118,7 +118,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) findCommandHandler, \ static_cast(& WindowActions::Handler :: X) -#define XXO(X) _(X), wxString{X}.Contains("...") MenuTable::BaseItemPtr WindowMenu( AudacityProject & ) { @@ -158,7 +157,6 @@ MenuTable::BaseItemPtr ExtraWindowItems( AudacityProject & ) ); } -#undef XXO #undef FN #else diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 758c737f6..a401dfd22 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -1032,10 +1032,7 @@ MenuTable::BaseItemPtr Scrubber::Menu() MenuTable::BaseItemPtrs ptrs; for (const auto &item : menuItems) { - ptrs.push_back( MenuTable::Command( - item.name, item.label.Translation(), - // No menu items yet have dialogs - false, + ptrs.push_back( MenuTable::Command( item.name, item.label, findme, static_cast(item.memFn), item.flags, item.StatusTest