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

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
This commit is contained in:
Paul Licameli 2019-01-05 19:16:13 -05:00
parent 5cbafc6086
commit 70ec69fa3d
21 changed files with 100 additions and 131 deletions

View File

@ -162,14 +162,12 @@ int ModuleDispatch(ModuleDispatchTypes type)
// We add two new commands into the Analyze menu. // We add two new commands into the Analyze menu.
c->AddItem( c->AddItem(
_T("A New Command"), // internal name _T("A New Command"), // internal name
_T("1st Experimental Command"), //displayed name XO("1st Experimental Command..."), //displayed name
true, // has dialog
ModNullFN( OnFuncFirst ), ModNullFN( OnFuncFirst ),
AudioIONotBusyFlag ); AudioIONotBusyFlag );
c->AddItem( c->AddItem(
_T("Another New Command"), _T("Another New Command"),
_T("2nd Experimental Command"), XO("2nd Experimental Command"),
false, // no dialog
ModNullFN( OnFuncSecond ), ModNullFN( OnFuncSecond ),
AudioIONotBusyFlag ); AudioIONotBusyFlag );
c->ClearCurrentMenu(); c->ClearCurrentMenu();

View File

@ -195,8 +195,7 @@ extern "C"
c->SetCurrentMenu(pMenu); c->SetCurrentMenu(pMenu);
c->AddSeparator(); c->AddSeparator();
c->AddItem(wxT("NyqBench"), c->AddItem(wxT("NyqBench"),
_("&Nyquist Workbench..."), XO("&Nyquist Workbench..."),
true,
findme, findme,
static_cast<CommandFunctorPointer>(&NyqBench::ShowNyqBench), static_cast<CommandFunctorPointer>(&NyqBench::ShowNyqBench),
AudioIONotBusyFlag); AudioIONotBusyFlag);

View File

@ -30,6 +30,9 @@ extern AUDACITY_DLL_API const wxString& GetCustomSubstitution(const wxString& st
// Marks strings for extraction only... use .Translate() to translate. // Marks strings for extraction only... use .Translate() to translate.
#define XO(s) (TranslatableString{ wxT(s), {} }) #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 _ #ifdef _
#undef _ #undef _

View File

@ -133,13 +133,12 @@ ConditionalGroupItem::~ConditionalGroupItem() {}
SeparatorItem::~SeparatorItem() {} SeparatorItem::~SeparatorItem() {}
CommandItem::CommandItem(const CommandID &name_, CommandItem::CommandItem(const CommandID &name_,
const wxString &label_in_, const TranslatableString &label_in_,
bool excludeFromMacros_,
CommandHandlerFinder finder_, CommandHandlerFinder finder_,
CommandFunctorPointer callback_, CommandFunctorPointer callback_,
CommandFlag flags_, CommandFlag flags_,
const CommandManager::Options &options_) const CommandManager::Options &options_)
: name{ name_ }, label_in{ label_in_ }, excludeFromMacros{ excludeFromMacros_ } : name{ name_ }, label_in{ label_in_ }
, finder{ finder_ }, callback{ callback_ } , finder{ finder_ }, callback{ callback_ }
, flags{ flags_ }, options{ options_ } , flags{ flags_ }, options{ options_ }
{} {}
@ -193,7 +192,7 @@ void VisitItem( AudacityProject &project, MenuTable::BaseItem *pItem )
if (const auto pCommand = if (const auto pCommand =
dynamic_cast<CommandItem*>( pItem )) { dynamic_cast<CommandItem*>( pItem )) {
manager.AddItem( manager.AddItem(
pCommand->name, pCommand->label_in, pCommand->excludeFromMacros, pCommand->name, pCommand->label_in,
pCommand->finder, pCommand->callback, pCommand->finder, pCommand->callback,
pCommand->flags, pCommand->options pCommand->flags, pCommand->options
); );

View File

@ -504,8 +504,7 @@ void CommandManager::ClearCurrentMenu()
void CommandManager::AddItem(const CommandID &name, void CommandManager::AddItem(const CommandID &name,
const wxChar *label_in, const TranslatableString &label_in,
bool excludeFromMacros,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
CommandFlag flags, CommandFlag flags,
@ -514,7 +513,7 @@ void CommandManager::AddItem(const CommandID &name,
if (options.global) { if (options.global) {
wxASSERT( flags == AlwaysEnabledFlag ); wxASSERT( flags == AlwaysEnabledFlag );
AddGlobalCommand( AddGlobalCommand(
name, label_in, excludeFromMacros, finder, callback, options ); name, label_in, finder, callback, options );
return; return;
} }
@ -523,7 +522,6 @@ void CommandManager::AddItem(const CommandID &name,
CommandListEntry *entry = CommandListEntry *entry =
NewIdentifier(name, NewIdentifier(name,
label_in, label_in,
excludeFromMacros,
CurrentMenu(), finder, callback, CurrentMenu(), finder, callback,
{}, 0, 0, {}, 0, 0,
options); options);
@ -563,9 +561,7 @@ void CommandManager::AddItemList(const CommandID & name,
for (size_t i = 0, cnt = nItems; i < cnt; i++) { for (size_t i = 0, cnt = nItems; i < cnt; i++) {
CommandListEntry *entry = CommandListEntry *entry =
NewIdentifier(name, NewIdentifier(name,
items[i].Translation(), items[i].Msgid(),
// No means yet to specify excludeFromMacros !
false,
CurrentMenu(), CurrentMenu(),
finder, finder,
callback, callback,
@ -581,14 +577,13 @@ void CommandManager::AddItemList(const CommandID & name,
} }
void CommandManager::AddGlobalCommand(const CommandID &name, void CommandManager::AddGlobalCommand(const CommandID &name,
const wxChar *label_in, const TranslatableString &label_in,
bool excludeFromMacros,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
const Options &options) const Options &options)
{ {
CommandListEntry *entry = CommandListEntry *entry =
NewIdentifier(name, label_in, excludeFromMacros, NULL, finder, callback, NewIdentifier(name, label_in, NULL, finder, callback,
{}, 0, 0, options); {}, 0, 0, options);
entry->enabled = false; 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 ///If it does, a workaround may be to keep controls below wxID_LOWEST
///and keep menus above wxID_HIGHEST ///and keep menus above wxID_HIGHEST
CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn, CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn,
const wxString & label, const TranslatableString & labelIn,
bool excludeFromMacros,
wxMenu *menu, wxMenu *menu,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
@ -630,8 +624,9 @@ CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn,
int count, int count,
const Options &options) const Options &options)
{ {
// if empty, new identifier's long label will be same as label, below: bool excludeFromMacros =
const auto &longLabel = options.longName; (options.allowInMacros == 0) ||
((options.allowInMacros == -1) && labelIn.MSGID().GET().Contains("..."));
const wxString & accel = options.accel; const wxString & accel = options.accel;
bool bIsEffect = options.bIsEffect; bool bIsEffect = options.bIsEffect;
@ -642,6 +637,11 @@ CommandListEntry *CommandManager::NewIdentifier(const CommandID & nameIn,
else else
cookedParameter = parameter; 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(); const bool multi = !nameSuffix.empty();
auto name = nameIn; auto name = nameIn;

View File

@ -147,7 +147,9 @@ class AUDACITY_DLL_API CommandManager final
// a very common case // a very common case
Options( const wxChar *accel_ ) : accel{ accel_ } {} Options( const wxChar *accel_ ) : accel{ accel_ } {}
// A two-argument constructor for another common case // 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_ } {} : accel{ accel_ }, longName{ longName_ } {}
Options &&Accel (const wxChar *value) && Options &&Accel (const wxChar *value) &&
@ -158,20 +160,23 @@ class AUDACITY_DLL_API CommandManager final
{ bIsEffect = value; return std::move(*this); } { bIsEffect = value; return std::move(*this); }
Options &&Parameter (const CommandParameter &value) && Options &&Parameter (const CommandParameter &value) &&
{ parameter = value; return std::move(*this); } { parameter = value; return std::move(*this); }
Options &&LongName (const wxString &value) && Options &&LongName (const TranslatableString &value ) &&
{ longName = value; return std::move(*this); } { longName = value; return std::move(*this); }
Options &&IsGlobal () && Options &&IsGlobal () &&
{ global = true; return std::move(*this); } { global = true; return std::move(*this); }
Options &&UseStrictFlags () && Options &&UseStrictFlags () &&
{ useStrictFlags = true; return std::move(*this); } { useStrictFlags = true; return std::move(*this); }
Options &&AllowInMacros ( int value = 1 ) &&
{ allowInMacros = value; return std::move(*this); }
const wxChar *accel{ wxT("") }; const wxChar *accel{ wxT("") };
int check{ -1 }; // default value means it's not a check item int check{ -1 }; // default value means it's not a check item
bool bIsEffect{ false }; bool bIsEffect{ false };
CommandParameter parameter{}; CommandParameter parameter{};
wxString longName{}; // translated TranslatableString longName{};
bool global{ false }; bool global{ false };
bool useStrictFlags{ false }; bool useStrictFlags{ false };
int allowInMacros{ -1 }; // 0 = never, 1 = always, -1 = deduce from label
}; };
void AddItemList(const CommandID & name, void AddItemList(const CommandID & name,
@ -182,9 +187,8 @@ class AUDACITY_DLL_API CommandManager final
CommandFlag flags, CommandFlag flags,
bool bIsEffect = false); bool bIsEffect = false);
void AddItem(const CommandID &name, void AddItem(const CommandID & name,
const wxChar *label_in, const TranslatableString &label_in,
bool excludeFromMacros,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
CommandFlag flags, CommandFlag flags,
@ -301,8 +305,7 @@ private:
int NextIdentifier(int ID); int NextIdentifier(int ID);
CommandListEntry *NewIdentifier(const CommandID & name, CommandListEntry *NewIdentifier(const CommandID & name,
const wxString & label, const TranslatableString & label,
bool excludeFromMacros,
wxMenu *menu, wxMenu *menu,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
@ -312,8 +315,7 @@ private:
const Options &options); const Options &options);
void AddGlobalCommand(const CommandID &name, void AddGlobalCommand(const CommandID &name,
const wxChar *label, const TranslatableString &label,
bool excludeFromMacros,
CommandHandlerFinder finder, CommandHandlerFinder finder,
CommandFunctorPointer callback, CommandFunctorPointer callback,
const Options &options = {}); const Options &options = {});
@ -489,8 +491,7 @@ namespace MenuTable {
struct CommandItem final : BaseItem { struct CommandItem final : BaseItem {
CommandItem(const CommandID &name_, CommandItem(const CommandID &name_,
const wxString &label_in_, const TranslatableString &label_in_,
bool excludeFromMacros_,
CommandHandlerFinder finder_, CommandHandlerFinder finder_,
CommandFunctorPointer callback_, CommandFunctorPointer callback_,
CommandFlag flags_, CommandFlag flags_,
@ -498,8 +499,7 @@ namespace MenuTable {
~CommandItem() override; ~CommandItem() override;
const CommandID name; const CommandID name;
const wxString label_in; const TranslatableString label_in;
bool excludeFromMacros;
CommandHandlerFinder finder; CommandHandlerFinder finder;
CommandFunctorPointer callback; CommandFunctorPointer callback;
CommandFlag flags; CommandFlag flags;
@ -588,12 +588,13 @@ namespace MenuTable {
{ return std::make_unique<SeparatorItem>(); } { return std::make_unique<SeparatorItem>(); }
inline std::unique_ptr<CommandItem> Command( inline std::unique_ptr<CommandItem> Command(
const CommandID &name, const wxString &label_in, bool excludeFromMacros, const CommandID &name,
const TranslatableString &label_in,
CommandHandlerFinder finder, CommandFunctorPointer callback, CommandHandlerFinder finder, CommandFunctorPointer callback,
CommandFlag flags, const CommandManager::Options &options = {}) CommandFlag flags, const CommandManager::Options &options = {})
{ {
return std::make_unique<CommandItem>( return std::make_unique<CommandItem>(
name, label_in, excludeFromMacros, finder, callback, flags, options name, label_in, finder, callback, flags, options
); );
} }

View File

@ -822,7 +822,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& ClipActions::Handler :: X) static_cast<CommandFunctorPointer>(& ClipActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& ) MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& )
{ {
@ -840,10 +839,10 @@ MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& )
WaveTracksExistFlag ), WaveTracksExistFlag ),
Command( wxT("SelPrevClip"), XXO("Previo&us Clip"), Command( wxT("SelPrevClip"), XXO("Previo&us Clip"),
FN(OnSelectPrevClip), WaveTracksExistFlag, 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), Command( wxT("SelNextClip"), XXO("N&ext Clip"), FN(OnSelectNextClip),
WaveTracksExistFlag, 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"), Command( wxT("CursPrevClipBoundary"), XXO("Pre&vious Clip Boundary"),
FN(OnCursorPrevClipBoundary), FN(OnCursorPrevClipBoundary),
WaveTracksExistFlag, WaveTracksExistFlag,
Options{}.LongName( _("Cursor to Prev Clip Boundary") ) ), Options{}.LongName( XO("Cursor to Prev Clip Boundary") ) ),
Command( wxT("CursNextClipBoundary"), XXO("Ne&xt Clip Boundary"), Command( wxT("CursNextClipBoundary"), XXO("Ne&xt Clip Boundary"),
FN(OnCursorNextClipBoundary), FN(OnCursorNextClipBoundary),
WaveTracksExistFlag, 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 #undef FN

View File

@ -1002,7 +1002,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& EditActions::Handler :: X) static_cast<CommandFunctorPointer>(& EditActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr LabelEditMenus( AudacityProject &project ); MenuTable::BaseItemPtr LabelEditMenus( AudacityProject &project );
@ -1208,5 +1207,4 @@ RegisteredMenuItemEnabler selectWaveTracks2{{
selectAll selectAll
}}; }};
#undef XXO
#undef FN #undef FN

View File

@ -136,7 +136,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& ExtraActions::Handler :: X) static_cast<CommandFunctorPointer>(& ExtraActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
// Imported menu item definitions // Imported menu item definitions
@ -254,5 +253,4 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -545,7 +545,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& FileActions::Handler :: X) static_cast<CommandFunctorPointer>(& FileActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr FileMenu( AudacityProject& ) MenuTable::BaseItemPtr FileMenu( AudacityProject& )
{ {
@ -696,5 +695,4 @@ MenuTable::BaseItemPtr FileMenu( AudacityProject& )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -411,7 +411,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& HelpActions::Handler :: X) static_cast<CommandFunctorPointer>(& HelpActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr HelpMenu( AudacityProject & ) MenuTable::BaseItemPtr HelpMenu( AudacityProject & )
{ {
@ -475,5 +474,4 @@ MenuTable::BaseItemPtr HelpMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -560,7 +560,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& LabelEditActions::Handler :: X) static_cast<CommandFunctorPointer>(& LabelEditActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & ) MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
{ {
@ -612,42 +611,42 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels), Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels),
AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag | AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag |
TimeSelectedFlag | IsNotSyncLockedFlag, TimeSelectedFlag | IsNotSyncLockedFlag,
Options{ wxT("Alt+X"), _("Label Cut") } ), Options{ wxT("Alt+X"), XO("Label Cut") } ),
Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels), Command( wxT("DeleteLabels"), XXO("&Delete"), FN(OnDeleteLabels),
AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag | AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag |
TimeSelectedFlag | IsNotSyncLockedFlag, TimeSelectedFlag | IsNotSyncLockedFlag,
Options{ wxT("Alt+K"), _("Label Delete") } ), Options{ wxT("Alt+K"), XO("Label Delete") } ),
Separator(), Separator(),
/* i18n-hint: (verb) A special way to cut out a piece of audio*/ /* i18n-hint: (verb) A special way to cut out a piece of audio*/
Command( wxT("SplitCutLabels"), XXO("&Split Cut"), Command( wxT("SplitCutLabels"), XXO("&Split Cut"),
FN(OnSplitCutLabels), NotBusyLabelsAndWaveFlags, 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"), Command( wxT("SplitDeleteLabels"), XXO("Sp&lit Delete"),
FN(OnSplitDeleteLabels), NotBusyLabelsAndWaveFlags, FN(OnSplitDeleteLabels), NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+Shift+K"), _("Label Split Delete") } ), Options{ wxT("Alt+Shift+K"), XO("Label Split Delete") } ),
Separator(), Separator(),
Command( wxT("SilenceLabels"), XXO("Silence &Audio"), Command( wxT("SilenceLabels"), XXO("Silence &Audio"),
FN(OnSilenceLabels), NotBusyLabelsAndWaveFlags, FN(OnSilenceLabels), NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+L"), _("Label Silence") } ), Options{ wxT("Alt+L"), XO("Label Silence") } ),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("CopyLabels"), XXO("Co&py"), FN(OnCopyLabels), Command( wxT("CopyLabels"), XXO("Co&py"), FN(OnCopyLabels),
NotBusyLabelsAndWaveFlags, NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+Shift+C"), _("Label Copy") } ), Options{ wxT("Alt+Shift+C"), XO("Label Copy") } ),
Separator(), Separator(),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels), Command( wxT("SplitLabels"), XXO("Spli&t"), FN(OnSplitLabels),
AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag, AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag,
Options{ wxT("Alt+I"), _("Label Split") } ), Options{ wxT("Alt+I"), XO("Label Split") } ),
/* i18n-hint: (verb)*/ /* i18n-hint: (verb)*/
Command( wxT("JoinLabels"), XXO("&Join"), FN(OnJoinLabels), Command( wxT("JoinLabels"), XXO("&Join"), FN(OnJoinLabels),
NotBusyLabelsAndWaveFlags, NotBusyLabelsAndWaveFlags,
Options{ wxT("Alt+J"), _("Label Join") } ), Options{ wxT("Alt+J"), XO("Label Join") } ),
Command( wxT("DisjoinLabels"), XXO("Detac&h at Silences"), Command( wxT("DisjoinLabels"), XXO("Detac&h at Silences"),
FN(OnDisjoinLabels), NotBusyLabelsAndWaveFlags, FN(OnDisjoinLabels), NotBusyLabelsAndWaveFlags,
wxT("Alt+Shift+J") ) wxT("Alt+Shift+J") )
@ -656,5 +655,4 @@ MenuTable::BaseItemPtr LabelEditMenus( AudacityProject & )
); // two menus ); // two menus
} }
#undef XXO
#undef FN #undef FN

View File

@ -555,7 +555,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& NavigationActions::Handler :: X) static_cast<CommandFunctorPointer>(& NavigationActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ExtraGlobalCommands( AudacityProject & ) MenuTable::BaseItemPtr ExtraGlobalCommands( AudacityProject & )
{ {
@ -603,5 +602,4 @@ MenuTable::BaseItemPtr ExtraFocusMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -227,9 +227,7 @@ void AddEffectMenuItems(
auto name = plug->GetSymbol().Translation(); auto name = plug->GetSymbol().Translation();
if (plug->IsEffectInteractive()) if (plug->IsEffectInteractive())
{ name += _("...");
name += wxT("...");
}
if (groupBy == wxT("groupby:publisher")) if (groupBy == wxT("groupby:publisher"))
{ {
@ -297,9 +295,7 @@ void AddEffectMenuItems(
auto name = plug->GetSymbol().Translation(); auto name = plug->GetSymbol().Translation();
if (plug->IsEffectInteractive()) if (plug->IsEffectInteractive())
{ name += _("...");
name += wxT("...");
}
wxString group; wxString group;
if (groupBy == wxT("sortby:publisher:name")) if (groupBy == wxT("sortby:publisher:name"))
@ -587,7 +583,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& PluginActions::Handler :: X) static_cast<CommandFunctorPointer>(& PluginActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
// ... buf first some more helper definitions, which use FN // ... buf first some more helper definitions, which use FN
namespace { namespace {
@ -657,12 +652,13 @@ void AddEffectMenuItemGroup(
wxString item = plug->GetPath(); wxString item = plug->GetPath();
if( plug->GetPluginType() == PluginTypeEffect ) if( plug->GetPluginType() == PluginTypeEffect )
temp2.push_back( Command( item, temp2.push_back( Command( item,
item, TranslatableString{ item },
false,
FN(OnEffect), FN(OnEffect),
flags[i], flags[i],
CommandManager::Options{} CommandManager::Options{}
.IsEffect().Parameter( plugs[i] ) ) ); .IsEffect()
.AllowInMacros()
.Parameter( plugs[i] ) ) );
i++; i++;
} }
@ -676,12 +672,13 @@ void AddEffectMenuItemGroup(
PluginManager::Get().GetPlugin(plugs[i]); PluginManager::Get().GetPlugin(plugs[i]);
if( plug->GetPluginType() == PluginTypeEffect ) if( plug->GetPluginType() == PluginTypeEffect )
pTable->push_back( Command( names[i], pTable->push_back( Command( names[i],
names[i], TranslatableString{ names[i] },
false,
FN(OnEffect), FN(OnEffect),
flags[i], flags[i],
CommandManager::Options{} CommandManager::Options{}
.IsEffect().Parameter( plugs[i] ) ) ); .IsEffect()
.AllowInMacros()
.Parameter( plugs[i] ) ) );
} }
if (max > 0) if (max > 0)
@ -712,14 +709,17 @@ void AddEffectMenuItemGroup(
MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags ) MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags )
{ {
MenuTable::BaseItemPtrs result; MenuTable::BaseItemPtrs result;
auto names = MacroCommands::GetNames(); auto names = MacroCommands::GetNames(); // these names come from filenames
int i; int i;
for (i = 0; i < (int)names.size(); i++) { for (i = 0; i < (int)names.size(); i++) {
auto MacroID = ApplyMacroDialog::MacroIdOfName( names[i] ); auto MacroID = ApplyMacroDialog::MacroIdOfName( names[i] );
result.push_back( MenuTable::Command( MacroID, result.push_back( MenuTable::Command( MacroID,
names[i], false, FN(OnApplyMacroDirectly), TranslatableString{ names[i] }, // file name verbatim
flags ) ); FN(OnApplyMacroDirectly),
flags,
CommandManager::Options{}.AllowInMacros()
) );
} }
return result; return result;
@ -765,13 +765,12 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project )
// the plugin manager...sorry! :-( // the plugin manager...sorry! :-(
const auto &lastEffect = MenuManager::Get(project).mLastEffect; const auto &lastEffect = MenuManager::Get(project).mLastEffect;
wxString buildMenuLabel; TranslatableString buildMenuLabel;
if (!lastEffect.empty()) { if (!lastEffect.empty())
buildMenuLabel.Printf(_("Repeat %s"), buildMenuLabel = XO("Repeat %s")
EffectManager::Get().GetCommandName(lastEffect)); .Format( EffectManager::Get().GetCommandName(lastEffect) );
}
else else
buildMenuLabel = _("Repeat Last Effect"); buildMenuLabel = XO("Repeat Last Effect");
return Menu( _("Effe&ct"), return Menu( _("Effe&ct"),
#ifdef EXPERIMENTAL_EFFECT_MANAGEMENT #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT
@ -781,7 +780,7 @@ MenuTable::BaseItemPtr EffectMenu( AudacityProject &project )
Separator(), Separator(),
#endif #endif
Command( wxT("RepeatLastEffect"), buildMenuLabel, false, Command( wxT("RepeatLastEffect"), buildMenuLabel,
FN(OnRepeatLastEffect), FN(OnRepeatLastEffect),
AudioIONotBusyFlag | TimeSelectedFlag | AudioIONotBusyFlag | TimeSelectedFlag |
WaveTracksSelectedFlag | HasLastEffectFlag, WaveTracksSelectedFlag | HasLastEffectFlag,
@ -978,5 +977,4 @@ MenuTable::BaseItemPtr ExtraScriptablesIIMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -1025,7 +1025,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& SelectActions::Handler :: X) static_cast<CommandFunctorPointer>(& SelectActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& ); MenuTable::BaseItemPtr ClipSelectMenu( AudacityProject& );
@ -1038,10 +1037,10 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
return Menu( _("&Select"), return Menu( _("&Select"),
Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll), Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll),
TracksExistFlag, TracksExistFlag,
Options{ wxT("Ctrl+A"), _("Select All") } ), Options{ wxT("Ctrl+A"), XO("Select All") } ),
Command( wxT("SelectNone"), XXO("&None"), FN(OnSelectNone), Command( wxT("SelectNone"), XXO("&None"), FN(OnSelectNone),
TracksExistFlag, 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"), Command( wxT("SelSyncLockTracks"), XXO("In All &Sync-Locked Tracks"),
FN(OnSelectSyncLockSel), FN(OnSelectSyncLockSel),
TracksSelectedFlag | IsSyncLockedFlag, TracksSelectedFlag | IsSyncLockedFlag,
Options{ wxT("Ctrl+Shift+Y"), _("Select Sync-Locked") } ) Options{ wxT("Ctrl+Shift+Y"), XO("Select Sync-Locked") } )
#endif #endif
), ),
@ -1065,19 +1064,19 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
Menu( _("R&egion"), Menu( _("R&egion"),
Command( wxT("SetLeftSelection"), XXO("&Left at Playback Position"), Command( wxT("SetLeftSelection"), XXO("&Left at Playback Position"),
FN(OnSetLeftSelection), TracksExistFlag, 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"), Command( wxT("SetRightSelection"), XXO("&Right at Playback Position"),
FN(OnSetRightSelection), TracksExistFlag, 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"), Command( wxT("SelTrackStartToCursor"), XXO("Track &Start to Cursor"),
FN(OnSelectStartCursor), AlwaysEnabledFlag, 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"), Command( wxT("SelCursorToTrackEnd"), XXO("Cursor to Track &End"),
FN(OnSelectCursorEnd), AlwaysEnabledFlag, 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"), Command( wxT("SelTrackStartToEnd"), XXO("Track Start to En&d"),
FN(OnSelectTrackStartToEnd), AlwaysEnabledFlag, FN(OnSelectTrackStartToEnd), AlwaysEnabledFlag,
Options{}.LongName( _("Select Track Start to End") ) ), Options{}.LongName( XO("Select Track Start to End") ) ),
Separator(), Separator(),
@ -1120,7 +1119,7 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
Command( wxT("SelCursorStoredCursor"), Command( wxT("SelCursorStoredCursor"),
XXO("Cursor to Stored &Cursor Position"), XXO("Cursor to Stored &Cursor Position"),
FN(OnSelectCursorStoredCursor), TracksExistFlag, FN(OnSelectCursorStoredCursor), TracksExistFlag,
Options{}.LongName( _("Select Cursor to Stored") ) ), Options{}.LongName( XO("Select Cursor to Stored") ) ),
Command( wxT("StoreCursorPosition"), XXO("Store Cursor Pos&ition"), Command( wxT("StoreCursorPosition"), XXO("Store Cursor Pos&ition"),
FN(OnCursorPositionStore), FN(OnCursorPositionStore),
@ -1132,7 +1131,7 @@ MenuTable::BaseItemPtr SelectMenu( AudacityProject& )
Command( wxT("ZeroCross"), XXO("At &Zero Crossings"), Command( wxT("ZeroCross"), XXO("At &Zero Crossings"),
FN(OnZeroCrossing), TracksSelectedFlag, 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"), Command( wxT("CursSelStart"), XXO("Selection Star&t"),
FN(OnCursorSelStart), FN(OnCursorSelStart),
TimeSelectedFlag, TimeSelectedFlag,
Options{}.LongName( _("Cursor to Selection Start") ) ), Options{}.LongName( XO("Cursor to Selection Start") ) ),
Command( wxT("CursSelEnd"), XXO("Selection En&d"), Command( wxT("CursSelEnd"), XXO("Selection En&d"),
FN(OnCursorSelEnd), FN(OnCursorSelEnd),
TimeSelectedFlag, TimeSelectedFlag,
Options{}.LongName( _("Cursor to Selection End") ) ), Options{}.LongName( XO("Cursor to Selection End") ) ),
Command( wxT("CursTrackStart"), XXO("Track &Start"), Command( wxT("CursTrackStart"), XXO("Track &Start"),
FN(OnCursorTrackStart), FN(OnCursorTrackStart),
TracksSelectedFlag, TracksSelectedFlag,
Options{ wxT("J"), _("Cursor to Track Start") } ), Options{ wxT("J"), XO("Cursor to Track Start") } ),
Command( wxT("CursTrackEnd"), XXO("Track &End"), Command( wxT("CursTrackEnd"), XXO("Track &End"),
FN(OnCursorTrackEnd), FN(OnCursorTrackEnd),
TracksSelectedFlag, TracksSelectedFlag,
Options{ wxT("K"), _("Cursor to Track End") } ), Options{ wxT("K"), XO("Cursor to Track End") } ),
ClipCursorItems, ClipCursorItems,
Command( wxT("CursProjectStart"), XXO("&Project Start"), Command( wxT("CursProjectStart"), XXO("&Project Start"),
FN(OnSkipStart), FN(OnSkipStart),
CanStopFlags, 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), Command( wxT("CursProjectEnd"), XXO("Project E&nd"), FN(OnSkipEnd),
CanStopFlags, 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 #undef FN

View File

@ -244,7 +244,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& ToolbarActions::Handler :: X) static_cast<CommandFunctorPointer>(& ToolbarActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ) MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& )
{ {
@ -341,5 +340,4 @@ MenuTable::BaseItemPtr ExtraToolsMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -1247,7 +1247,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& TrackActions::Handler :: X) static_cast<CommandFunctorPointer>(& TrackActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr TracksMenu( AudacityProject & ) MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
{ {
@ -1320,13 +1319,13 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
// require the tracks to be selected. // require the tracks to be selected.
Command( wxT("PanLeft"), XXO("&Left"), FN(OnPanLeft), Command( wxT("PanLeft"), XXO("&Left"), FN(OnPanLeft),
TracksSelectedFlag, TracksSelectedFlag,
Options{}.LongName( _("Pan Left") ) ), Options{}.LongName( XO("Pan Left") ) ),
Command( wxT("PanRight"), XXO("&Right"), FN(OnPanRight), Command( wxT("PanRight"), XXO("&Right"), FN(OnPanRight),
TracksSelectedFlag, TracksSelectedFlag,
Options{}.LongName( _("Pan Right") ) ), Options{}.LongName( XO("Pan Right") ) ),
Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter), Command( wxT("PanCenter"), XXO("&Center"), FN(OnPanCenter),
TracksSelectedFlag, TracksSelectedFlag,
Options{}.LongName( _("Pan Center") ) ) Options{}.LongName( XO("Pan Center") ) )
), ),
Separator(), Separator(),
@ -1381,10 +1380,10 @@ MenuTable::BaseItemPtr TracksMenu( AudacityProject & )
Menu( _("S&ort Tracks"), Menu( _("S&ort Tracks"),
Command( wxT("SortByTime"), XXO("By &Start Time"), FN(OnSortTime), Command( wxT("SortByTime"), XXO("By &Start Time"), FN(OnSortTime),
TracksExistFlag, TracksExistFlag,
Options{}.LongName( _("Sort by Time") ) ), Options{}.LongName( XO("Sort by Time") ) ),
Command( wxT("SortByName"), XXO("By &Name"), FN(OnSortName), Command( wxT("SortByName"), XXO("By &Name"), FN(OnSortName),
TracksExistFlag, TracksExistFlag,
Options{}.LongName( _("Sort by Name") ) ) Options{}.LongName( XO("Sort by Name") ) )
) )
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -1453,5 +1452,4 @@ MenuTable::BaseItemPtr ExtraTrackMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -889,7 +889,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& TransportActions::Handler :: X) static_cast<CommandFunctorPointer>(& TransportActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr CursorMenu( AudacityProject& ); MenuTable::BaseItemPtr CursorMenu( AudacityProject& );
@ -931,8 +930,8 @@ MenuTable::BaseItemPtr TransportMenu( AudacityProject &project )
// We supply the name for the 'other one' here. // We supply the name for the 'other one' here.
// It should be bound to Shift+R // It should be bound to Shift+R
(gPrefs->ReadBool("/GUI/PreferNewTrackRecord", false) (gPrefs->ReadBool("/GUI/PreferNewTrackRecord", false)
? _("&Append Record") : _("Record &New Track")), ? XO("&Append Record") : XO("Record &New Track")),
false, FN(OnRecord2ndChoice), CanStopFlags, FN(OnRecord2ndChoice), CanStopFlags,
wxT("Shift+R") wxT("Shift+R")
), ),
@ -1082,5 +1081,4 @@ MenuTable::BaseItemPtr ExtraPlayAtSpeedMenu( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -431,7 +431,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& ViewActions::Handler :: X) static_cast<CommandFunctorPointer>(& ViewActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& ); MenuTable::BaseItemPtr ToolbarsMenu( AudacityProject& );
@ -474,10 +473,10 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& )
Menu( _("Sk&ip to"), Menu( _("Sk&ip to"),
Command( wxT("SkipSelStart"), XXO("Selection Sta&rt"), Command( wxT("SkipSelStart"), XXO("Selection Sta&rt"),
FN(OnGoSelStart), TimeSelectedFlag, 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), Command( wxT("SkipSelEnd"), XXO("Selection En&d"), FN(OnGoSelEnd),
TimeSelectedFlag, TimeSelectedFlag,
Options{ wxT("Ctrl+]"), _("Skip to Selection End") } ) Options{ wxT("Ctrl+]"), XO("Skip to Selection End") } )
), ),
Separator(), Separator(),
@ -550,5 +549,4 @@ MenuTable::BaseItemPtr ViewMenu( AudacityProject& )
); );
} }
#undef XXO
#undef FN #undef FN

View File

@ -118,7 +118,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \ #define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& WindowActions::Handler :: X) static_cast<CommandFunctorPointer>(& WindowActions::Handler :: X)
#define XXO(X) _(X), wxString{X}.Contains("...")
MenuTable::BaseItemPtr WindowMenu( AudacityProject & ) MenuTable::BaseItemPtr WindowMenu( AudacityProject & )
{ {
@ -158,7 +157,6 @@ MenuTable::BaseItemPtr ExtraWindowItems( AudacityProject & )
); );
} }
#undef XXO
#undef FN #undef FN
#else #else

View File

@ -1032,10 +1032,7 @@ MenuTable::BaseItemPtr Scrubber::Menu()
MenuTable::BaseItemPtrs ptrs; MenuTable::BaseItemPtrs ptrs;
for (const auto &item : menuItems) { for (const auto &item : menuItems) {
ptrs.push_back( MenuTable::Command( ptrs.push_back( MenuTable::Command( item.name, item.label,
item.name, item.label.Translation(),
// No menu items yet have dialogs
false,
findme, static_cast<CommandFunctorPointer>(item.memFn), findme, static_cast<CommandFunctorPointer>(item.memFn),
item.flags, item.flags,
item.StatusTest item.StatusTest