From 393a098b69ae7f0db002ac53b8bf3274824105db Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 9 Jan 2019 16:02:51 -0500 Subject: [PATCH] Store a string identifier in each menu item... ... which is not yet used for anything. It could be used to describe textual paths for attaching plug-in menu items. Strings are only path local, not necessarily globally unique, and may be left empty for separators and for groups that should be transparent to path identification. It may also be empty for certain sub-menus, such as those that group effects according to the changeable criteria in Preferences. --- src/Menus.cpp | 23 ++++--- src/commands/CommandManager.h | 124 +++++++++++++++++++++++----------- src/menus/ClipMenus.cpp | 11 +-- src/menus/EditMenus.cpp | 13 ++-- src/menus/ExtraMenus.cpp | 18 ++--- src/menus/FileMenus.cpp | 14 ++-- src/menus/HelpMenus.cpp | 5 +- src/menus/LabelMenus.cpp | 7 +- src/menus/NavigationMenus.cpp | 6 +- src/menus/PluginMenus.cpp | 38 ++++++----- src/menus/SelectMenus.cpp | 21 +++--- src/menus/ToolbarMenus.cpp | 6 +- src/menus/TrackMenus.cpp | 20 +++--- src/menus/TransportMenus.cpp | 17 +++-- src/menus/ViewMenus.cpp | 9 +-- src/menus/WindowMenus.cpp | 6 +- src/tracks/ui/Scrubbing.cpp | 2 +- 17 files changed, 211 insertions(+), 129 deletions(-) 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;