mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-24 08:28:04 +02:00
Sub-view objects report their complete type, not just an enum value
This commit is contained in:
parent
36aad4d1c6
commit
7cff170cf7
@ -551,9 +551,10 @@ bool NyquistEffect::Init()
|
||||
for ( auto t :
|
||||
TrackList::Get( *project ).Selected< const WaveTrack >() ) {
|
||||
const auto displays = WaveTrackView::Get(*t).GetDisplays();
|
||||
bool hasSpectral =
|
||||
make_iterator_range( displays.begin(), displays.end())
|
||||
.contains( WaveTrackViewConstants::Spectrum );
|
||||
bool hasSpectral = (displays.end() != std::find(
|
||||
displays.begin(), displays.end(),
|
||||
WaveTrackSubView::Type{ WaveTrackViewConstants::Spectrum, {} }
|
||||
) );
|
||||
if ( !hasSpectral ||
|
||||
!(t->GetSpectrogramSettings().SpectralSelectionEnabled())) {
|
||||
bAllowSpectralEditing = false;
|
||||
@ -1097,7 +1098,7 @@ bool NyquistEffect::ProcessOne()
|
||||
spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL");
|
||||
auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||
auto format = [&]( decltype(displays[0]) display ){
|
||||
switch ( display )
|
||||
switch ( display.id )
|
||||
{
|
||||
case Waveform:
|
||||
return wxT("\"Waveform\"");
|
||||
|
@ -36,8 +36,11 @@ void DoNextPeakFrequency(AudacityProject &project, bool up)
|
||||
const WaveTrack *pTrack {};
|
||||
for ( auto wt : tracks.Selected< const WaveTrack >() ) {
|
||||
const auto displays = WaveTrackView::Get( *wt ).GetDisplays();
|
||||
if ( make_iterator_range( displays.begin(), displays.end() )
|
||||
.contains( WaveTrackViewConstants::Spectrum) ) {
|
||||
bool hasSpectrum = (displays.end() != std::find(
|
||||
displays.begin(), displays.end(),
|
||||
WaveTrackSubView::Type{ WaveTrackViewConstants::Spectrum, {} }
|
||||
) );
|
||||
if ( hasSpectrum ) {
|
||||
pTrack = wt;
|
||||
break;
|
||||
}
|
||||
|
@ -30,10 +30,12 @@ Paul Licameli split from WaveTrackView.cpp
|
||||
#include <wx/dcmemory.h>
|
||||
#include <wx/graphics.h>
|
||||
|
||||
static WaveTrackSubView::RegisteredType reg{ {
|
||||
static WaveTrackSubView::Type sType{
|
||||
WaveTrackViewConstants::Spectrum,
|
||||
{ wxT("Spectrogram"), XO("&Spectrogram") }
|
||||
} };
|
||||
};
|
||||
|
||||
static WaveTrackSubView::RegisteredType reg{ sType };
|
||||
|
||||
SpectrumView::~SpectrumView() = default;
|
||||
|
||||
@ -78,9 +80,9 @@ void SpectrumView::DoSetMinimized( bool minimized )
|
||||
TrackView::DoSetMinimized( minimized );
|
||||
}
|
||||
|
||||
auto SpectrumView::SubViewType() const -> Display
|
||||
auto SpectrumView::SubViewType() const -> const Type &
|
||||
{
|
||||
return WaveTrackViewConstants::Spectrum;
|
||||
return sType;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackVRulerControls> SpectrumView::DoGetVRulerControls()
|
||||
|
@ -24,7 +24,7 @@ public:
|
||||
using WaveTrackSubView::WaveTrackSubView;
|
||||
~SpectrumView() override;
|
||||
|
||||
virtual Display SubViewType() const override;
|
||||
const Type &SubViewType() const override;
|
||||
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
|
||||
|
@ -659,7 +659,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu)
|
||||
int displayId = OnSetDisplayId;
|
||||
int nDisplays = 0;
|
||||
for ( const auto &type : AllTypes() ) {
|
||||
if ( iter != end && *iter == type.id ) {
|
||||
if ( iter != end && iter->id == type.id ) {
|
||||
checkedIds.push_back( displayId );
|
||||
uniqueDisplay = displayId;
|
||||
++iter;
|
||||
@ -796,9 +796,10 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable)
|
||||
|
||||
if ( pTrack ) {
|
||||
const auto displays = view.GetDisplays();
|
||||
bool hasWaveform =
|
||||
make_iterator_range( displays.begin(), displays.end() )
|
||||
.contains( WaveTrackViewConstants::Waveform );
|
||||
bool hasWaveform = (displays.end() != std::find(
|
||||
displays.begin(), displays.end(),
|
||||
WaveTrackSubView::Type{ WaveTrackViewConstants::Waveform, {} }
|
||||
) );
|
||||
if( hasWaveform ){
|
||||
POPUP_MENU_SEPARATOR()
|
||||
POPUP_MENU_SUB_MENU(OnWaveColorID, XO("&Wave Color"), WaveColorMenuTable)
|
||||
@ -819,7 +820,7 @@ void WaveTrackMenuTable::OnMultiView(wxCommandEvent & event)
|
||||
bool multi = !view.GetMultiView();
|
||||
const auto &displays = view.GetDisplays();
|
||||
const auto display = displays.empty()
|
||||
? WaveTrackViewConstants::Waveform : *displays.begin();
|
||||
? WaveTrackViewConstants::Waveform : displays.begin()->id;
|
||||
for (const auto channel : TrackList::Channels(pTrack)) {
|
||||
auto &channelView = WaveTrackView::Get( *channel );
|
||||
channelView.SetMultiView( multi );
|
||||
@ -856,7 +857,8 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event)
|
||||
}
|
||||
else {
|
||||
const auto displays = view.GetDisplays();
|
||||
const bool wrongType = !(displays.size() == 1 && displays[0] == id);
|
||||
const bool wrongType =
|
||||
!(displays.size() == 1 && displays[0].id == id);
|
||||
if (wrongType) {
|
||||
for (auto channel : TrackList::Channels(pTrack)) {
|
||||
channel->SetLastScaleType();
|
||||
|
@ -889,12 +889,13 @@ WaveTrackView::DoDetailedHitTest
|
||||
return { false, results };
|
||||
}
|
||||
|
||||
auto WaveTrackView::GetDisplays() const -> std::vector<Display>
|
||||
auto WaveTrackView::GetDisplays() const
|
||||
-> std::vector< WaveTrackSubView::Type >
|
||||
{
|
||||
BuildSubViews();
|
||||
|
||||
// Collect the display types of visible views and sort them by position
|
||||
using Pair = std::pair< int, Display >;
|
||||
using Pair = std::pair< int, WaveTrackSubView::Type >;
|
||||
std::vector< Pair > pairs;
|
||||
size_t ii = 0;
|
||||
WaveTrackSubViews::ForEach( [&]( const WaveTrackSubView &subView ){
|
||||
@ -904,7 +905,7 @@ auto WaveTrackView::GetDisplays() const -> std::vector<Display>
|
||||
++ii;
|
||||
} );
|
||||
std::sort( pairs.begin(), pairs.end() );
|
||||
std::vector<Display> results;
|
||||
std::vector< WaveTrackSubView::Type > results;
|
||||
for ( const auto &pair : pairs )
|
||||
results.push_back( pair.second );
|
||||
return results;
|
||||
@ -921,7 +922,7 @@ bool WaveTrackView::ToggleSubView(Display display)
|
||||
size_t ii = 0;
|
||||
size_t found = 0;
|
||||
if ( WaveTrackSubViews::FindIf( [&]( const WaveTrackSubView &subView ) {
|
||||
if ( subView.SubViewType() == display ) {
|
||||
if ( subView.SubViewType().id == display ) {
|
||||
found = ii;
|
||||
return true;
|
||||
}
|
||||
@ -982,7 +983,7 @@ void WaveTrackView::DoSetDisplay(Display display, bool exclusive)
|
||||
size_t ii = 0;
|
||||
std::vector< std::pair< WaveTrackViewConstants::Display, size_t > > pairs;
|
||||
WaveTrackSubViews::ForEach( [&pairs, &ii]( WaveTrackSubView &subView ){
|
||||
pairs.push_back( { subView.SubViewType(), ii++ } );
|
||||
pairs.push_back( { subView.SubViewType().id, ii++ } );
|
||||
} );
|
||||
std::sort( pairs.begin(), pairs.end() );
|
||||
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
explicit
|
||||
WaveTrackSubView( WaveTrackView &waveTrackView );
|
||||
|
||||
virtual Display SubViewType() const = 0;
|
||||
virtual const Type &SubViewType() const = 0;
|
||||
|
||||
std::pair<
|
||||
bool, // if true, hit-testing is finished
|
||||
@ -118,7 +118,7 @@ public:
|
||||
const std::shared_ptr<WaveTrack> &wt,
|
||||
CommonTrackView &view);
|
||||
|
||||
std::vector<Display> GetDisplays() const;
|
||||
std::vector< WaveTrackSubView::Type > GetDisplays() const;
|
||||
void SetDisplay(Display display, bool exclusive = true);
|
||||
|
||||
const WaveTrackSubViewPlacements &SavePlacements() const
|
||||
|
@ -36,10 +36,12 @@ Paul Licameli split from WaveTrackView.cpp
|
||||
#include <wx/graphics.h>
|
||||
#include <wx/dc.h>
|
||||
|
||||
static WaveTrackSubView::RegisteredType reg{ {
|
||||
static WaveTrackSubView::Type sType{
|
||||
WaveTrackViewConstants::Waveform,
|
||||
{ wxT("Waveform"), XO("Wa&veform") }
|
||||
} };
|
||||
};
|
||||
|
||||
static WaveTrackSubView::RegisteredType reg{ sType };
|
||||
|
||||
WaveformView::~WaveformView() = default;
|
||||
|
||||
@ -124,9 +126,9 @@ void WaveformView::DoSetMinimized( bool minimized )
|
||||
TrackView::DoSetMinimized( minimized );
|
||||
}
|
||||
|
||||
auto WaveformView::SubViewType() const -> Display
|
||||
auto WaveformView::SubViewType() const -> const Type &
|
||||
{
|
||||
return WaveTrackViewConstants::Waveform;
|
||||
return sType;
|
||||
}
|
||||
|
||||
std::shared_ptr<TrackVRulerControls> WaveformView::DoGetVRulerControls()
|
||||
|
@ -26,7 +26,7 @@ public:
|
||||
using WaveTrackSubView::WaveTrackSubView;
|
||||
~WaveformView() override;
|
||||
|
||||
virtual Display SubViewType() const override;
|
||||
const Type &SubViewType() const override;
|
||||
|
||||
std::shared_ptr<TrackVRulerControls> DoGetVRulerControls() override;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user