From de08d9ff86f7d73da50074a6d6be34b1a84a4d67 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 14 Jan 2019 14:35:35 -0500 Subject: [PATCH] Menus.cpp no longer link dependent on top level menu definitions... ... They all use the registry. (This link dependency was not shown in diagrams generated by scripts/graph.pl, because it was not reflected in Menus.h but was done using extern declarations within Menus.cpp. That was a cheat, but it let all the other dependencies be exposed in the graph and mitigated first.) --- src/Menus.cpp | 45 ++++-------------------------------- src/menus/EditMenus.cpp | 13 +++++++---- src/menus/ExtraMenus.cpp | 31 ++++++++++++++----------- src/menus/FileMenus.cpp | 13 ++++++++--- src/menus/HelpMenus.cpp | 13 ++++++++--- src/menus/PluginMenus.cpp | 42 +++++++++++++++++++++------------ src/menus/SelectMenus.cpp | 17 +++++++------- src/menus/TrackMenus.cpp | 12 +++++++--- src/menus/TransportMenus.cpp | 13 +++++++---- src/menus/ViewMenus.cpp | 11 +++++++-- src/menus/WindowMenus.cpp | 19 +++++++-------- 11 files changed, 124 insertions(+), 105 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 7edc7dabe..9f5f3b2a7 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -945,29 +945,6 @@ void Visit( Visitor &visitor, BaseItem *pTopItem, GroupItem *pRegistry ) /// changes in configured preferences - for example changes in key-bindings /// affect the short-cut key legend that appears beside each command, -MenuTable::BaseItemSharedPtr FileMenu(); - -MenuTable::BaseItemSharedPtr EditMenu(); - -MenuTable::BaseItemSharedPtr SelectMenu(); - -MenuTable::BaseItemSharedPtr ViewMenu(); - -MenuTable::BaseItemSharedPtr TransportMenu(); - -MenuTable::BaseItemSharedPtr TracksMenu(); - -MenuTable::BaseItemSharedPtr GenerateMenu(); -MenuTable::BaseItemSharedPtr EffectMenu(); -MenuTable::BaseItemSharedPtr AnalyzeMenu(); -MenuTable::BaseItemSharedPtr ToolsMenu(); - -MenuTable::BaseItemSharedPtr WindowMenu(); - -MenuTable::BaseItemSharedPtr ExtraMenu(); - -MenuTable::BaseItemSharedPtr HelpMenu(); - namespace { static Registry::GroupItem &sRegistry() { @@ -982,24 +959,6 @@ MenuTable::AttachedItem::AttachedItem( Registry::RegisterItem( sRegistry(), placement, std::move( pItem ) ); } -// Table of menu factories. -// TODO: devise a registration system instead. -static const auto menuTree = MenuTable::Items( MenuPathStart - , FileMenu() - , EditMenu() - , SelectMenu() - , ViewMenu() - , TransportMenu() - , TracksMenu() - , GenerateMenu() - , EffectMenu() - , AnalyzeMenu() - , ToolsMenu() - , WindowMenu() - , ExtraMenu() - , HelpMenu() -); - namespace { // Once only, cause initial population of preferences for the ordering @@ -1014,6 +973,9 @@ void InitializeMenuOrdering() { using Pair = std::pair; static const Pair pairs [] = { + {wxT(""), wxT( +"File,Edit,Select,View,Transport,Tracks,Generate,Effect,Analyze,Tools,Window,Optional,Help" + )}, {wxT("/View/Windows"), wxT("UndoHistory,Karaoke,MixerBoard")}, {wxT("/Analyze/Analyzers/Windows"), wxT("ContrastAnalyser,PlotSpectrum")}, }; @@ -1160,6 +1122,7 @@ void MenuCreator::CreateMenusAndCommands(AudacityProject &project) void MenuManager::Visit( MenuVisitor &visitor ) { + static const auto menuTree = MenuTable::Items( MenuPathStart ); Registry::Visit( visitor, menuTree.get(), &sRegistry() ); } diff --git a/src/menus/EditMenus.cpp b/src/menus/EditMenus.cpp index 7e05ad92c..45297611c 100644 --- a/src/menus/EditMenus.cpp +++ b/src/menus/EditMenus.cpp @@ -1024,10 +1024,10 @@ static const ReservedCommandFlag cutCopyOptions() }; return flag; } -// Under /MenuBar -MenuTable::BaseItemSharedPtr EditMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr EditMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static const auto NotBusyTimeAndTracksFlags = @@ -1164,10 +1164,15 @@ MenuTable::BaseItemSharedPtr EditMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( EditMenu() ) +}; +} + // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraEditMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static const auto flags = AudioIONotBusyFlag() | TracksSelectedFlag() | TimeSelectedFlag(); diff --git a/src/menus/ExtraMenus.cpp b/src/menus/ExtraMenus.cpp index 8c151c763..2dbde09df 100644 --- a/src/menus/ExtraMenus.cpp +++ b/src/menus/ExtraMenus.cpp @@ -151,15 +151,16 @@ MenuTable::BaseItemSharedPtr ExtraScriptablesIIMenu(); MenuTable::BaseItemSharedPtr ExtraWindowItems(); MenuTable::BaseItemSharedPtr ExtraGlobalCommands(); MenuTable::BaseItemSharedPtr ExtraFocusMenu(); -MenuTable::BaseItemSharedPtr ExtraMenu(); -MenuTable::BaseItemSharedPtr ExtraMixerMenu(); -MenuTable::BaseItemSharedPtr ExtraDeviceMenu(); -MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject & ); -MenuTable::BaseItemSharedPtr ExtraMenu() +namespace { +using namespace MenuTable; + +BaseItemSharedPtr ExtraMixerMenu(); +BaseItemSharedPtr ExtraDeviceMenu(); +BaseItemPtr ExtraMiscItems( AudacityProject & ); + +BaseItemSharedPtr ExtraMenu() { - using namespace MenuTable; - // Table of menu factories. // TODO: devise a registration system instead. static BaseItemSharedPtr extraItems{ Items( wxEmptyString, @@ -196,10 +197,14 @@ MenuTable::BaseItemSharedPtr ExtraMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( ExtraMenu() ) +}; + // Under /MenuBar/Optional/Extra -MenuTable::BaseItemSharedPtr ExtraMixerMenu() +BaseItemSharedPtr ExtraMixerMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Mixer"), XO("Mi&xer"), @@ -220,9 +225,8 @@ MenuTable::BaseItemSharedPtr ExtraMixerMenu() } // Under /MenuBar/Optional/Extra -MenuTable::BaseItemSharedPtr ExtraDeviceMenu() +BaseItemSharedPtr ExtraDeviceMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Device"), XO("De&vice"), @@ -242,9 +246,8 @@ MenuTable::BaseItemSharedPtr ExtraDeviceMenu() } // Under /MenuBar/Optional/Extra -MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project ) +BaseItemPtr ExtraMiscItems( AudacityProject &project ) { - using namespace MenuTable; using Options = CommandManager::Options; constexpr auto key = @@ -269,4 +272,6 @@ MenuTable::BaseItemPtr ExtraMiscItems( AudacityProject &project ) ) ); } +} + #undef FN diff --git a/src/menus/FileMenus.cpp b/src/menus/FileMenus.cpp index c60ceeb14..d7b60c039 100644 --- a/src/menus/FileMenus.cpp +++ b/src/menus/FileMenus.cpp @@ -551,10 +551,11 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& FileActions::Handler :: X) -// under /MenuBar -MenuTable::BaseItemSharedPtr FileMenu() +namespace { +using namespace MenuTable; + +BaseItemSharedPtr FileMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static BaseItemSharedPtr menu{ @@ -705,4 +706,10 @@ MenuTable::BaseItemSharedPtr FileMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( FileMenu() ) +}; +} + #undef FN diff --git a/src/menus/HelpMenus.cpp b/src/menus/HelpMenus.cpp index 11c80e7a4..c950cc652 100644 --- a/src/menus/HelpMenus.cpp +++ b/src/menus/HelpMenus.cpp @@ -523,10 +523,10 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& HelpActions::Handler :: X) -// Under /MenuBar -MenuTable::BaseItemSharedPtr HelpMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr HelpMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Help"), XO("&Help"), @@ -602,4 +602,11 @@ MenuTable::BaseItemSharedPtr HelpMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( HelpMenu() ) +}; + +} + #undef FN diff --git a/src/menus/PluginMenus.cpp b/src/menus/PluginMenus.cpp index 3e8a34c6c..46e992cad 100644 --- a/src/menus/PluginMenus.cpp +++ b/src/menus/PluginMenus.cpp @@ -701,9 +701,10 @@ MenuTable::BaseItemPtrs PopulateMacrosMenu( CommandFlag flags ) // Menu definitions // Under /MenuBar -MenuTable::BaseItemSharedPtr GenerateMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr GenerateMenu() { - using namespace MenuTable; // All of this is a bit hacky until we can get more things connected into // the plugin manager...sorry! :-( @@ -737,10 +738,13 @@ static const ReservedCommandFlag } }; return flag; } //lll -// Under /MenuBar -MenuTable::BaseItemSharedPtr EffectMenu() +AttachedItem sAttachment1{ + wxT(""), + Shared( GenerateMenu() ) +}; + +BaseItemSharedPtr EffectMenu() { - using namespace MenuTable; // All of this is a bit hacky until we can get more things connected into // the plugin manager...sorry! :-( @@ -787,10 +791,13 @@ MenuTable::BaseItemSharedPtr EffectMenu() return menu; } -// Under /MenuBar -MenuTable::BaseItemSharedPtr AnalyzeMenu() +AttachedItem sAttachment2{ + wxT(""), + Shared( EffectMenu() ) +}; + +BaseItemSharedPtr AnalyzeMenu() { - using namespace MenuTable; // All of this is a bit hacky until we can get more things connected into // the plugin manager...sorry! :-( @@ -819,10 +826,13 @@ MenuTable::BaseItemSharedPtr AnalyzeMenu() return menu; } -// Under /MenuBar -MenuTable::BaseItemSharedPtr ToolsMenu() +AttachedItem sAttachment3{ + wxT(""), + Shared( AnalyzeMenu() ) +}; + +BaseItemSharedPtr ToolsMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static BaseItemSharedPtr menu{ @@ -903,11 +913,15 @@ MenuTable::BaseItemSharedPtr ToolsMenu() return menu; } +AttachedItem sAttachment4{ + wxT(""), + Shared( ToolsMenu() ) +}; +} + // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraScriptablesIMenu() { - using namespace MenuTable; - // These are the more useful to VI user Scriptables. static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, @@ -956,8 +970,6 @@ MenuTable::BaseItemSharedPtr ExtraScriptablesIMenu() // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraScriptablesIIMenu() { - using namespace MenuTable; - // Less useful to VI users. static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index f1005e8ba..36c0243fe 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -1030,10 +1030,10 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { MenuTable::BaseItemSharedPtr ClipSelectMenu(); -// Under /MenuBar -MenuTable::BaseItemSharedPtr SelectMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr SelectMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, @@ -1144,10 +1144,15 @@ MenuTable::BaseItemSharedPtr SelectMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( SelectMenu() ) +}; +} + // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraSelectionMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Select"), XO("&Selection"), @@ -1192,7 +1197,6 @@ MenuTable::BaseItemSharedPtr ClipCursorItems(); // Under /MenuBar/Transport MenuTable::BaseItemSharedPtr CursorMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static const auto CanStopFlags = AudioIONotBusyFlag() | CanStopAudioStreamFlag(); @@ -1240,8 +1244,6 @@ MenuTable::BaseItemSharedPtr ExtraClipCursorItems(); // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraCursorMenu() { - using namespace MenuTable; - static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Cursor"), XO("&Cursor"), @@ -1272,7 +1274,6 @@ MenuTable::BaseItemSharedPtr ExtraCursorMenu() // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraSeekMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Seek"), XO("See&k"), diff --git a/src/menus/TrackMenus.cpp b/src/menus/TrackMenus.cpp index 3da7cc54a..d9bff59bf 100644 --- a/src/menus/TrackMenus.cpp +++ b/src/menus/TrackMenus.cpp @@ -1278,10 +1278,11 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& TrackActions::Handler :: X) // Under /MenuBar -MenuTable::BaseItemSharedPtr TracksMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr TracksMenu() { // Tracks Menu (formerly Project Menu) - using namespace MenuTable; using Options = CommandManager::Options; static BaseItemSharedPtr menu{ @@ -1437,10 +1438,15 @@ MenuTable::BaseItemSharedPtr TracksMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( TracksMenu() ) +}; +} + // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraTrackMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Track"), XO("&Track"), diff --git a/src/menus/TransportMenus.cpp b/src/menus/TransportMenus.cpp index 0d7e38303..567c0c3da 100644 --- a/src/menus/TransportMenus.cpp +++ b/src/menus/TransportMenus.cpp @@ -971,9 +971,10 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { MenuTable::BaseItemSharedPtr CursorMenu(); // Under /MenuBar -MenuTable::BaseItemSharedPtr TransportMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr TransportMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static const auto checkOff = Options{}.CheckState( false ); @@ -1098,10 +1099,15 @@ MenuTable::BaseItemSharedPtr TransportMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( TransportMenu() ) +}; +} + // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraTransportMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Transport"), XO("T&ransport"), @@ -1153,7 +1159,6 @@ MenuTable::BaseItemSharedPtr ExtraTransportMenu() // Under /MenuBar/Optional/Extra MenuTable::BaseItemSharedPtr ExtraPlayAtSpeedMenu() { - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("PlayAtSpeed"), XO("&Play-at-Speed"), diff --git a/src/menus/ViewMenus.cpp b/src/menus/ViewMenus.cpp index ce570c21b..f6c1026ff 100644 --- a/src/menus/ViewMenus.cpp +++ b/src/menus/ViewMenus.cpp @@ -385,9 +385,10 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &project) { MenuTable::BaseItemSharedPtr ToolbarsMenu(); // Under /MenuBar -MenuTable::BaseItemSharedPtr ViewMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr ViewMenu() { - using namespace MenuTable; using Options = CommandManager::Options; static const auto checkOff = Options{}.CheckState( false ); @@ -463,4 +464,10 @@ MenuTable::BaseItemSharedPtr ViewMenu() } +AttachedItem sAttachment1{ + wxT(""), + Shared( ViewMenu() ) +}; +} + #undef FN diff --git a/src/menus/WindowMenus.cpp b/src/menus/WindowMenus.cpp index fc733ff85..19701dfa5 100644 --- a/src/menus/WindowMenus.cpp +++ b/src/menus/WindowMenus.cpp @@ -118,13 +118,13 @@ static CommandHandlerObject &findCommandHandler(AudacityProject &) { #define FN(X) (& WindowActions::Handler :: X) -// Under /MenuBar -MenuTable::BaseItemSharedPtr WindowMenu() +namespace { +using namespace MenuTable; +BaseItemSharedPtr WindowMenu() { ////////////////////////////////////////////////////////////////////////// // poor imitation of the Mac Windows Menu ////////////////////////////////////////////////////////////////////////// - using namespace MenuTable; static BaseItemSharedPtr menu{ ( FinderScope{ findCommandHandler }, Menu( wxT("Window"), XO("&Window"), @@ -149,10 +149,16 @@ MenuTable::BaseItemSharedPtr WindowMenu() return menu; } +AttachedItem sAttachment1{ + wxT(""), + Shared( WindowMenu() ) +}; + +} + // Under /MenuBar/Optional/Extra/Misc MenuTable::BaseItemSharedPtr ExtraWindowItems() { - using namespace MenuTable; static BaseItemSharedPtr items{ ( FinderScope{ findCommandHandler }, Items( wxT("MacWindows"), @@ -170,11 +176,6 @@ MenuTable::BaseItemSharedPtr ExtraWindowItems() #else // Not WXMAC. Stub functions. -MenuTable::BaseItemSharedPtr WindowMenu() -{ - return nullptr; -} - MenuTable::BaseItemSharedPtr ExtraWindowItems() { return nullptr;