From 7cff170cf7330c5188b0557db973e7ff1cf2af35 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 18 Jan 2020 17:45:52 -0500 Subject: [PATCH] Sub-view objects report their complete type, not just an enum value --- src/effects/nyquist/Nyquist.cpp | 9 +++++---- src/menus/SelectMenus.cpp | 7 +++++-- .../playabletrack/wavetrack/ui/SpectrumView.cpp | 10 ++++++---- .../playabletrack/wavetrack/ui/SpectrumView.h | 2 +- .../wavetrack/ui/WaveTrackControls.cpp | 14 ++++++++------ .../playabletrack/wavetrack/ui/WaveTrackView.cpp | 11 ++++++----- .../playabletrack/wavetrack/ui/WaveTrackView.h | 4 ++-- .../playabletrack/wavetrack/ui/WaveformView.cpp | 10 ++++++---- .../playabletrack/wavetrack/ui/WaveformView.h | 2 +- 9 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index c76f1d0a4..7d2975d5a 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -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\""); diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index da25e42bf..d60d642ee 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -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; } diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp index 35a9f2a40..1a6922f09 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp @@ -30,10 +30,12 @@ Paul Licameli split from WaveTrackView.cpp #include #include -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 SpectrumView::DoGetVRulerControls() diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.h b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.h index 49416d58a..787370e2e 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.h +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.h @@ -24,7 +24,7 @@ public: using WaveTrackSubView::WaveTrackSubView; ~SpectrumView() override; - virtual Display SubViewType() const override; + const Type &SubViewType() const override; std::shared_ptr DoGetVRulerControls() override; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index e82f9181c..e2b9681a6 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -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(); diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index d4cabd999..a2c20c6cc 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -889,12 +889,13 @@ WaveTrackView::DoDetailedHitTest return { false, results }; } -auto WaveTrackView::GetDisplays() const -> std::vector +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 ++ii; } ); std::sort( pairs.begin(), pairs.end() ); - std::vector 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() ); diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h index 95006b938..d0a42d60b 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h @@ -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 &wt, CommonTrackView &view); - std::vector GetDisplays() const; + std::vector< WaveTrackSubView::Type > GetDisplays() const; void SetDisplay(Display display, bool exclusive = true); const WaveTrackSubViewPlacements &SavePlacements() const diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp index a78f785d1..6ba32ab2a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp @@ -36,10 +36,12 @@ Paul Licameli split from WaveTrackView.cpp #include #include -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 WaveformView::DoGetVRulerControls() diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformView.h b/src/tracks/playabletrack/wavetrack/ui/WaveformView.h index 7c853c8ec..072fa2901 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformView.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformView.h @@ -26,7 +26,7 @@ public: using WaveTrackSubView::WaveTrackSubView; ~WaveformView() override; - virtual Display SubViewType() const override; + const Type &SubViewType() const override; std::shared_ptr DoGetVRulerControls() override;