From 5277584bb0d6989b7972d67e07354b80c56caa2a Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 20 Oct 2018 14:01:20 -0400 Subject: [PATCH] Hide details of managing occult command items --- src/Menus.cpp | 11 ++--------- src/commands/CommandManager.cpp | 19 +++++++++++++++++-- src/commands/CommandManager.h | 4 +++- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 3400b68c6..997fb03fa 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -390,7 +390,6 @@ void MenuCreator::CreateMenusAndCommands(AudacityProject &project) { auto menubar = c->AddMenuBar(wxT("appmenu")); wxASSERT(menubar); - c->SetOccultCommands( false ); ///////////////////////////////////////////////////////////////////////////// // File menu @@ -1394,14 +1393,9 @@ void MenuCreator::CreateMenusAndCommands(AudacityProject &project) bool bShowExtraMenus; gPrefs->Read(wxT("/GUI/ShowExtraMenus"), &bShowExtraMenus, false); - std::unique_ptr menubar2; if( !bShowExtraMenus ) { - // Make a temporary menu bar collecting items added below. - // This bar will be discarded but other side effects on the command - // manager persist. - menubar2 = c->AddMenuBar(wxT("ext-menu")); - c->SetOccultCommands(true); + c->BeginOccultCommands(); } ///////////////////////////////////////////////////////////////////////////// @@ -1794,8 +1788,7 @@ void MenuCreator::CreateMenusAndCommands(AudacityProject &project) if (!bShowExtraMenus) { - c->PopMenuBar(); - c->SetOccultCommands(false); + c->EndOccultCommands(); } ///////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 28b149532..0d6800379 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -1831,9 +1831,24 @@ void CommandManager::WriteXML(XMLWriter &xmlFile) const xmlFile.EndTag(wxT("audacitykeyboard")); } -void CommandManager::SetOccultCommands( bool bOccult) +void CommandManager::BeginOccultCommands() { - bMakingOccultCommands = bOccult; + // To do: perhaps allow occult item switching at lower levels of the + // menu tree. + wxASSERT( !CurrentMenu() ); + + // Make a temporary menu bar collecting items added after. + // This bar will be discarded but other side effects on the command + // manager persist. + mTempMenuBar = AddMenuBar(wxT("ext-menu")); + bMakingOccultCommands = true; +} + +void CommandManager::EndOccultCommands() +{ + PopMenuBar(); + bMakingOccultCommands = false; + mTempMenuBar.reset(); } void CommandManager::SetCommandFlags(const wxString &name, diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index 2d2bc97a7..1186cd2a6 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -212,7 +212,8 @@ class AUDACITY_DLL_API CommandManager final : public XMLTagHandler CommandFlag flags); void PopMenuBar(); - void SetOccultCommands( bool bOccult); + void BeginOccultCommands(); + void EndOccultCommands(); void SetCommandFlags(const wxString &name, CommandFlag flags, CommandMask mask); @@ -394,6 +395,7 @@ private: wxMenu *mCurrentMenu {}; bool bMakingOccultCommands; + std::unique_ptr< wxMenuBar > mTempMenuBar; }; #endif