diff --git a/src/Menus.cpp b/src/Menus.cpp index 19b6d5bfa..d5a19b117 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -110,8 +110,8 @@ ComputedItem::~ComputedItem() {} SingleItem::~SingleItem() {} -GroupItem::GroupItem( BaseItemPtrs &&items_ ) -: items{ std::move( items_ ) } +GroupItem::GroupItem( const wxString &internalName, BaseItemPtrs &&items_ ) +: BaseItem{ internalName }, items{ std::move( items_ ) } { } void GroupItem::AppendOne( BaseItemPtr&& ptr ) @@ -125,16 +125,17 @@ TransparentGroupItem::~TransparentGroupItem() {} namespace MenuTable { -MenuItem::MenuItem( const TranslatableString &title_, BaseItemPtrs &&items_ ) -: GroupItem{ std::move( items_ ) }, title{ title_ } +MenuItem::MenuItem( const wxString &internalName, + const TranslatableString &title_, BaseItemPtrs &&items_ ) +: GroupItem{ internalName, std::move( items_ ) }, title{ title_ } { wxASSERT( !title.empty() ); } MenuItem::~MenuItem() {} ConditionalGroupItem::ConditionalGroupItem( - Condition condition_, BaseItemPtrs &&items_ ) -: GroupItem{ std::move( items_ ) }, condition{ condition_ } + const wxString &internalName, Condition condition_, BaseItemPtrs &&items_ ) +: GroupItem{ internalName, std::move( items_ ) }, condition{ condition_ } { } ConditionalGroupItem::~ConditionalGroupItem() {} @@ -147,7 +148,7 @@ CommandItem::CommandItem(const CommandID &name_, CommandFlag flags_, const CommandManager::Options &options_, CommandHandlerFinder finder_) -: name{ name_ }, label_in{ label_in_ } +: SingleItem{ name_ }, label_in{ label_in_ } , finder{ finder_ }, callback{ callback_ } , flags{ flags_ }, options{ options_ } {} @@ -159,7 +160,7 @@ CommandGroupItem::CommandGroupItem(const wxString &name_, CommandFlag flags_, bool isEffect_, CommandHandlerFinder finder_) -: name{ name_ }, items{ items_ } +: SingleItem{ name_ }, items{ items_ } , finder{ finder_ }, callback{ callback_ } , flags{ flags_ }, isEffect{ isEffect_ } {} @@ -180,6 +181,8 @@ CommandHandlerFinder FinderScope::sFinder = namespace { +const auto MenuPathStart = wxT("MenuBar"); + void VisitItem( AudacityProject &project, MenuTable::BaseItem *pItem ); void VisitItems( @@ -300,8 +303,8 @@ MenuTable::BaseItemSharedPtr HelpMenu(); // Table of menu factories. // TODO: devise a registration system instead. -static const auto menuTree = MenuTable::Items( - FileMenu() +static const auto menuTree = MenuTable::Items( MenuPathStart + , FileMenu() , EditMenu() , SelectMenu() , ViewMenu() diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index 92de56e20..449bbdc04 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -416,7 +416,13 @@ namespace MenuTable { // large. struct BaseItem { // declare at least one virtual function so dynamic_cast will work + explicit + BaseItem( const Identifier &internalName ) + : name{ internalName } + {} virtual ~BaseItem(); + + const Identifier name; }; using BaseItemPtr = std::unique_ptr; using BaseItemSharedPtr = std::shared_ptr; @@ -425,9 +431,11 @@ namespace MenuTable { // An item that delegates to another held in a shared pointer; this allows // static tables of items to be computed once and reused + // The name of the delegate is significant for path calculations struct SharedItem final : BaseItem { explicit SharedItem( const BaseItemSharedPtr &ptr_ ) - : ptr{ ptr_ } + : BaseItem{ wxEmptyString } + , ptr{ ptr_ } {} ~SharedItem() override; @@ -440,6 +448,7 @@ namespace MenuTable { // An item that computes some other item to substitute for it, each time // the ComputedItem is visited + // The name of the substitute is significant for path calculations struct ComputedItem final : BaseItem { // The type of functions that generate descriptions of items. // Return type is a shared_ptr to let the function decide whether to @@ -448,7 +457,8 @@ namespace MenuTable { using Factory = std::function< BaseItemSharedPtr( AudacityProject & ) >; explicit ComputedItem( const Factory &factory_ ) - : factory{ factory_ } + : BaseItem( wxEmptyString ) + , factory{ factory_ } {} ~ComputedItem() override; @@ -463,11 +473,13 @@ namespace MenuTable { // Common abstract base class for items that group other items struct GroupItem : BaseItem { - // Construction from a previously built-up vector of pointers - GroupItem( BaseItemPtrs &&items_ ); + // Construction from an internal name and a previously built-up + // vector of pointers + GroupItem( const wxString &internalName, BaseItemPtrs &&items_ ); // In-line, variadic constructor that doesn't require building a vector template< typename... Args > - GroupItem( Args&&... args ) + GroupItem( const wxString &internalName, Args&&... args ) + : BaseItem( internalName ) { Append( std::forward< Args >( args )... ); } ~GroupItem() override = 0; @@ -506,6 +518,7 @@ namespace MenuTable { }; // Concrete subclass of GroupItem that adds nothing else + // TransparentGroupItem with an empty name is transparent to item path calculations struct TransparentGroupItem final : GroupItem { using GroupItem::GroupItem; @@ -516,13 +529,15 @@ namespace MenuTable { // Describes a main menu in the toolbar, or a sub-menu struct MenuItem final : GroupItem { - // Construction from a previously built-up vector of pointers - MenuItem( const TranslatableString &title_, BaseItemPtrs &&items_ ); + // Construction from an internal name and a previously built-up + // vector of pointers + MenuItem( const wxString &internalName, + const TranslatableString &title_, BaseItemPtrs &&items_ ); // In-line, variadic constructor that doesn't require building a vector template< typename... Args > - MenuItem( + MenuItem( const wxString &internalName, const TranslatableString &title_, Args&&... args ) - : GroupItem{ std::forward(args)... } + : GroupItem{ internalName, std::forward(args)... } , title{ title_ } {} ~MenuItem() override; @@ -535,12 +550,15 @@ namespace MenuTable { struct ConditionalGroupItem final : GroupItem { using Condition = std::function< bool() >; - // Construction from a previously built-up vector of pointers - ConditionalGroupItem( Condition condition_, BaseItemPtrs &&items_ ); + // Construction from an internal name and a previously built-up + // vector of pointers + ConditionalGroupItem( const wxString &internalName, + Condition condition_, BaseItemPtrs &&items_ ); // In-line, variadic constructor that doesn't require building a vector template< typename... Args > - ConditionalGroupItem( Condition condition_, Args&&... args ) - : GroupItem{ std::forward(args)... } + ConditionalGroupItem( const wxString &internalName, + Condition condition_, Args&&... args ) + : GroupItem{ internalName, std::forward(args)... } , condition{ condition_ } {} ~ConditionalGroupItem() override; @@ -551,6 +569,7 @@ namespace MenuTable { // Describes a separator between menu items struct SeparatorItem final : SingleItem { + SeparatorItem() : SingleItem{ wxEmptyString } {} ~SeparatorItem() override; }; @@ -608,7 +627,6 @@ namespace MenuTable { ~CommandItem() override; - const CommandID name; const TranslatableString label_in; CommandHandlerFinder finder; CommandFunctorPointer callback; @@ -643,7 +661,6 @@ namespace MenuTable { ~CommandGroupItem() override; - const wxString name; const std::vector items; CommandHandlerFinder finder; CommandFunctorPointer callback; @@ -657,8 +674,9 @@ namespace MenuTable { { using Appender = std::function< void( AudacityProject&, wxMenu& ) >; - explicit SpecialItem( const Appender &fn_ ) - : fn{ fn_ } + explicit SpecialItem( const wxString &internalName, const Appender &fn_ ) + : SingleItem{ internalName } + , fn{ fn_ } {} ~SpecialItem() override; @@ -670,47 +688,73 @@ namespace MenuTable { // Group items can be constructed two ways. // Pointers to subordinate items are moved into the result. // Null pointers are permitted, and ignored when building the menu. - // Items are spliced into the enclosing menu + // Items are spliced into the enclosing menu. + // The name is untranslated and may be empty, to make the group transparent + // in identification of items by path. Otherwise try to keep the name + // stable across Audacity versions. template< typename... Args > - inline std::unique_ptr Items( Args&&... args ) - { return std::make_unique( + inline std::unique_ptr Items( + const wxString &internalName, Args&&... args ) + { return std::make_unique( internalName, std::forward(args)... ); } // Menu items can be constructed two ways, as for group items - // Items will appear in a main toolbar menu or in a sub-menu + // Items will appear in a main toolbar menu or in a sub-menu. + // The name is untranslated. Try to keep the name stable across Audacity + // versions. + // If the name of a menu is empty, then subordinate items cannot be located + // by path. template< typename... Args > inline std::unique_ptr Menu( - const TranslatableString &title, Args&&... args ) + const wxString &internalName, const TranslatableString &title, Args&&... args ) { return std::make_unique( - title, std::forward(args)... ); } + internalName, title, std::forward(args)... ); } inline std::unique_ptr Menu( - const TranslatableString &title, BaseItemPtrs &&items ) - { return std::make_unique( title, std::move( items ) ); } + const wxString &internalName, const TranslatableString &title, BaseItemPtrs &&items ) + { return std::make_unique( + internalName, title, std::move( items ) ); } // Conditional group items can be constructed two ways, as for group items // These items register in the CommandManager but are not shown in menus + // if the condition evaluates false. + // The name is untranslated. Try to keep the name stable across Audacity + // versions. + // Name for conditional group must be non-empty. template< typename... Args > - inline std::unique_ptr ConditionalItems( - ConditionalGroupItem::Condition condition, Args&&... args ) - { return std::make_unique( - condition, std::forward(args)... ); } inline std::unique_ptr ConditionalItems( - ConditionalGroupItem::Condition condition, BaseItemPtrs &&items ) + const wxString &internalName, + ConditionalGroupItem::Condition condition, Args&&... args ) { return std::make_unique( - condition, std::move( items ) ); } + internalName, condition, std::forward(args)... ); } + inline std::unique_ptr ConditionalItems( + const wxString &internalName, ConditionalGroupItem::Condition condition, + BaseItemPtrs &&items ) + { return std::make_unique( + internalName, condition, std::move( items ) ); } // Make either a menu item or just a group, depending on the nonemptiness - // of the title + // of the title. + // The name is untranslated and may be empty, to make the group transparent + // in identification of items by path. Otherwise try to keep the name + // stable across Audacity versions. + // If the name of a menu is empty, then subordinate items cannot be located + // by path. template< typename... Args > inline BaseItemPtr MenuOrItems( - const TranslatableString &title, Args&&... args ) - { if ( title.empty() ) return Items( std::forward(args)... ); - else return std::make_unique( - title, std::forward(args)... ); } + const wxString &internalName, const TranslatableString &title, Args&&... args ) + { if ( title.empty() ) + return Items( internalName, std::forward(args)... ); + else + return std::make_unique( + internalName, title, std::forward(args)... ); } inline BaseItemPtr MenuOrItems( + const wxString &internalName, const TranslatableString &title, BaseItemPtrs &&items ) - { if ( title.empty() ) return Items( std::move( items ) ); - else return std::make_unique( title, std::move( items ) ); } + { if ( title.empty() ) + return Items( internalName, std::move( items ) ); + else + return std::make_unique( + internalName, title, std::move( items ) ); } inline std::unique_ptr Separator() { return std::make_unique(); } @@ -742,8 +786,8 @@ namespace MenuTable { } inline std::unique_ptr Special( - const SpecialItem::Appender &fn ) - { return std::make_unique( fn ); } + const wxString &name, const SpecialItem::Appender &fn ) + { return std::make_unique( name, fn ); } } #endif diff --git a/src/menus/ClipMenus.cpp b/src/menus/ClipMenus.cpp index 3c2d91cad..43df8fd94 100644 --- a/src/menus/ClipMenus.cpp +++ b/src/menus/ClipMenus.cpp @@ -823,14 +823,15 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& ClipActions::Handler :: X) +// Under /MenuBar/Select MenuTable::BaseItemSharedPtr ClipSelectMenu() { using namespace MenuTable; using Options = CommandManager::Options; - static BaseItemSharedPtr menu{ + static BaseItemSharedPtr menu { FinderScope( findCommandHandler ).Eval( - Menu( XO("Clip B&oundaries"), + Menu( wxT("Clip"), XO("Clip B&oundaries"), Command( wxT("SelPrevClipBoundaryToCursor"), XXO("Pre&vious Clip Boundary to Cursor"), FN(OnSelectPrevClipBoundaryToCursor), @@ -849,6 +850,7 @@ MenuTable::BaseItemSharedPtr ClipSelectMenu() return menu; } +// Under /MenuBar/Transport/Cursor MenuTable::BaseItemSharedPtr ClipCursorItems() { using namespace MenuTable; @@ -856,7 +858,7 @@ MenuTable::BaseItemSharedPtr ClipCursorItems() static BaseItemSharedPtr items{ FinderScope( findCommandHandler ).Eval( - Items( + Items( wxT("Clip"), Command( wxT("CursPrevClipBoundary"), XXO("Pre&vious Clip Boundary"), FN(OnCursorPrevClipBoundary), WaveTracksExistFlag, @@ -869,13 +871,14 @@ MenuTable::BaseItemSharedPtr ClipCursorItems() return items; } +// Under /MenuBar/Optional/Extra/Cursor MenuTable::BaseItemSharedPtr ExtraClipCursorItems() { using namespace MenuTable; static BaseItemSharedPtr items{ FinderScope( findCommandHandler ).Eval( - Items( + Items( wxT("Clip"), Command( wxT("ClipLeft"), XXO("Clip L&eft"), FN(OnClipLeft), TracksExistFlag | TrackPanelHasFocus, wxT("\twantKeyup") ), Command( wxT("ClipRight"), XXO("Clip Rig&ht"), FN(OnClipRight), diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index dad5410cd..1be63ad1a 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -1024,6 +1024,7 @@ const ReservedCommandFlag cutCopyOptions() }; +// Under /MenuBar MenuTable::BaseItemSharedPtr EditMenu() { using namespace MenuTable; @@ -1053,14 +1054,15 @@ MenuTable::BaseItemSharedPtr EditMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Edit"), + Menu( wxT("Edit"), XO("&Edit"), Command( wxT("Undo"), XXO("&Undo"), FN(OnUndo), AudioIONotBusyFlag | UndoAvailableFlag, wxT("Ctrl+Z") ), Command( wxT("Redo"), XXO("&Redo"), FN(OnRedo), AudioIONotBusyFlag | RedoAvailableFlag, redoKey ), - Special( [](AudacityProject &project, wxMenu&) { + Special( wxT("UndoItemsUpdateStep"), + [](AudacityProject &project, wxMenu&) { // Change names in the CommandManager as a side-effect MenuManager::ModifyUndoMenuItems(project); }), @@ -1087,7 +1089,7 @@ MenuTable::BaseItemSharedPtr EditMenu() Separator(), - Menu( XO("R&emove Special"), + Menu( wxT("RemoveSpecial"), XO("R&emove Special"), /* i18n-hint: (verb) Do a special kind of cut*/ Command( wxT("SplitCut"), XXO("Spl&it Cut"), FN(OnSplitCut), NotBusyTimeAndTracksFlags, @@ -1113,7 +1115,7 @@ MenuTable::BaseItemSharedPtr EditMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("Clip B&oundaries"), + Menu( wxT("Clip"), XO("Clip B&oundaries"), /* i18n-hint: (verb) It's an item on a menu. */ Command( wxT("Split"), XXO("Sp&lit"), FN(OnSplit), AudioIONotBusyFlag | WaveTracksSelectedFlag, @@ -1150,6 +1152,7 @@ MenuTable::BaseItemSharedPtr EditMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraEditMenu() { using namespace MenuTable; @@ -1158,7 +1161,7 @@ MenuTable::BaseItemSharedPtr ExtraEditMenu() AudioIONotBusyFlag | TracksSelectedFlag | TimeSelectedFlag; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Edit"), + Menu( wxT("Edit"), XO("&Edit"), Command( wxT("DeleteKey"), XXO("&Delete Key"), FN(OnDelete), (flags | NoAutoSelect), wxT("Backspace") ), diff --git a/src/menus/ExtraMenus.cpp b/src/menus/ExtraMenus.cpp index 860b3708a..32fb29e8b 100644 --- a/src/menus/ExtraMenus.cpp +++ b/src/menus/ExtraMenus.cpp @@ -162,9 +162,8 @@ MenuTable::BaseItemSharedPtr ExtraMenu() // Table of menu factories. // TODO: devise a registration system instead. - static BaseItemSharedPtr extraItems{ - Items( - ExtraTransportMenu() + static BaseItemSharedPtr extraItems{ Items( wxEmptyString + , ExtraTransportMenu() , ExtraToolsMenu() , ExtraMixerMenu() , ExtraEditMenu() @@ -189,18 +188,19 @@ MenuTable::BaseItemSharedPtr ExtraMenu() static const auto pred = []{ return gPrefs->ReadBool(wxT("/GUI/ShowExtraMenus"), false); }; static BaseItemSharedPtr menu{ - ConditionalItems( - pred, Menu( XO("Ext&ra"), extraItems ) ) + ConditionalItems( wxT("Optional"), + pred, Menu( wxT("Extra"), XO("Ext&ra"), extraItems ) ) }; return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraMixerMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("Mi&xer"), + Menu( wxT("Mixer"), XO("Mi&xer"), Command( wxT("OutputGain"), XXO("Ad&just Playback Volume..."), FN(OnOutputGain), AlwaysEnabledFlag ), Command( wxT("OutputGainInc"), XXO("&Increase Playback Volume"), @@ -217,12 +217,13 @@ MenuTable::BaseItemSharedPtr ExtraMixerMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraDeviceMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("De&vice"), + Menu( wxT("Device"), XO("De&vice"), Command( wxT("InputDevice"), XXO("Change &Recording Device..."), FN(OnInputDevice), AudioIONotBusyFlag, wxT("Shift+I") ), @@ -238,6 +239,7 @@ MenuTable::BaseItemSharedPtr ExtraDeviceMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project ) { using namespace MenuTable; @@ -253,7 +255,7 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project ) // Not a menu. return FinderScope( findCommandHandler ).Eval( - Items( + Items( wxT("Misc"), // Accel key is not bindable. Command( wxT("FullScreenOnOff"), XXO("&Full Screen (on/off)"), FN(OnFullScreen), diff --git a/src/menus/FileMenus.cpp b/src/menus/FileMenus.cpp index 130d526ab..d2c65d30c 100644 --- a/src/menus/FileMenus.cpp +++ b/src/menus/FileMenus.cpp @@ -551,6 +551,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& FileActions::Handler :: X) +// under /MenuBar MenuTable::BaseItemSharedPtr FileMenu() { using namespace MenuTable; @@ -558,7 +559,7 @@ MenuTable::BaseItemSharedPtr FileMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&File"), + Menu( wxT("File"), XO("&File"), /*i18n-hint: "New" is an action (verb) to create a NEW project*/ Command( wxT("New"), XXO("&New"), FN(OnNew), AudioIONotBusyFlag, wxT("Ctrl+N") ), @@ -578,7 +579,7 @@ MenuTable::BaseItemSharedPtr FileMenu() ///////////////////////////////////////////////////////////////////////////// - Menu( + Menu( wxT("Recent"), #ifdef __WXMAC__ /* i18n-hint: This is the name of the menu item on Mac OS X only */ XO("Open Recent") @@ -587,7 +588,8 @@ MenuTable::BaseItemSharedPtr FileMenu() XO("Recent &Files") #endif , - Special( [](AudacityProject &, wxMenu &theMenu){ + Special( wxT("PopulateRecentFilesStep"), + [](AudacityProject &, wxMenu &theMenu){ // Recent Files and Recent Projects menus auto &history = FileHistory::Global(); history.UseMenu( &theMenu ); @@ -616,7 +618,7 @@ MenuTable::BaseItemSharedPtr FileMenu() Separator(), - Menu( XO("&Save Project"), + Menu( wxT("Save"), XO("&Save Project"), Command( wxT("Save"), XXO("&Save Project"), FN(OnSave), AudioIONotBusyFlag | UnsavedChangesFlag, wxT("Ctrl+S") ), Command( wxT("SaveAs"), XXO("Save Project &As..."), FN(OnSaveAs), @@ -634,7 +636,7 @@ MenuTable::BaseItemSharedPtr FileMenu() Separator(), - Menu( XO("&Export"), + Menu( wxT("Export"), XO("&Export"), // Enable Export audio commands only when there are audio tracks. Command( wxT("ExportMp3"), XXO("Export as MP&3"), FN(OnExportMp3), AudioIONotBusyFlag | WaveTracksExistFlag ), @@ -668,7 +670,7 @@ MenuTable::BaseItemSharedPtr FileMenu() #endif ), - Menu( XO("&Import"), + Menu( wxT("Import"), XO("&Import"), Command( wxT("ImportAudio"), XXO("&Audio..."), FN(OnImport), AudioIONotBusyFlag, wxT("Ctrl+Shift+I") ), Command( wxT("ImportLabels"), XXO("&Labels..."), FN(OnImportLabels), diff --git a/src/menus/HelpMenus.cpp b/src/menus/HelpMenus.cpp index d81a1f528..4cf27206e 100644 --- a/src/menus/HelpMenus.cpp +++ b/src/menus/HelpMenus.cpp @@ -420,12 +420,13 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& HelpActions::Handler :: X) +// Under /MenuBar MenuTable::BaseItemSharedPtr HelpMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Help"), + Menu( wxT("Help"), XO("&Help"), // QuickFix menu item not in Audacity 2.3.1 whilst we discuss further. #ifdef EXPERIMENTAL_DA // DA: Has QuickFix menu item. @@ -444,7 +445,7 @@ MenuTable::BaseItemSharedPtr HelpMenu() Separator(), - Menu( XO("&Diagnostics"), + Menu( wxT("Diagnostics"), XO("&Diagnostics"), Command( wxT("DeviceInfo"), XXO("Au&dio Device Info..."), FN(OnAudioDeviceInfo), AudioIONotBusyFlag ), diff --git a/src/menus/LabelMenus.cpp b/src/menus/LabelMenus.cpp index cc509fb93..29f9ecede 100644 --- a/src/menus/LabelMenus.cpp +++ b/src/menus/LabelMenus.cpp @@ -561,6 +561,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& LabelEditActions::Handler :: X) +// Under /MenuBar/Edit MenuTable::BaseItemSharedPtr LabelEditMenus() { using namespace MenuTable; @@ -576,9 +577,9 @@ MenuTable::BaseItemSharedPtr LabelEditMenus() static BaseItemSharedPtr menus{ FinderScope( findCommandHandler ).Eval( - Items( + Items( wxEmptyString, - Menu( XO("&Labels"), + Menu( wxT("Labels"), XO("&Labels"), Command( wxT("EditLabels"), XXO("&Edit Labels..."), FN(OnEditLabels), AudioIONotBusyFlag ), @@ -608,7 +609,7 @@ MenuTable::BaseItemSharedPtr LabelEditMenus() ///////////////////////////////////////////////////////////////////////////// - Menu( XO("La&beled Audio"), + Menu( wxT("Labeled"), XO("La&beled Audio"), /* i18n-hint: (verb)*/ Command( wxT("CutLabels"), XXO("&Cut"), FN(OnCutLabels), AudioIONotBusyFlag | LabelsSelectedFlag | WaveTracksExistFlag | diff --git a/src/menus/NavigationMenus.cpp b/src/menus/NavigationMenus.cpp index c5732058f..eaa7300b6 100644 --- a/src/menus/NavigationMenus.cpp +++ b/src/menus/NavigationMenus.cpp @@ -555,6 +555,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { #define FN(X) (& NavigationActions::Handler :: X) +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraGlobalCommands() { // Ceci n'est pas un menu @@ -563,7 +564,7 @@ MenuTable::BaseItemSharedPtr ExtraGlobalCommands() static BaseItemSharedPtr items{ FinderScope( findCommandHandler ).Eval( - Items( + Items( wxT("Navigation"), Command( wxT("PrevWindow"), XXO("Move Backward Through Active Windows"), FN(OnPrevWindow), AlwaysEnabledFlag, Options{ wxT("Alt+Shift+F6") }.IsGlobal() ), @@ -574,6 +575,7 @@ MenuTable::BaseItemSharedPtr ExtraGlobalCommands() return items; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraFocusMenu() { using namespace MenuTable; @@ -581,7 +583,7 @@ MenuTable::BaseItemSharedPtr ExtraFocusMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("F&ocus"), + Menu( wxT("Focus"), XO("F&ocus"), Command( wxT("PrevFrame"), XXO("Move &Backward from Toolbars to Tracks"), FN(OnPrevFrame), AlwaysEnabledFlag, wxT("Ctrl+Shift+F6") ), diff --git a/src/menus/PluginMenus.cpp b/src/menus/PluginMenus.cpp index 319ed0ebe..4e1f424ec 100644 --- a/src/menus/PluginMenus.cpp +++ b/src/menus/PluginMenus.cpp @@ -258,7 +258,7 @@ void AddEffectMenuItems( groupNames, groupPlugs, groupFlags, isDefault); - table.push_back( MenuOrItems( + table.push_back( MenuOrItems( wxEmptyString, ( bInSubmenu ? last : TranslatableString{} ), std::move( temp ) ) ); @@ -283,7 +283,7 @@ void AddEffectMenuItems( AddEffectMenuItemGroup(temp, groupNames, groupPlugs, groupFlags, isDefault); - table.push_back( MenuOrItems( + table.push_back( MenuOrItems( wxEmptyString, ( bInSubmenu ? current : TranslatableString{} ), std::move( temp ) ) ); } @@ -667,7 +667,7 @@ void AddEffectMenuItemGroup( i++; } - pTable->push_back( Menu( name, std::move( temp2 ) ) ); + pTable->push_back( Menu( wxEmptyString, name, std::move( temp2 ) ) ); i--; } else @@ -702,7 +702,7 @@ void AddEffectMenuItemGroup( end = groupCnt; } // Done collecting - table.push_back( Menu( + table.push_back( Menu( wxEmptyString, XO("Plug-in %d to %d").Format( groupNdx + 1, end ), std::move( temp1 ) ) ); @@ -741,6 +741,7 @@ MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags ) // Menu definitions +// Under /MenuBar MenuTable::BaseItemSharedPtr GenerateMenu() { using namespace MenuTable; @@ -749,7 +750,7 @@ MenuTable::BaseItemSharedPtr GenerateMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Generate"), + Menu( wxT("Generate"), XO("&Generate"), #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT Command( wxT("ManageGenerators"), XXO("Add / Remove Plug-ins..."), FN(OnManageGenerators), AudioIONotBusyFlag ), @@ -760,7 +761,7 @@ MenuTable::BaseItemSharedPtr GenerateMenu() // Delayed evaluation: [](AudacityProject &) - { return Items( PopulateEffectsMenu( + { return Items( wxEmptyString, PopulateEffectsMenu( EffectTypeGenerate, AudioIONotBusyFlag, AudioIONotBusyFlag) @@ -776,6 +777,7 @@ const ReservedCommandFlag } }; //lll +// Under /MenuBar MenuTable::BaseItemSharedPtr EffectMenu() { using namespace MenuTable; @@ -784,7 +786,7 @@ MenuTable::BaseItemSharedPtr EffectMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("Effe&ct"), + Menu( wxT("Effect"), XO("Effe&ct"), #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT Command( wxT("ManageEffects"), XXO("Add / Remove Plug-ins..."), FN(OnManageEffects), AudioIONotBusyFlag ), @@ -815,7 +817,7 @@ MenuTable::BaseItemSharedPtr EffectMenu() // Delayed evaluation: [](AudacityProject &) - { return Items( PopulateEffectsMenu( + { return Items( wxEmptyString, PopulateEffectsMenu( EffectTypeProcess, AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag, IsRealtimeNotActiveFlag ) @@ -825,6 +827,7 @@ MenuTable::BaseItemSharedPtr EffectMenu() return menu; } +// Under /MenuBar MenuTable::BaseItemSharedPtr AnalyzeMenu() { using namespace MenuTable; @@ -833,7 +836,7 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Analyze"), + Menu( wxT("Analyze"), XO("&Analyze"), #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT Command( wxT("ManageAnalyzers"), XXO("Add / Remove Plug-ins..."), FN(OnManageAnalyzers), AudioIONotBusyFlag ), @@ -850,7 +853,7 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu() // Delayed evaluation: [](AudacityProject&) - { return Items( PopulateEffectsMenu( + { return Items( wxEmptyString, PopulateEffectsMenu( EffectTypeAnalyze, AudioIONotBusyFlag | TimeSelectedFlag | WaveTracksSelectedFlag, IsRealtimeNotActiveFlag ) @@ -859,6 +862,7 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu() return menu; } +// Under /MenuBar MenuTable::BaseItemSharedPtr ToolsMenu() { using namespace MenuTable; @@ -866,7 +870,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("T&ools"), + Menu( wxT("Tools"), XO("T&ools"), #ifdef EXPERIMENTAL_EFFECT_MANAGEMENT Command( wxT("ManageTools"), XXO("Add / Remove Plug-ins..."), @@ -879,7 +883,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu() Command( wxT("ManageMacros"), XXO("&Macros..."), FN(OnManageMacros), AudioIONotBusyFlag ), - Menu( XO("&Apply Macro"), + Menu( wxT("Macros"), XO("&Apply Macro"), // Palette has no access key to ensure first letter navigation of // sub menu Command( wxT("ApplyMacrosPalette"), XXO("Palette..."), @@ -889,7 +893,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu() // Delayed evaluation: [](AudacityProject&) - { return Items( PopulateMacrosMenu( AudioIONotBusyFlag ) ); } + { return Items( wxEmptyString, PopulateMacrosMenu( AudioIONotBusyFlag ) ); } ), Separator(), @@ -910,7 +914,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu() // Delayed evaluation: [](AudacityProject&) - { return Items( PopulateEffectsMenu( + { return Items( wxEmptyString, PopulateEffectsMenu( EffectTypeTool, AudioIONotBusyFlag, AudioIONotBusyFlag ) @@ -940,6 +944,7 @@ MenuTable::BaseItemSharedPtr ToolsMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraScriptablesIMenu() { using namespace MenuTable; @@ -948,7 +953,7 @@ MenuTable::BaseItemSharedPtr ExtraScriptablesIMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( // i18n-hint: Scriptables are commands normally used from Python, Perl etc. - Menu( XO("Script&ables I"), + Menu( wxT("Scriptables1"), XO("Script&ables I"), // Note that the PLUGIN_SYMBOL must have a space between words, // whereas the short-form used here must not. // (So if you did write "CompareAudio" for the PLUGIN_SYMBOL name, then @@ -989,6 +994,7 @@ MenuTable::BaseItemSharedPtr ExtraScriptablesIMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraScriptablesIIMenu() { using namespace MenuTable; @@ -996,7 +1002,7 @@ MenuTable::BaseItemSharedPtr ExtraScriptablesIIMenu() // Less useful to VI users. static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("Scripta&bles II"), + Menu( wxT("Scriptables2"), XO("Scripta&bles II"), Command( wxT("Select"), XXO("Select..."), FN(OnAudacityCommand), AudioIONotBusyFlag ), Command( wxT("SetTrack"), XXO("Set Track..."), FN(OnAudacityCommand), diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index 3d7191bdc..0bd777e7e 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -1030,6 +1030,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { MenuTable::BaseItemSharedPtr ClipSelectMenu(); +// Under /MenuBar MenuTable::BaseItemSharedPtr SelectMenu() { using namespace MenuTable; @@ -1037,7 +1038,7 @@ MenuTable::BaseItemSharedPtr SelectMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( /* i18n-hint: (verb) It's an item on a menu. */ - Menu( XO("&Select"), + Menu( wxT("Select"), XO("&Select"), Command( wxT("SelectAll"), XXO("&All"), FN(OnSelectAll), TracksExistFlag, Options{ wxT("Ctrl+A"), XO("Select All") } ), @@ -1047,7 +1048,7 @@ MenuTable::BaseItemSharedPtr SelectMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("&Tracks"), + Menu( wxT("Tracks"), XO("&Tracks"), Command( wxT("SelAllTracks"), XXO("In All &Tracks"), FN(OnSelectAllTracks), TracksExistFlag, @@ -1064,7 +1065,7 @@ MenuTable::BaseItemSharedPtr SelectMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("R&egion"), + Menu( wxT("Region"), XO("R&egion"), Command( wxT("SetLeftSelection"), XXO("&Left at Playback Position"), FN(OnSetLeftSelection), TracksExistFlag, Options{ wxT("["), XO("Set Selection Left at Play Position") } ), @@ -1098,7 +1099,7 @@ MenuTable::BaseItemSharedPtr SelectMenu() ////////////////////////////////////////////////////////////////////////// #ifdef EXPERIMENTAL_SPECTRAL_EDITING - Menu( XO("S&pectral"), + Menu( wxT("Spectral"), XO("S&pectral"), Command( wxT("ToggleSpectralSelection"), XXO("To&ggle Spectral Selection"), FN(OnToggleSpectralSelection), TracksExistFlag, wxT("Q") ), @@ -1139,12 +1140,13 @@ MenuTable::BaseItemSharedPtr SelectMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraSelectionMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Selection"), + Menu( wxT("Select"), XO("&Selection"), Command( wxT("SnapToOff"), XXO("Snap-To &Off"), FN(OnSnapToOff), AlwaysEnabledFlag ), Command( wxT("SnapToNearest"), XXO("Snap-To &Nearest"), @@ -1183,6 +1185,7 @@ MenuTable::BaseItemSharedPtr ExtraSelectionMenu() MenuTable::BaseItemSharedPtr ClipCursorItems(); +// Under /MenuBar/Transport MenuTable::BaseItemSharedPtr CursorMenu() { using namespace MenuTable; @@ -1196,7 +1199,7 @@ MenuTable::BaseItemSharedPtr CursorMenu() // than 'Skip'. static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Cursor to"), + Menu( wxT("Cursor"), XO("&Cursor to"), Command( wxT("CursSelStart"), XXO("Selection Star&t"), FN(OnCursorSelStart), TimeSelectedFlag, @@ -1230,13 +1233,14 @@ MenuTable::BaseItemSharedPtr CursorMenu() MenuTable::BaseItemSharedPtr ExtraClipCursorItems(); +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraCursorMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Cursor"), + Menu( wxT("Cursor"), XO("&Cursor"), Command( wxT("CursorLeft"), XXO("Cursor &Left"), FN(OnCursorLeft), TracksExistFlag | TrackPanelHasFocus, wxT("Left\twantKeyup\tallowDup") ), @@ -1261,12 +1265,13 @@ MenuTable::BaseItemSharedPtr ExtraCursorMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraSeekMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("See&k"), + Menu( wxT("Seek"), XO("See&k"), Command( wxT("SeekLeftShort"), XXO("Short Seek &Left During Playback"), FN(OnSeekLeftShort), AudioIOBusyFlag, wxT("Left\tallowDup") ), Command( wxT("SeekRightShort"), diff --git a/src/menus/ToolbarMenus.cpp b/src/menus/ToolbarMenus.cpp index 711e097bc..6bb687645 100644 --- a/src/menus/ToolbarMenus.cpp +++ b/src/menus/ToolbarMenus.cpp @@ -253,6 +253,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& ToolbarActions::Handler :: X) +// Under /MenuBar/View MenuTable::BaseItemSharedPtr ToolbarsMenu() { using namespace MenuTable; @@ -262,7 +263,7 @@ MenuTable::BaseItemSharedPtr ToolbarsMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Toolbars"), + Menu( wxT("Toolbars"), XO("&Toolbars"), /* i18n-hint: (verb)*/ Command( wxT("ResetToolbars"), XXO("Reset Toolb&ars"), FN(OnResetToolBars), AlwaysEnabledFlag ), @@ -335,12 +336,13 @@ MenuTable::BaseItemSharedPtr ToolbarsMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraToolsMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("T&ools"), + Menu( wxT("Tools"), XO("T&ools"), Command( wxT("SelectTool"), XXO("&Selection Tool"), FN(OnSelectTool), AlwaysEnabledFlag, wxT("F1") ), Command( wxT("EnvelopeTool"), XXO("&Envelope Tool"), diff --git a/src/menus/TrackMenus.cpp b/src/menus/TrackMenus.cpp index 834d4431f..560f57923 100644 --- a/src/menus/TrackMenus.cpp +++ b/src/menus/TrackMenus.cpp @@ -1276,6 +1276,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& TrackActions::Handler :: X) +// Under /MenuBar MenuTable::BaseItemSharedPtr TracksMenu() { // Tracks Menu (formerly Project Menu) @@ -1284,8 +1285,8 @@ MenuTable::BaseItemSharedPtr TracksMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Tracks"), - Menu( XO("Add &New"), + Menu( wxT("Tracks"), XO("&Tracks"), + Menu( wxT("Add"), XO("Add &New"), Command( wxT("NewMonoTrack"), XXO("&Mono Track"), FN(OnNewWaveTrack), AudioIONotBusyFlag, wxT("Ctrl+Shift+N") ), Command( wxT("NewStereoTrack"), XXO("&Stereo Track"), @@ -1300,7 +1301,7 @@ MenuTable::BaseItemSharedPtr TracksMenu() Separator(), - Menu( XO("Mi&x"), + Menu( wxT("Mix"), XO("Mi&x"), // Delayed evaluation // Stereo to Mono is an oddball command that is also subject to control // by the plug-in manager, as if an effect. Decide whether to show or @@ -1336,14 +1337,14 @@ MenuTable::BaseItemSharedPtr TracksMenu() Separator(), - Menu( XO("M&ute/Unmute"), + Menu( wxT("Mute"), XO("M&ute/Unmute"), Command( wxT("MuteAllTracks"), XXO("&Mute All Tracks"), FN(OnMuteAllTracks), AudioIONotBusyFlag, wxT("Ctrl+U") ), Command( wxT("UnmuteAllTracks"), XXO("&Unmute All Tracks"), FN(OnUnmuteAllTracks), AudioIONotBusyFlag, wxT("Ctrl+Shift+U") ) ), - Menu( XO("&Pan"), + Menu( wxT("Pan"), XO("&Pan"), // As Pan changes are not saved on Undo stack, // pan settings for all tracks // in the project could very easily be lost unless we @@ -1363,7 +1364,7 @@ MenuTable::BaseItemSharedPtr TracksMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("&Align Tracks"), // XO("Just Move Tracks"), + Menu( wxT("Align"), XO("&Align Tracks"), // XO("Just Move Tracks"), // Mutual alignment of tracks independent of selection or zero CommandGroup(wxT("Align"), { @@ -1391,7 +1392,7 @@ MenuTable::BaseItemSharedPtr TracksMenu() #if 0 // TODO: Can these labels be made clearer? // Do we need this sub-menu at all? - Menu( XO("Move Sele&ction and Tracks"), { + Menu( wxT("MoveSelectionAndTracks"), XO("Move Sele&ction and Tracks"), { CommandGroup(wxT("AlignMove"), alignLabels, FN(OnAlignMoveSel), AudioIONotBusyFlag | TracksSelectedFlag), } ), @@ -1407,7 +1408,7 @@ MenuTable::BaseItemSharedPtr TracksMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("S&ort Tracks"), + Menu( wxT("Sort"), XO("S&ort Tracks"), Command( wxT("SortByTime"), XXO("By &Start Time"), FN(OnSortTime), TracksExistFlag, Options{}.LongName( XO("Sort by Time") ) ), @@ -1432,12 +1433,13 @@ MenuTable::BaseItemSharedPtr TracksMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraTrackMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Track"), + Menu( wxT("Track"), XO("&Track"), Command( wxT("TrackPan"), XXO("Change P&an on Focused Track..."), FN(OnTrackPan), TrackPanelHasFocus | TracksExistFlag, wxT("Shift+P") ), diff --git a/src/menus/TransportMenus.cpp b/src/menus/TransportMenus.cpp index 609c7f3b9..86f7f4fbc 100644 --- a/src/menus/TransportMenus.cpp +++ b/src/menus/TransportMenus.cpp @@ -970,6 +970,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { MenuTable::BaseItemSharedPtr CursorMenu(); +// Under /MenuBar MenuTable::BaseItemSharedPtr TransportMenu() { using namespace MenuTable; @@ -984,8 +985,8 @@ MenuTable::BaseItemSharedPtr TransportMenu() FinderScope( findCommandHandler ).Eval( /* i18n-hint: 'Transport' is the name given to the set of controls that play, record, pause etc. */ - Menu( XO("Tra&nsport"), - Menu( XO("Pl&aying"), + Menu( wxT("Transport"), XO("Tra&nsport"), + Menu( wxT("Play"), XO("Pl&aying"), /* i18n-hint: (verb) Start or Stop audio playback*/ Command( wxT("PlayStop"), XXO("Pl&ay/Stop"), FN(OnPlayStop), CanStopAudioStreamFlag, wxT("Space") ), @@ -997,7 +998,7 @@ MenuTable::BaseItemSharedPtr TransportMenu() CanStopAudioStreamFlag, wxT("P") ) ), - Menu( XO("&Recording"), + Menu( wxT("Record"), XO("&Recording"), /* i18n-hint: (verb)*/ Command( wxT("Record1stChoice"), XXO("&Record"), FN(OnRecord), CanStopFlags, wxT("R") ), @@ -1045,7 +1046,7 @@ MenuTable::BaseItemSharedPtr TransportMenu() ////////////////////////////////////////////////////////////////////////// - Menu( XO("Pla&y Region"), + Menu( wxT("PlayRegion"), XO("Pla&y Region"), Command( wxT("LockPlayRegion"), XXO("&Lock"), FN(OnLockPlayRegion), PlayRegionNotLockedFlag ), Command( wxT("UnlockPlayRegion"), XXO("&Unlock"), @@ -1057,7 +1058,7 @@ MenuTable::BaseItemSharedPtr TransportMenu() Command( wxT("RescanDevices"), XXO("R&escan Audio Devices"), FN(OnRescanDevices), AudioIONotBusyFlag | CanStopAudioStreamFlag ), - Menu( XO("Transport &Options"), + Menu( wxT("Options"), XO("Transport &Options"), // Sound Activated recording options Command( wxT("SoundActivationLevel"), XXO("Sound Activation Le&vel..."), FN(OnSoundActivated), @@ -1094,12 +1095,13 @@ MenuTable::BaseItemSharedPtr TransportMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraTransportMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("T&ransport"), + Menu( wxT("Transport"), XO("T&ransport"), // PlayStop is already in the menus. /* i18n-hint: (verb) Start playing audio*/ Command( wxT("Play"), XXO("Pl&ay"), FN(OnPlayStop), @@ -1145,12 +1147,13 @@ MenuTable::BaseItemSharedPtr ExtraTransportMenu() return menu; } +// Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraPlayAtSpeedMenu() { using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Play-at-Speed"), + Menu( wxT("PlayAtSpeed"), XO("&Play-at-Speed"), /* i18n-hint: 'Normal Play-at-Speed' doesn't loop or cut preview. */ Command( wxT("PlayAtSpeed"), XXO("Normal Pl&ay-at-Speed"), FN(OnPlayAtSpeed), CaptureNotBusyFlag ), diff --git a/src/menus/ViewMenus.cpp b/src/menus/ViewMenus.cpp index 75e6d20b2..397f699b0 100644 --- a/src/menus/ViewMenus.cpp +++ b/src/menus/ViewMenus.cpp @@ -434,6 +434,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { MenuTable::BaseItemSharedPtr ToolbarsMenu(); +// Under /MenuBar MenuTable::BaseItemSharedPtr ViewMenu() { using namespace MenuTable; @@ -443,8 +444,8 @@ MenuTable::BaseItemSharedPtr ViewMenu() static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&View"), - Menu( XO("&Zoom"), + Menu( wxT("View"), XO("&View"), + Menu( wxT("Zoom"), XO("&Zoom"), Command( wxT("ZoomIn"), XXO("Zoom &In"), FN(OnZoomIn), ZoomInAvailableFlag, wxT("Ctrl+1") ), Command( wxT("ZoomNormal"), XXO("Zoom &Normal"), FN(OnZoomNormal), @@ -461,7 +462,7 @@ MenuTable::BaseItemSharedPtr ViewMenu() Options{}.CheckTest( wxT("/GUI/VerticalZooming"), false ) ) ), - Menu( XO("T&rack Size"), + Menu( wxT("TrackSize"), XO("T&rack Size"), Command( wxT("FitInWindow"), XXO("&Fit to Width"), FN(OnZoomFit), TracksExistFlag, wxT("Ctrl+F") ), Command( wxT("FitV"), XXO("Fit to &Height"), FN(OnZoomFitV), @@ -472,7 +473,7 @@ MenuTable::BaseItemSharedPtr ViewMenu() FN(OnExpandAllTracks), TracksExistFlag, wxT("Ctrl+Shift+X") ) ), - Menu( XO("Sk&ip to"), + Menu( wxT("SkipTo"), XO("Sk&ip to"), Command( wxT("SkipSelStart"), XXO("Selection Sta&rt"), FN(OnGoSelStart), TimeSelectedFlag, Options{ wxT("Ctrl+["), XO("Skip to Selection Start") } ), diff --git a/src/menus/WindowMenus.cpp b/src/menus/WindowMenus.cpp index 43199dd96..5c74eca8e 100644 --- a/src/menus/WindowMenus.cpp +++ b/src/menus/WindowMenus.cpp @@ -118,6 +118,7 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& WindowActions::Handler :: X) +// Under /MenuBar MenuTable::BaseItemSharedPtr WindowMenu() { ////////////////////////////////////////////////////////////////////////// @@ -126,7 +127,7 @@ MenuTable::BaseItemSharedPtr WindowMenu() using namespace MenuTable; static BaseItemSharedPtr menu{ FinderScope( findCommandHandler ).Eval( - Menu( XO("&Window"), + Menu( wxT("Window"), XO("&Window"), /* i18n-hint: Standard Macintosh Window menu item: Make (the current * window) shrink to an icon on the dock */ Command( wxT("MacMinimize"), XXO("&Minimize"), FN(OnMacMinimize), @@ -146,12 +147,13 @@ MenuTable::BaseItemSharedPtr WindowMenu() return menu; } +// Under /MenuBar/Optional/Extra/Misc MenuTable::BaseItemSharedPtr ExtraWindowItems() { using namespace MenuTable; static BaseItemSharedPtr items{ FinderScope( findCommandHandler ).Eval( - Items( + Items( wxT("MacWindows"), /* i18n-hint: Shrink all project windows to icons on the Macintosh tooldock */ Command( wxT("MacMinimizeAll"), XXO("Minimize All Projects"), diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index ffb576711..82131e931 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -1135,7 +1135,7 @@ MenuTable::BaseItemSharedPtr Scrubber::Menu() [](AudacityProject &project) -> CommandHandlerObject& { return Scrubber::Get( project ); } ).Eval( - MenuTable::Menu( + MenuTable::Menu( wxT("Scrubbing"), XO("Scru&bbing"), []{ BaseItemPtrs ptrs;