mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-24 06:10:09 +01:00
Popup menu table for wave track has member function to get the track
This commit is contained in:
@@ -30,7 +30,6 @@ Paul Licameli split from TrackPanel.cpp
|
|||||||
#include "../../../../TrackPanelAx.h"
|
#include "../../../../TrackPanelAx.h"
|
||||||
#include "../../../../TrackPanelMouseEvent.h"
|
#include "../../../../TrackPanelMouseEvent.h"
|
||||||
#include "../../../../WaveTrack.h"
|
#include "../../../../WaveTrack.h"
|
||||||
#include "../../../../widgets/PopupMenuTable.h"
|
|
||||||
#include "../../../../effects/RealtimeEffectManager.h"
|
#include "../../../../effects/RealtimeEffectManager.h"
|
||||||
#include "../../../../ondemand/ODManager.h"
|
#include "../../../../ondemand/ODManager.h"
|
||||||
#include "../../../../prefs/PrefsDialog.h"
|
#include "../../../../prefs/PrefsDialog.h"
|
||||||
@@ -87,6 +86,11 @@ std::vector<UIHandlePtr> WaveTrackControls::HitTest
|
|||||||
return PlayableTrackControls::HitTest(st, pProject);
|
return PlayableTrackControls::HitTest(st, pProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WaveTrack &WaveTrackPopupMenuTable::FindWaveTrack() const
|
||||||
|
{
|
||||||
|
return *static_cast< WaveTrack* >( mpData->pTrack );
|
||||||
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
reserveDisplays = 100,
|
reserveDisplays = 100,
|
||||||
|
|
||||||
@@ -550,12 +554,14 @@ void RateMenuTable::OnRateOther(wxCommandEvent &)
|
|||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
// Class defining common command handlers for mono and stereo tracks
|
// Class defining common command handlers for mono and stereo tracks
|
||||||
struct WaveTrackMenuTable : ComputedPopupMenuTable< WaveTrackMenuTable >
|
struct WaveTrackMenuTable
|
||||||
|
: ComputedPopupMenuTable< WaveTrackMenuTable, WaveTrackPopupMenuTable >
|
||||||
{
|
{
|
||||||
static WaveTrackMenuTable &Instance();
|
static WaveTrackMenuTable &Instance();
|
||||||
|
|
||||||
WaveTrackMenuTable()
|
WaveTrackMenuTable()
|
||||||
: ComputedPopupMenuTable< WaveTrackMenuTable >{ "WaveTrack" }
|
: ComputedPopupMenuTable< WaveTrackMenuTable, WaveTrackPopupMenuTable >{
|
||||||
|
"WaveTrack" }
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void InitUserData(void *pUserData) override;
|
void InitUserData(void *pUserData) override;
|
||||||
@@ -567,8 +573,6 @@ struct WaveTrackMenuTable : ComputedPopupMenuTable< WaveTrackMenuTable >
|
|||||||
|
|
||||||
DECLARE_POPUP_MENU(WaveTrackMenuTable);
|
DECLARE_POPUP_MENU(WaveTrackMenuTable);
|
||||||
|
|
||||||
PlayableTrackControls::InitMenuData *mpData{};
|
|
||||||
|
|
||||||
void OnMultiView(wxCommandEvent & event);
|
void OnMultiView(wxCommandEvent & event);
|
||||||
void OnSetDisplay(wxCommandEvent & event);
|
void OnSetDisplay(wxCommandEvent & event);
|
||||||
void OnSpectrogramSettings(wxCommandEvent & event);
|
void OnSpectrogramSettings(wxCommandEvent & event);
|
||||||
@@ -608,15 +612,11 @@ static std::vector<WaveTrackSubViewType> AllTypes()
|
|||||||
|
|
||||||
BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
||||||
// Functions usable in callbacks to check and disable items
|
// Functions usable in callbacks to check and disable items
|
||||||
static const auto findTrack =
|
|
||||||
[]( PopupMenuHandler &handler ) -> WaveTrack & {
|
|
||||||
return *static_cast< WaveTrack* >(
|
|
||||||
static_cast< WaveTrackMenuTable& >( handler ).mpData->pTrack);
|
|
||||||
};
|
|
||||||
|
|
||||||
static const auto isMono =
|
static const auto isMono =
|
||||||
[]( PopupMenuHandler &handler ) -> bool {
|
[]( PopupMenuHandler &handler ) -> bool {
|
||||||
return 1 == TrackList::Channels( &findTrack( handler ) ).size();
|
auto &track =
|
||||||
|
static_cast< WaveTrackMenuTable& >( handler ).FindWaveTrack();
|
||||||
|
return 1 == TrackList::Channels( &track ).size();
|
||||||
};
|
};
|
||||||
|
|
||||||
static const auto isUnsafe =
|
static const auto isUnsafe =
|
||||||
@@ -637,7 +637,8 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
POPUP_MENU_FN( OnMultiView ),
|
POPUP_MENU_FN( OnMultiView ),
|
||||||
table,
|
table,
|
||||||
[]( PopupMenuHandler &handler, wxMenu &menu, int id ){
|
[]( PopupMenuHandler &handler, wxMenu &menu, int id ){
|
||||||
auto &track = findTrack( handler );
|
auto &table = static_cast< WaveTrackMenuTable& >( handler );
|
||||||
|
auto &track = table.FindWaveTrack();
|
||||||
const auto &view = WaveTrackView::Get( track );
|
const auto &view = WaveTrackView::Get( track );
|
||||||
menu.Check( id, view.GetMultiView() );
|
menu.Check( id, view.GetMultiView() );
|
||||||
} );
|
} );
|
||||||
@@ -662,7 +663,9 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
(std::find( begin, allTypes.end(), type ) - begin);
|
(std::find( begin, allTypes.end(), type ) - begin);
|
||||||
};
|
};
|
||||||
|
|
||||||
auto &track = findTrack( handler );
|
auto &table = static_cast< WaveTrackMenuTable& >( handler );
|
||||||
|
auto &track = table.FindWaveTrack();
|
||||||
|
|
||||||
const auto &view = WaveTrackView::Get( track );
|
const auto &view = WaveTrackView::Get( track );
|
||||||
|
|
||||||
const auto displays = view.GetDisplays();
|
const auto displays = view.GetDisplays();
|
||||||
@@ -680,7 +683,7 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
Append( [type, id]( My &table ) -> Registry::BaseItemPtr {
|
Append( [type, id]( My &table ) -> Registry::BaseItemPtr {
|
||||||
const auto pTrack = &findTrack( table );
|
const auto pTrack = &table.FindWaveTrack();
|
||||||
const auto &view = WaveTrackView::Get( *pTrack );
|
const auto &view = WaveTrackView::Get( *pTrack );
|
||||||
const auto itemType =
|
const auto itemType =
|
||||||
view.GetMultiView() ? Entry::CheckItem : Entry::RadioItem;
|
view.GetMultiView() ? Entry::CheckItem : Entry::RadioItem;
|
||||||
@@ -695,7 +698,7 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
|
|
||||||
// Conditionally add sub-menu for wave color, if showing waveform
|
// Conditionally add sub-menu for wave color, if showing waveform
|
||||||
Append( []( My &table ) -> Registry::BaseItemPtr {
|
Append( []( My &table ) -> Registry::BaseItemPtr {
|
||||||
const auto pTrack = &findTrack( table );
|
const auto pTrack = &table.FindWaveTrack();
|
||||||
const auto &view = WaveTrackView::Get( *pTrack );
|
const auto &view = WaveTrackView::Get( *pTrack );
|
||||||
const auto displays = view.GetDisplays();
|
const auto displays = view.GetDisplays();
|
||||||
bool hasWaveform = (displays.end() != std::find(
|
bool hasWaveform = (displays.end() != std::find(
|
||||||
@@ -712,7 +715,7 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
|
|
||||||
// Conditionally add sub-menu for spectrogram settings, if showing spectrum
|
// Conditionally add sub-menu for spectrogram settings, if showing spectrum
|
||||||
Append( []( My &table ) -> Registry::BaseItemPtr {
|
Append( []( My &table ) -> Registry::BaseItemPtr {
|
||||||
const auto pTrack = &findTrack( table );
|
const auto pTrack = &table.FindWaveTrack();
|
||||||
const auto &view = WaveTrackView::Get( *pTrack );
|
const auto &view = WaveTrackView::Get( *pTrack );
|
||||||
const auto displays = view.GetDisplays();
|
const auto displays = view.GetDisplays();
|
||||||
bool hasSpectrum = (displays.end() != std::find(
|
bool hasSpectrum = (displays.end() != std::find(
|
||||||
@@ -772,7 +775,8 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
AudacityProject &project =
|
AudacityProject &project =
|
||||||
static_cast< WaveTrackMenuTable& >( handler ).mpData->project;
|
static_cast< WaveTrackMenuTable& >( handler ).mpData->project;
|
||||||
auto &tracks = TrackList::Get( project );
|
auto &tracks = TrackList::Get( project );
|
||||||
auto &track = findTrack( handler );
|
auto &table = static_cast< WaveTrackMenuTable& >( handler );
|
||||||
|
auto &track = table.FindWaveTrack();
|
||||||
auto next = * ++ tracks.Find(&track);
|
auto next = * ++ tracks.Find(&track);
|
||||||
canMakeStereo =
|
canMakeStereo =
|
||||||
(next &&
|
(next &&
|
||||||
@@ -786,8 +790,10 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
|||||||
AppendItem( "Swap", OnSwapChannelsID, XO("Swap Stereo &Channels"),
|
AppendItem( "Swap", OnSwapChannelsID, XO("Swap Stereo &Channels"),
|
||||||
POPUP_MENU_FN( OnSwapChannels ),
|
POPUP_MENU_FN( OnSwapChannels ),
|
||||||
[]( PopupMenuHandler &handler, wxMenu &menu, int id ){
|
[]( PopupMenuHandler &handler, wxMenu &menu, int id ){
|
||||||
|
auto &track =
|
||||||
|
static_cast< WaveTrackMenuTable& >( handler ).FindWaveTrack();
|
||||||
bool isStereo =
|
bool isStereo =
|
||||||
2 == TrackList::Channels( &findTrack( handler ) ).size();
|
2 == TrackList::Channels( &track ).size();
|
||||||
menu.Enable( id, isStereo && !isUnsafe( handler ) );
|
menu.Enable( id, isStereo && !isUnsafe( handler ) );
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -1435,3 +1441,4 @@ auto GetDefaultWaveTrackHeight::Implementation() -> Function {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
static GetDefaultWaveTrackHeight registerGetDefaultWaveTrackHeight;
|
static GetDefaultWaveTrackHeight registerGetDefaultWaveTrackHeight;
|
||||||
|
|
||||||
|
|||||||
@@ -68,4 +68,13 @@ private:
|
|||||||
std::weak_ptr<PanSliderHandle> mPanHandle;
|
std::weak_ptr<PanSliderHandle> mPanHandle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include "../../../../widgets/PopupMenuTable.h"
|
||||||
|
|
||||||
|
struct WaveTrackPopupMenuTable : public PopupMenuTable
|
||||||
|
{
|
||||||
|
using PopupMenuTable::PopupMenuTable;
|
||||||
|
PlayableTrackControls::InitMenuData *mpData{};
|
||||||
|
WaveTrack &FindWaveTrack () const;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -187,12 +187,12 @@ protected:
|
|||||||
// A "CRTP" class that injects a convenience function, which appends a menu item
|
// A "CRTP" class that injects a convenience function, which appends a menu item
|
||||||
// computed lazily by a function that is passed the table (after it has stored
|
// computed lazily by a function that is passed the table (after it has stored
|
||||||
// its user data)
|
// its user data)
|
||||||
template< typename Derived >
|
template< typename Derived, typename Base = PopupMenuTable >
|
||||||
class ComputedPopupMenuTable : public PopupMenuTable
|
class ComputedPopupMenuTable : public Base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using PopupMenuTable::PopupMenuTable;
|
using Base::Base;
|
||||||
using PopupMenuTable::Append;
|
using Base::Append;
|
||||||
|
|
||||||
// Appends a computed item, which may be omitted when function returns null
|
// Appends a computed item, which may be omitted when function returns null
|
||||||
// and thus can be a conditional item
|
// and thus can be a conditional item
|
||||||
|
|||||||
Reference in New Issue
Block a user