1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 07:39:42 +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.
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();

View File

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

View File

@ -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<CommandItem*>( pItem )) {
manager.AddItem(
pCommand->name, pCommand->label_in, pCommand->excludeFromMacros,
pCommand->name, pCommand->label_in,
pCommand->finder, pCommand->callback,
pCommand->flags, pCommand->options
);

View File

@ -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;

View File

@ -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<SeparatorItem>(); }
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,
CommandFlag flags, const CommandManager::Options &options = {})
{
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, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -1002,7 +1002,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -136,7 +136,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -545,7 +545,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -411,7 +411,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -560,7 +560,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -555,7 +555,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -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<CommandFunctorPointer>(& 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

View File

@ -1025,7 +1025,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -244,7 +244,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -1247,7 +1247,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -889,7 +889,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -431,7 +431,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -118,7 +118,6 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) {
#define FN(X) findCommandHandler, \
static_cast<CommandFunctorPointer>(& 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

View File

@ -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<CommandFunctorPointer>(item.memFn),
item.flags,
item.StatusTest