mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-27 06:07:59 +02:00
Remove uses of GetActiveProject in popup menu handlers
This commit is contained in:
commit
1e3779c2f3
@ -430,7 +430,7 @@ public:
|
|||||||
|
|
||||||
unsigned DoContextMenu
|
unsigned DoContextMenu
|
||||||
(const wxRect &rect,
|
(const wxRect &rect,
|
||||||
wxWindow *pParent, wxPoint *pPosition) final override
|
wxWindow *pParent, wxPoint *pPosition, AudacityProject*) final override
|
||||||
{
|
{
|
||||||
(void)pParent;// Compiler food
|
(void)pParent;// Compiler food
|
||||||
(void)rect;// Compiler food
|
(void)rect;// Compiler food
|
||||||
|
@ -877,7 +877,7 @@ void CellularPanel::DoContextMenu( TrackPanelCell *pCell )
|
|||||||
|
|
||||||
auto rect = FindRect( *delegate );
|
auto rect = FindRect( *delegate );
|
||||||
const UIHandle::Result refreshResult =
|
const UIHandle::Result refreshResult =
|
||||||
delegate->DoContextMenu(rect, this, NULL);
|
delegate->DoContextMenu(rect, this, nullptr, GetProject());
|
||||||
|
|
||||||
// To do: use safer shared_ptr to pCell
|
// To do: use safer shared_ptr to pCell
|
||||||
ProcessUIHandleResult(pCell, pCell, refreshResult);
|
ProcessUIHandleResult(pCell, pCell, refreshResult);
|
||||||
|
@ -1597,7 +1597,7 @@ unsigned TrackPanelCell::HandleWheelRotation
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned TrackPanelCell::DoContextMenu
|
unsigned TrackPanelCell::DoContextMenu
|
||||||
(const wxRect &, wxWindow*, wxPoint *)
|
(const wxRect &, wxWindow*, wxPoint *, AudacityProject*)
|
||||||
{
|
{
|
||||||
return RefreshCode::RefreshNone;
|
return RefreshCode::RefreshNone;
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ public:
|
|||||||
// Default implementation does nothing
|
// Default implementation does nothing
|
||||||
virtual unsigned DoContextMenu
|
virtual unsigned DoContextMenu
|
||||||
(const wxRect &rect,
|
(const wxRect &rect,
|
||||||
wxWindow *pParent, wxPoint *pPosition);
|
wxWindow *pParent, wxPoint *pPosition, AudacityProject *pProject);
|
||||||
|
|
||||||
// Return value is a bitwise OR of RefreshCode values
|
// Return value is a bitwise OR of RefreshCode values
|
||||||
// Default skips the event and does nothing
|
// Default skips the event and does nothing
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ void NoteTrackMenuTable::OnChangeOctave(wxCommandEvent &event)
|
|||||||
const bool bDown = (OnDownOctaveID == event.GetId());
|
const bool bDown = (OnDownOctaveID == event.GetId());
|
||||||
pTrack->ShiftNoteRange((bDown) ? -12 : 12);
|
pTrack->ShiftNoteRange((bDown) ? -12 : 12);
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
.ModifyState(false);
|
.ModifyState(false);
|
||||||
mpData->result = RefreshCode::RefreshAll;
|
mpData->result = RefreshCode::RefreshAll;
|
||||||
|
@ -35,6 +35,7 @@ namespace
|
|||||||
struct InitMenuData
|
struct InitMenuData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
AudacityProject &project;
|
||||||
NoteTrack *pTrack;
|
NoteTrack *pTrack;
|
||||||
wxRect rect;
|
wxRect rect;
|
||||||
unsigned result;
|
unsigned result;
|
||||||
@ -209,7 +210,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 +219,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);
|
||||||
}
|
}
|
||||||
@ -244,7 +245,8 @@ void NoteTrackVRulerMenuTable::OnZoom( int iZoomCode ){
|
|||||||
mpData->pTrack->ShiftNoteRange(-12);
|
mpData->pTrack->ShiftNoteRange(-12);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ProjectHistory::Get( *GetActiveProject() ).ModifyState(false);
|
AudacityProject *const project = &mpData->project;
|
||||||
|
ProjectHistory::Get( *project ).ModifyState(false);
|
||||||
using namespace RefreshCode;
|
using namespace RefreshCode;
|
||||||
mpData->result = UpdateVRuler | RefreshAll;
|
mpData->result = UpdateVRuler | RefreshAll;
|
||||||
}
|
}
|
||||||
@ -290,7 +292,7 @@ UIHandle::Result NoteTrackVZoomHandle::Release
|
|||||||
!(event.ShiftDown() || event.CmdDown()))
|
!(event.ShiftDown() || event.CmdDown()))
|
||||||
{
|
{
|
||||||
InitMenuData data {
|
InitMenuData data {
|
||||||
pTrack.get(), mRect, RefreshCode::RefreshNone, event.m_y
|
*pProject, pTrack.get(), mRect, RefreshNone, event.m_y
|
||||||
};
|
};
|
||||||
|
|
||||||
PopupMenuTable *const pTable =
|
PopupMenuTable *const pTable =
|
||||||
|
@ -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 =
|
||||||
@ -292,8 +292,6 @@ POPUP_MENU_SEPARATOR()
|
|||||||
POPUP_MENU_ITEM(OnZoomOutVerticalID, XO("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
|
POPUP_MENU_ITEM(OnZoomOutVerticalID, XO("Zoom Out\tShift-Left-Click"), OnZoomOutVertical)
|
||||||
END_POPUP_MENU()
|
END_POPUP_MENU()
|
||||||
|
|
||||||
#include "../../../../Project.h" // for GetActiveProject
|
|
||||||
|
|
||||||
void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt)
|
void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt)
|
||||||
{
|
{
|
||||||
WaveTrack *const wt = mpData->pTrack;
|
WaveTrack *const wt = mpData->pTrack;
|
||||||
@ -308,7 +306,7 @@ void SpectrumVRulerMenuTable::OnSpectrumScaleType(wxCommandEvent &evt)
|
|||||||
for (auto channel : TrackList::Channels(wt))
|
for (auto channel : TrackList::Channels(wt))
|
||||||
channel->GetIndependentSpectrogramSettings().scaleType = newScaleType;
|
channel->GetIndependentSpectrogramSettings().scaleType = newScaleType;
|
||||||
|
|
||||||
ProjectHistory::Get( *::GetActiveProject() ).ModifyState(true);
|
ProjectHistory::Get( mpData->project ).ModifyState(true);
|
||||||
|
|
||||||
using namespace RefreshCode;
|
using namespace RefreshCode;
|
||||||
mpData->result = UpdateVRuler | RefreshAll;
|
mpData->result = UpdateVRuler | RefreshAll;
|
||||||
|
@ -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,14 +175,18 @@ 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; });
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
||||||
for (int i = OnInstrument1ID; i <= OnInstrument4ID; i++) {
|
for (int i = OnInstrument1ID; i <= OnInstrument4ID; i++) {
|
||||||
pMenu->Enable(i, !unsafe);
|
pMenu->Enable(i, !unsafe);
|
||||||
@ -219,7 +224,7 @@ void WaveColorMenuTable::OnWaveColorChange(wxCommandEvent & event)
|
|||||||
|
|
||||||
int newWaveColor = id - OnInstrument1ID;
|
int newWaveColor = id - OnInstrument1ID;
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
|
|
||||||
for (auto channel : TrackList::Channels(pTrack))
|
for (auto channel : TrackList::Channels(pTrack))
|
||||||
channel->SetWaveColorIndex(newWaveColor);
|
channel->SetWaveColorIndex(newWaveColor);
|
||||||
@ -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,14 +273,18 @@ 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; });
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
||||||
for (int i = On16BitID; i <= OnFloatID; i++) {
|
for (int i = On16BitID; i <= OnFloatID; i++) {
|
||||||
pMenu->Enable(i, !unsafe);
|
pMenu->Enable(i, !unsafe);
|
||||||
@ -336,7 +346,7 @@ void FormatMenuTable::OnFormatChange(wxCommandEvent & event)
|
|||||||
if (newFormat == pTrack->GetSampleFormat())
|
if (newFormat == pTrack->GetSampleFormat())
|
||||||
return; // Nothing to do.
|
return; // Nothing to do.
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
|
|
||||||
for (auto channel : TrackList::Channels(pTrack))
|
for (auto channel : TrackList::Channels(pTrack))
|
||||||
channel->ConvertToSampleFormat(newFormat);
|
channel->ConvertToSampleFormat(newFormat);
|
||||||
@ -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,14 +396,18 @@ 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; });
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
bool unsafe = ProjectAudioIO::Get( *project ).IsAudioActive();
|
||||||
for (int i = OnRate8ID; i <= OnRateOtherID; i++) {
|
for (int i = OnRate8ID; i <= OnRateOtherID; i++) {
|
||||||
pMenu->Enable(i, !unsafe);
|
pMenu->Enable(i, !unsafe);
|
||||||
@ -439,7 +454,7 @@ int RateMenuTable::IdOfRate(int rate)
|
|||||||
/// another track, that one as well.
|
/// another track, that one as well.
|
||||||
void RateMenuTable::SetRate(WaveTrack * pTrack, double rate)
|
void RateMenuTable::SetRate(WaveTrack * pTrack, double rate)
|
||||||
{
|
{
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
for (auto channel : TrackList::Channels(pTrack))
|
for (auto channel : TrackList::Channels(pTrack))
|
||||||
channel->SetRate(rate);
|
channel->SetRate(rate);
|
||||||
|
|
||||||
@ -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;
|
||||||
@ -625,7 +645,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData)
|
|||||||
.contains( WaveTrackViewConstants::Spectrum );
|
.contains( WaveTrackViewConstants::Spectrum );
|
||||||
pMenu->Enable(OnSpectrogramSettingsID, hasSpectrum && !bAudioBusy);
|
pMenu->Enable(OnSpectrogramSettingsID, hasSpectrum && !bAudioBusy);
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
auto &tracks = TrackList::Get( *project );
|
auto &tracks = TrackList::Get( *project );
|
||||||
bool unsafe = RealtimeEffectManager::Get().RealtimeIsActive() &&
|
bool unsafe = RealtimeEffectManager::Get().RealtimeIsActive() &&
|
||||||
ProjectAudioIO::Get( *project ).IsAudioActive();
|
ProjectAudioIO::Get( *project ).IsAudioActive();
|
||||||
@ -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);
|
||||||
@ -795,7 +814,7 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
|
|||||||
.SetDisplay(WaveTrackView::WaveTrackDisplay(id));
|
.SetDisplay(WaveTrackView::WaveTrackDisplay(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
ProjectHistory::Get( *project ).ModifyState(true);
|
ProjectHistory::Get( *project ).ModifyState(true);
|
||||||
|
|
||||||
using namespace RefreshCode;
|
using namespace RefreshCode;
|
||||||
@ -854,7 +873,7 @@ void WaveTrackMenuTable::OnSpectrogramSettings(wxCommandEvent &)
|
|||||||
|
|
||||||
if (0 != dialog.ShowModal()) {
|
if (0 != dialog.ShowModal()) {
|
||||||
// Redraw
|
// Redraw
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
ProjectHistory::Get( *project ).ModifyState(true);
|
ProjectHistory::Get( *project ).ModifyState(true);
|
||||||
//Bug 1725 Toolbar was left greyed out.
|
//Bug 1725 Toolbar was left greyed out.
|
||||||
//This solution is overkill, but does fix the problem and is what the
|
//This solution is overkill, but does fix the problem and is what the
|
||||||
@ -889,7 +908,7 @@ void WaveTrackMenuTable::OnChannelChange(wxCommandEvent & event)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pTrack->SetChannel(channel);
|
pTrack->SetChannel(channel);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
/* i18n-hint: The strings name a track and a channel choice (mono, left, or right) */
|
/* i18n-hint: The strings name a track and a channel choice (mono, left, or right) */
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
.PushState(
|
.PushState(
|
||||||
@ -902,7 +921,7 @@ void WaveTrackMenuTable::OnChannelChange(wxCommandEvent & event)
|
|||||||
/// Merge two tracks into one stereo track ??
|
/// Merge two tracks into one stereo track ??
|
||||||
void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &)
|
void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &)
|
||||||
{
|
{
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
auto &tracks = TrackList::Get( *project );
|
auto &tracks = TrackList::Get( *project );
|
||||||
|
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
@ -964,7 +983,7 @@ void WaveTrackMenuTable::SplitStereo(bool stereo)
|
|||||||
{
|
{
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
wxASSERT(pTrack);
|
wxASSERT(pTrack);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
auto channels = TrackList::Channels( pTrack );
|
auto channels = TrackList::Channels( pTrack );
|
||||||
|
|
||||||
int totalHeight = 0;
|
int totalHeight = 0;
|
||||||
@ -998,7 +1017,7 @@ void WaveTrackMenuTable::SplitStereo(bool stereo)
|
|||||||
/// Swap the left and right channels of a stero track...
|
/// Swap the left and right channels of a stero track...
|
||||||
void WaveTrackMenuTable::OnSwapChannels(wxCommandEvent &)
|
void WaveTrackMenuTable::OnSwapChannels(wxCommandEvent &)
|
||||||
{
|
{
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
|
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
auto channels = TrackList::Channels( pTrack );
|
auto channels = TrackList::Channels( pTrack );
|
||||||
@ -1033,7 +1052,7 @@ void WaveTrackMenuTable::OnSplitStereo(wxCommandEvent &)
|
|||||||
{
|
{
|
||||||
SplitStereo(true);
|
SplitStereo(true);
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
/* i18n-hint: The string names a track */
|
/* i18n-hint: The string names a track */
|
||||||
ProjectHistory::Get( *project ).PushState(
|
ProjectHistory::Get( *project ).PushState(
|
||||||
XO("Split stereo track '%s'").Format( pTrack->GetName() ),
|
XO("Split stereo track '%s'").Format( pTrack->GetName() ),
|
||||||
@ -1048,7 +1067,7 @@ void WaveTrackMenuTable::OnSplitStereoMono(wxCommandEvent &)
|
|||||||
{
|
{
|
||||||
SplitStereo(false);
|
SplitStereo(false);
|
||||||
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
WaveTrack *const pTrack = static_cast<WaveTrack*>(mpData->pTrack);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
/* i18n-hint: The string names a track */
|
/* i18n-hint: The string names a track */
|
||||||
ProjectHistory::Get( *project ).PushState(
|
ProjectHistory::Get( *project ).PushState(
|
||||||
XO("Split Stereo to Mono '%s'").Format( pTrack->GetName() ),
|
XO("Split Stereo to Mono '%s'").Format( pTrack->GetName() ),
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
@ -44,7 +44,7 @@ void WaveTrackVRulerMenuTable::OnZoom(
|
|||||||
WaveTrackViewConstants::ZoomActions iZoomCode )
|
WaveTrackViewConstants::ZoomActions iZoomCode )
|
||||||
{
|
{
|
||||||
mpData->doZoom(
|
mpData->doZoom(
|
||||||
::GetActiveProject(), mpData->pTrack,
|
&mpData->project, mpData->pTrack,
|
||||||
iZoomCode, mpData->rect, mpData->yy, mpData->yy, false
|
iZoomCode, mpData->rect, mpData->yy, mpData->yy, false
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -115,6 +115,7 @@ UIHandle::Result WaveTrackVZoomHandle::DoRelease(
|
|||||||
!(event.ShiftDown() || event.CmdDown()))
|
!(event.ShiftDown() || event.CmdDown()))
|
||||||
{
|
{
|
||||||
WaveTrackVRulerMenuTable::InitMenuData data {
|
WaveTrackVRulerMenuTable::InitMenuData data {
|
||||||
|
*pProject,
|
||||||
pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom };
|
pTrack, rect, RefreshCode::RefreshNone, event.m_y, doZoom };
|
||||||
|
|
||||||
std::unique_ptr<PopupMenuTable::Menu>
|
std::unique_ptr<PopupMenuTable::Menu>
|
||||||
|
@ -59,6 +59,7 @@ public:
|
|||||||
struct InitMenuData
|
struct InitMenuData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
AudacityProject &project;
|
||||||
WaveTrack *pTrack;
|
WaveTrack *pTrack;
|
||||||
wxRect rect;
|
wxRect rect;
|
||||||
unsigned result;
|
unsigned result;
|
||||||
@ -69,7 +70,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;
|
||||||
@ -304,8 +304,6 @@ BEGIN_POPUP_MENU(WaveformVRulerMenuTable)
|
|||||||
|
|
||||||
END_POPUP_MENU()
|
END_POPUP_MENU()
|
||||||
|
|
||||||
#include "../../../../Project.h" // for GetActiveProject
|
|
||||||
|
|
||||||
void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt)
|
void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt)
|
||||||
{
|
{
|
||||||
WaveTrack *const wt = mpData->pTrack;
|
WaveTrack *const wt = mpData->pTrack;
|
||||||
@ -322,7 +320,8 @@ void WaveformVRulerMenuTable::OnWaveformScaleType(wxCommandEvent &evt)
|
|||||||
channel->GetIndependentWaveformSettings().scaleType = newScaleType;
|
channel->GetIndependentWaveformSettings().scaleType = newScaleType;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectHistory::Get( *::GetActiveProject() ).ModifyState(true);
|
AudacityProject *const project = &mpData->project;
|
||||||
|
ProjectHistory::Get( *project ).ModifyState(true);
|
||||||
|
|
||||||
using namespace RefreshCode;
|
using namespace RefreshCode;
|
||||||
mpData->result = UpdateVRuler | RefreshAll;
|
mpData->result = UpdateVRuler | RefreshAll;
|
||||||
|
@ -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());
|
||||||
@ -102,7 +106,7 @@ void TimeTrackMenuTable::OnSetTimeTrackRange(wxCommandEvent & /*event*/)
|
|||||||
1000);
|
1000);
|
||||||
|
|
||||||
if (lower >= 10 && upper <= 1000 && lower < upper) {
|
if (lower >= 10 && upper <= 1000 && lower < upper) {
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
pTrack->SetRangeLower((double)lower / 100.0);
|
pTrack->SetRangeLower((double)lower / 100.0);
|
||||||
pTrack->SetRangeUpper((double)upper / 100.0);
|
pTrack->SetRangeUpper((double)upper / 100.0);
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
@ -118,7 +122,7 @@ void TimeTrackMenuTable::OnTimeTrackLin(wxCommandEvent & /*event*/)
|
|||||||
{
|
{
|
||||||
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
||||||
pTrack->SetDisplayLog(false);
|
pTrack->SetDisplayLog(false);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
.PushState(XO("Set time track display to linear"), XO("Set Display"));
|
.PushState(XO("Set time track display to linear"), XO("Set Display"));
|
||||||
|
|
||||||
@ -130,7 +134,7 @@ void TimeTrackMenuTable::OnTimeTrackLog(wxCommandEvent & /*event*/)
|
|||||||
{
|
{
|
||||||
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
||||||
pTrack->SetDisplayLog(true);
|
pTrack->SetDisplayLog(true);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
.PushState(XO("Set time track display to logarithmic"), XO("Set Display"));
|
.PushState(XO("Set time track display to logarithmic"), XO("Set Display"));
|
||||||
|
|
||||||
@ -141,7 +145,7 @@ void TimeTrackMenuTable::OnTimeTrackLog(wxCommandEvent & /*event*/)
|
|||||||
void TimeTrackMenuTable::OnTimeTrackLogInt(wxCommandEvent & /*event*/)
|
void TimeTrackMenuTable::OnTimeTrackLogInt(wxCommandEvent & /*event*/)
|
||||||
{
|
{
|
||||||
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
TimeTrack *const pTrack = static_cast<TimeTrack*>(mpData->pTrack);
|
||||||
AudacityProject *const project = ::GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
if (pTrack->GetInterpolateLog()) {
|
if (pTrack->GetInterpolateLog()) {
|
||||||
pTrack->SetInterpolateLog(false);
|
pTrack->SetInterpolateLog(false);
|
||||||
ProjectHistory::Get( *project )
|
ProjectHistory::Get( *project )
|
||||||
|
@ -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,12 +107,16 @@ 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( mpData->project );
|
||||||
|
|
||||||
pMenu->Enable(OnMoveUpID, tracks.CanMoveUp(pTrack));
|
pMenu->Enable(OnMoveUpID, tracks.CanMoveUp(pTrack));
|
||||||
pMenu->Enable(OnMoveDownID, tracks.CanMoveDown(pTrack));
|
pMenu->Enable(OnMoveDownID, tracks.CanMoveDown(pTrack));
|
||||||
@ -129,7 +134,7 @@ BEGIN_POPUP_MENU(TrackMenuTable)
|
|||||||
OnMoveUpID,
|
OnMoveUpID,
|
||||||
XO("Move Track &Up").Join(
|
XO("Move Track &Up").Join(
|
||||||
Verbatim(
|
Verbatim(
|
||||||
CommandManager::Get( *GetActiveProject() ).
|
CommandManager::Get( mpData->project ).
|
||||||
// using GET to compose menu item name for wxWidgets
|
// using GET to compose menu item name for wxWidgets
|
||||||
GetKeyFromName(wxT("TrackMoveUp")).GET() ),
|
GetKeyFromName(wxT("TrackMoveUp")).GET() ),
|
||||||
wxT("\t")
|
wxT("\t")
|
||||||
@ -139,7 +144,7 @@ BEGIN_POPUP_MENU(TrackMenuTable)
|
|||||||
OnMoveDownID,
|
OnMoveDownID,
|
||||||
XO("Move Track &Down").Join(
|
XO("Move Track &Down").Join(
|
||||||
Verbatim(
|
Verbatim(
|
||||||
CommandManager::Get( *GetActiveProject() ).
|
CommandManager::Get( mpData->project ).
|
||||||
// using GET to compose menu item name for wxWidgets
|
// using GET to compose menu item name for wxWidgets
|
||||||
GetKeyFromName(wxT("TrackMoveDown")).GET() ),
|
GetKeyFromName(wxT("TrackMoveDown")).GET() ),
|
||||||
wxT("\t")
|
wxT("\t")
|
||||||
@ -149,7 +154,7 @@ BEGIN_POPUP_MENU(TrackMenuTable)
|
|||||||
OnMoveTopID,
|
OnMoveTopID,
|
||||||
XO("Move Track to &Top").Join(
|
XO("Move Track to &Top").Join(
|
||||||
Verbatim(
|
Verbatim(
|
||||||
CommandManager::Get( *GetActiveProject() ).
|
CommandManager::Get( mpData->project ).
|
||||||
// using GET to compose menu item name for wxWidgets
|
// using GET to compose menu item name for wxWidgets
|
||||||
GetKeyFromName(wxT("TrackMoveTop")).GET() ),
|
GetKeyFromName(wxT("TrackMoveTop")).GET() ),
|
||||||
wxT("\t")
|
wxT("\t")
|
||||||
@ -159,7 +164,7 @@ BEGIN_POPUP_MENU(TrackMenuTable)
|
|||||||
OnMoveBottomID,
|
OnMoveBottomID,
|
||||||
XO("Move Track to &Bottom").Join(
|
XO("Move Track to &Bottom").Join(
|
||||||
Verbatim(
|
Verbatim(
|
||||||
CommandManager::Get( *GetActiveProject() ).
|
CommandManager::Get( mpData->project ).
|
||||||
// using GET to compose menu item name for wxWidgets
|
// using GET to compose menu item name for wxWidgets
|
||||||
GetKeyFromName(wxT("TrackMoveBottom")).GET() ),
|
GetKeyFromName(wxT("TrackMoveBottom")).GET() ),
|
||||||
wxT("\t")
|
wxT("\t")
|
||||||
@ -209,7 +214,7 @@ void TrackMenuTable::OnSetName(wxCommandEvent &)
|
|||||||
Track *const pTrack = mpData->pTrack;
|
Track *const pTrack = mpData->pTrack;
|
||||||
if (pTrack)
|
if (pTrack)
|
||||||
{
|
{
|
||||||
AudacityProject *const proj = ::GetActiveProject();
|
AudacityProject *const proj = &mpData->project;
|
||||||
const wxString oldName = pTrack->GetName();
|
const wxString oldName = pTrack->GetName();
|
||||||
|
|
||||||
SetTrackNameCommand Command;
|
SetTrackNameCommand Command;
|
||||||
@ -234,7 +239,7 @@ void TrackMenuTable::OnSetName(wxCommandEvent &)
|
|||||||
|
|
||||||
void TrackMenuTable::OnMoveTrack(wxCommandEvent &event)
|
void TrackMenuTable::OnMoveTrack(wxCommandEvent &event)
|
||||||
{
|
{
|
||||||
AudacityProject *const project = GetActiveProject();
|
AudacityProject *const project = &mpData->project;
|
||||||
TrackUtilities::MoveChoice choice;
|
TrackUtilities::MoveChoice choice;
|
||||||
switch (event.GetId()) {
|
switch (event.GetId()) {
|
||||||
default:
|
default:
|
||||||
@ -256,17 +261,18 @@ void TrackMenuTable::OnMoveTrack(wxCommandEvent &event)
|
|||||||
mpData->result = RefreshCode::RefreshAll;
|
mpData->result = RefreshCode::RefreshAll;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned CommonTrackControls::DoContextMenu
|
unsigned CommonTrackControls::DoContextMenu(
|
||||||
(const wxRect &rect, wxWindow *pParent, wxPoint *)
|
const wxRect &rect, wxWindow *pParent, wxPoint *, AudacityProject *pProject)
|
||||||
{
|
{
|
||||||
|
using namespace RefreshCode;
|
||||||
wxRect buttonRect;
|
wxRect buttonRect;
|
||||||
TrackInfo::GetTitleBarRect(rect, buttonRect);
|
TrackInfo::GetTitleBarRect(rect, buttonRect);
|
||||||
|
|
||||||
auto track = FindTrack();
|
auto track = FindTrack();
|
||||||
if (!track)
|
if (!track)
|
||||||
return RefreshCode::RefreshNone;
|
return RefreshNone;
|
||||||
|
|
||||||
InitMenuData data{ track.get(), pParent, RefreshCode::RefreshNone };
|
InitMenuData data{ *pProject, track.get(), pParent, RefreshNone };
|
||||||
|
|
||||||
const auto pTable = &TrackMenuTable::Instance();
|
const auto pTable = &TrackMenuTable::Instance();
|
||||||
auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data);
|
auto pMenu = PopupMenuTable::BuildMenu(pParent, pTable, &data);
|
||||||
|
@ -28,11 +28,12 @@ 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
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
AudacityProject &project;
|
||||||
Track *pTrack;
|
Track *pTrack;
|
||||||
wxWindow *pParent;
|
wxWindow *pParent;
|
||||||
unsigned result;
|
unsigned result;
|
||||||
@ -53,7 +54,8 @@ protected:
|
|||||||
const AudacityProject *) override = 0;
|
const AudacityProject *) override = 0;
|
||||||
|
|
||||||
unsigned DoContextMenu
|
unsigned DoContextMenu
|
||||||
(const wxRect &rect, wxWindow *pParent, wxPoint *pPosition) override;
|
(const wxRect &rect, wxWindow *pParent, wxPoint *pPosition,
|
||||||
|
AudacityProject *pProject) override;
|
||||||
virtual PopupMenuTable *GetMenuExtension(Track *pTrack) = 0;
|
virtual PopupMenuTable *GetMenuExtension(Track *pTrack) = 0;
|
||||||
|
|
||||||
// TrackPanelDrawable implementation
|
// TrackPanelDrawable implementation
|
||||||
|
@ -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