From 646afe95595c70647076352a42bdabc269bbaa74 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 2 Feb 2020 16:52:09 -0500 Subject: [PATCH 1/3] comments --- src/widgets/PopupMenuTable.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/widgets/PopupMenuTable.h b/src/widgets/PopupMenuTable.h index 9e3a98ef8..85161adba 100644 --- a/src/widgets/PopupMenuTable.h +++ b/src/widgets/PopupMenuTable.h @@ -114,17 +114,18 @@ Then in MyTable.cpp, void MyTable::InitUserData(void *pUserData) { + // Remember pData auto pData = static_cast(pUserData); } void MyTable::InitMenu(Menu *pMenu) { - // Remember pData, enable or disable menu items + // enable or disable menu items } void MyTable::DestroyMenu() { -// Do cleanup + // Do cleanup } BEGIN_POPUP_MENU(MyTable) From 48b5988c7dcd4417a4f4450bfac0b54aabb42fcf Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 2 Feb 2020 17:08:37 -0500 Subject: [PATCH 2/3] Be sure PopupMenuTable::DestroyMenu() gets called... ... though it didn't matter yet for any of the overrides --- src/widgets/PopupMenuTable.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/widgets/PopupMenuTable.cpp b/src/widgets/PopupMenuTable.cpp index 454878b5a..e9591fc6a 100644 --- a/src/widgets/PopupMenuTable.cpp +++ b/src/widgets/PopupMenuTable.cpp @@ -64,6 +64,7 @@ void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable) } pTable->InitMenu(this); + tables.push_back( pTable ); } void PopupMenuTable::Menu::DisconnectTable(PopupMenuTable *pTable) From 6e57428e47245db2a7e8838b1f8c3606f8f69b14 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sun, 2 Feb 2020 17:32:23 -0500 Subject: [PATCH 3/3] PopupMenuTable does not need TranslatableArray... ... because the strings in it are TranslatableString, not translated --- .../wavetrack/ui/WaveTrackControls.cpp | 3 +-- src/widgets/PopupMenuTable.h | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 53ce154a3..0ae722700 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -608,9 +608,8 @@ protected: WaveTrackMenuTable &WaveTrackMenuTable::Instance( Track * pTrack ) { static WaveTrackMenuTable instance; - wxCommandEvent evt; // Clear it out so we force a repopulate - instance.Invalidate( evt ); + instance.Clear(); // Ensure we know how to populate. // Messy, but the design does not seem to offer an alternative. // We won't use pTrack after populate. diff --git a/src/widgets/PopupMenuTable.h b/src/widgets/PopupMenuTable.h index 85161adba..562324d08 100644 --- a/src/widgets/PopupMenuTable.h +++ b/src/widgets/PopupMenuTable.h @@ -25,7 +25,6 @@ class wxString; #include "../MemoryX.h" #include "../Internat.h" -#include "../TranslatableStringArray.h" class PopupMenuTable; @@ -53,7 +52,7 @@ struct PopupMenuTableEntry bool IsValid() const { return type != Invalid; } }; -class PopupMenuTable : public TranslatableArray< std::vector > +class PopupMenuTable : public wxEvtHandler { public: typedef PopupMenuTableEntry Entry; @@ -95,6 +94,20 @@ public: // No memory management responsibility is assumed by this function. static std::unique_ptr BuildMenu (wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL); + +protected: + virtual void Populate() = 0; + void Clear() { mContents.clear(); } + + using Entries = std::vector; + const Entries& Get() + { + if (mContents.empty()) + Populate(); + return mContents; + } + + Entries mContents; }; /*