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