mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-16 16:10:06 +02:00
Separate storing of user data from initialization of popup items
This commit is contained in:
parent
0256156dec
commit
12bbafe013
@ -43,7 +43,7 @@ class LabelTrackMenuTable : public PopupMenuTable
|
|||||||
public:
|
public:
|
||||||
static LabelTrackMenuTable &Instance();
|
static LabelTrackMenuTable &Instance();
|
||||||
|
|
||||||
void InitMenu(Menu*, void *pUserData) override
|
void InitUserData(void *pUserData) override
|
||||||
{
|
{
|
||||||
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,7 @@ public:
|
|||||||
static NoteTrackMenuTable &Instance();
|
static NoteTrackMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu*, void *pUserData) override
|
void InitUserData(void *pUserData) override
|
||||||
{
|
{
|
||||||
mpData = static_cast<NoteTrackControlsBase::InitMenuData*>(pUserData);
|
mpData = static_cast<NoteTrackControlsBase::InitMenuData*>(pUserData);
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ private:
|
|||||||
mpData = nullptr;
|
mpData = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance()
|
NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance()
|
||||||
@ -218,7 +218,7 @@ NoteTrackVRulerMenuTable &NoteTrackVRulerMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteTrackVRulerMenuTable::InitMenu(Menu *WXUNUSED(pMenu), void *pUserData)
|
void NoteTrackVRulerMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<InitMenuData*>(pUserData);
|
mpData = static_cast<InitMenuData*>(pUserData);
|
||||||
}
|
}
|
||||||
|
@ -265,9 +265,9 @@ PopupMenuTable &SpectrumVRulerMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void SpectrumVRulerMenuTable::InitMenu(Menu *pMenu)
|
||||||
{
|
{
|
||||||
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
|
WaveTrackVRulerMenuTable::InitMenu(pMenu);
|
||||||
|
|
||||||
WaveTrack *const wt = mpData->pTrack;
|
WaveTrack *const wt = mpData->pTrack;
|
||||||
const int id =
|
const int id =
|
||||||
|
@ -83,7 +83,7 @@ public:
|
|||||||
static PopupMenuTable &Instance();
|
static PopupMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void OnSpectrumScaleType(wxCommandEvent &evt);
|
void OnSpectrumScaleType(wxCommandEvent &evt);
|
||||||
};
|
};
|
||||||
|
@ -155,7 +155,8 @@ public:
|
|||||||
static WaveColorMenuTable &Instance();
|
static WaveColorMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
{
|
{
|
||||||
@ -174,9 +175,13 @@ WaveColorMenuTable &WaveColorMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveColorMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void WaveColorMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WaveColorMenuTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
auto WaveColorId = IdOfWaveColor( pTrack->GetWaveColorIndex());
|
auto WaveColorId = IdOfWaveColor( pTrack->GetWaveColorIndex());
|
||||||
SetMenuChecks(*pMenu, [=](int id){ return id == WaveColorId; });
|
SetMenuChecks(*pMenu, [=](int id){ return id == WaveColorId; });
|
||||||
@ -247,7 +252,8 @@ public:
|
|||||||
static FormatMenuTable &Instance();
|
static FormatMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
{
|
{
|
||||||
@ -267,9 +273,13 @@ FormatMenuTable &FormatMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormatMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void FormatMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FormatMenuTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
auto formatId = IdOfFormat(pTrack->GetSampleFormat());
|
auto formatId = IdOfFormat(pTrack->GetSampleFormat());
|
||||||
SetMenuChecks(*pMenu, [=](int id){ return id == formatId; });
|
SetMenuChecks(*pMenu, [=](int id){ return id == formatId; });
|
||||||
@ -363,7 +373,8 @@ public:
|
|||||||
static RateMenuTable &Instance();
|
static RateMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
{
|
{
|
||||||
@ -385,9 +396,13 @@ RateMenuTable &RateMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RateMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void RateMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RateMenuTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
const auto rateId = IdOfRate((int)pTrack->GetRate());
|
const auto rateId = IdOfRate((int)pTrack->GetRate());
|
||||||
SetMenuChecks(*pMenu, [=](int id){ return id == rateId; });
|
SetMenuChecks(*pMenu, [=](int id){ return id == rateId; });
|
||||||
@ -557,7 +572,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
WaveTrackMenuTable() : mpData(NULL) {mpTrack=NULL;}
|
WaveTrackMenuTable() : mpData(NULL) {mpTrack=NULL;}
|
||||||
|
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
{
|
{
|
||||||
@ -597,9 +613,13 @@ WaveTrackMenuTable &WaveTrackMenuTable::Instance( Track * pTrack )
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void WaveTrackMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WaveTrackMenuTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
|
|
||||||
std::vector<int> checkedIds;
|
std::vector<int> checkedIds;
|
||||||
@ -637,7 +657,6 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
|||||||
|
|
||||||
if ( isMono )
|
if ( isMono )
|
||||||
{
|
{
|
||||||
mpData = static_cast<PlayableTrackControls::InitMenuData*>(pUserData);
|
|
||||||
WaveTrack *const pTrack2 = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack2 = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
|
|
||||||
auto next = * ++ tracks.Find(pTrack2);
|
auto next = * ++ tracks.Find(pTrack2);
|
||||||
|
@ -34,7 +34,7 @@ bool WaveTrackVZoomHandle::IsDragZooming(int zoomStart, int zoomEnd)
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Table class
|
// Table class
|
||||||
|
|
||||||
void WaveTrackVRulerMenuTable::InitMenu(Menu *, void *pUserData)
|
void WaveTrackVRulerMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<InitMenuData*>(pUserData);
|
mpData = static_cast<InitMenuData*>(pUserData);
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
WaveTrackVRulerMenuTable() {}
|
WaveTrackVRulerMenuTable() {}
|
||||||
|
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
|
@ -266,9 +266,9 @@ PopupMenuTable &WaveformVRulerMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaveformVRulerMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void WaveformVRulerMenuTable::InitMenu(Menu *pMenu)
|
||||||
{
|
{
|
||||||
WaveTrackVRulerMenuTable::InitMenu(pMenu, pUserData);
|
WaveTrackVRulerMenuTable::InitMenu(pMenu);
|
||||||
|
|
||||||
// DB setting is already on track drop down.
|
// DB setting is already on track drop down.
|
||||||
WaveTrack *const wt = mpData->pTrack;
|
WaveTrack *const wt = mpData->pTrack;
|
||||||
|
@ -83,7 +83,7 @@ public:
|
|||||||
static PopupMenuTable &Instance();
|
static PopupMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void InitMenu(Menu *pMenu, void *pUserData) override;
|
virtual void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void OnWaveformScaleType(wxCommandEvent &evt);
|
void OnWaveformScaleType(wxCommandEvent &evt);
|
||||||
};
|
};
|
||||||
|
@ -47,9 +47,13 @@ public:
|
|||||||
static TimeTrackMenuTable &Instance();
|
static TimeTrackMenuTable &Instance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override
|
void InitUserData(void *pUserData) override
|
||||||
{
|
{
|
||||||
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitMenu(Menu *pMenu) override
|
||||||
|
{
|
||||||
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
||||||
|
|
||||||
pMenu->Check(OnTimeTrackLogIntID, pTrack->GetInterpolateLog());
|
pMenu->Check(OnTimeTrackLogIntID, pTrack->GetInterpolateLog());
|
||||||
|
@ -90,7 +90,8 @@ private:
|
|||||||
void OnSetName(wxCommandEvent &);
|
void OnSetName(wxCommandEvent &);
|
||||||
void OnMoveTrack(wxCommandEvent &event);
|
void OnMoveTrack(wxCommandEvent &event);
|
||||||
|
|
||||||
void InitMenu(Menu *pMenu, void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
|
void InitMenu(Menu *pMenu) override;
|
||||||
|
|
||||||
void DestroyMenu() override
|
void DestroyMenu() override
|
||||||
{
|
{
|
||||||
@ -106,9 +107,13 @@ TrackMenuTable &TrackMenuTable::Instance()
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
void TrackMenuTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
mpData = static_cast<CommonTrackControls::InitMenuData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackMenuTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
Track *const pTrack = mpData->pTrack;
|
Track *const pTrack = mpData->pTrack;
|
||||||
|
|
||||||
const auto &tracks = TrackList::Get( *GetActiveProject() );
|
const auto &tracks = TrackList::Get( *GetActiveProject() );
|
||||||
|
@ -28,7 +28,7 @@ class CommonTrackControls /* not final */ : public TrackControls
|
|||||||
public:
|
public:
|
||||||
using TrackControls::TrackControls;
|
using TrackControls::TrackControls;
|
||||||
|
|
||||||
// This is passed to the InitMenu() methods of the PopupMenuTable
|
// This is passed to the InitUserData() methods of the PopupMenuTable
|
||||||
// objects returned by GetMenuExtension:
|
// objects returned by GetMenuExtension:
|
||||||
struct InitMenuData
|
struct InitMenuData
|
||||||
{
|
{
|
||||||
|
@ -20,6 +20,8 @@ PopupMenuTable::Menu::~Menu()
|
|||||||
|
|
||||||
void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable)
|
void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable)
|
||||||
{
|
{
|
||||||
|
pTable->InitUserData(pUserData);
|
||||||
|
|
||||||
auto connect = [&]( const PopupMenuTable::Entry *pEntry ) {
|
auto connect = [&]( const PopupMenuTable::Entry *pEntry ) {
|
||||||
this->pParent->Bind
|
this->pParent->Bind
|
||||||
(wxEVT_COMMAND_MENU_SELECTED,
|
(wxEVT_COMMAND_MENU_SELECTED,
|
||||||
@ -61,7 +63,7 @@ void PopupMenuTable::Menu::Extend(PopupMenuTable *pTable)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pTable->InitMenu(this, pUserData);
|
pTable->InitMenu(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PopupMenuTable::Menu::DisconnectTable(PopupMenuTable *pTable)
|
void PopupMenuTable::Menu::DisconnectTable(PopupMenuTable *pTable)
|
||||||
@ -85,6 +87,10 @@ void PopupMenuTable::Menu::Disconnect()
|
|||||||
DisconnectTable(pTable);
|
DisconnectTable(pTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PopupMenuTable::InitMenu(Menu *)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
std::unique_ptr<PopupMenuTable::Menu> PopupMenuTable::BuildMenu
|
std::unique_ptr<PopupMenuTable::Menu> PopupMenuTable::BuildMenu
|
||||||
( wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData )
|
( wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData )
|
||||||
|
@ -79,14 +79,19 @@ public:
|
|||||||
void *pUserData;
|
void *pUserData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Called before the menu items are appended.
|
||||||
|
// Store user data, if needed.
|
||||||
|
virtual void InitUserData(void *pUserData) = 0;
|
||||||
|
|
||||||
// Called when the menu is about to pop up.
|
// Called when the menu is about to pop up.
|
||||||
// Your chance to enable and disable items.
|
// Your chance to enable and disable items.
|
||||||
virtual void InitMenu(Menu *pMenu, void *pUserData) = 0;
|
// Default implementation does nothing.
|
||||||
|
virtual void InitMenu(Menu *pMenu);
|
||||||
|
|
||||||
// Called when menu is destroyed.
|
// Called when menu is destroyed.
|
||||||
virtual void DestroyMenu() = 0;
|
virtual void DestroyMenu() = 0;
|
||||||
|
|
||||||
// Optional pUserData gets passed to the InitMenu routines of tables.
|
// Optional pUserData gets passed to the InitUserData routines of tables.
|
||||||
// No memory management responsibility is assumed by this function.
|
// No memory management responsibility is assumed by this function.
|
||||||
static std::unique_ptr<Menu> BuildMenu
|
static std::unique_ptr<Menu> BuildMenu
|
||||||
(wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL);
|
(wxEvtHandler *pParent, PopupMenuTable *pTable, void *pUserData = NULL);
|
||||||
@ -101,14 +106,19 @@ In class MyTable (maybe in the private section),
|
|||||||
which inherits from PopupMenuTable,
|
which inherits from PopupMenuTable,
|
||||||
|
|
||||||
DECLARE_POPUP_MENU(MyTable);
|
DECLARE_POPUP_MENU(MyTable);
|
||||||
virtual void InitMenu(Menu *pMenu, void *pUserData);
|
virtual void InitUserData(void *pUserData);
|
||||||
|
virtual void InitMenu(Menu *pMenu);
|
||||||
virtual void DestroyMenu();
|
virtual void DestroyMenu();
|
||||||
|
|
||||||
Then in MyTable.cpp,
|
Then in MyTable.cpp,
|
||||||
|
|
||||||
void MyTable::InitMenu(Menu *pMenu, void *pUserData)
|
void MyTable::InitUserData(void *pUserData)
|
||||||
{
|
{
|
||||||
auto pData = static_cast<MyData*>(pUserData);
|
auto pData = static_cast<MyData*>(pUserData);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyTable::InitMenu(Menu *pMenu)
|
||||||
|
{
|
||||||
// Remember pData, enable or disable menu items
|
// Remember pData, enable or disable menu items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user