From 7e573b9b2ffa4dd013bf965bc79755a314db258a Mon Sep 17 00:00:00 2001 From: James Crook Date: Wed, 9 Sep 2020 17:35:39 +0100 Subject: [PATCH] Bug 2493 - No command for setting multi-view Bug 2460 - Enh: Can't select "Multi-view" as default view mode in Tracks preferences This fixes both. --- .../wavetrack/ui/WaveTrackControls.cpp | 32 ++++++++++++------- .../wavetrack/ui/WaveTrackView.cpp | 6 ++++ .../wavetrack/ui/WaveTrackViewConstants.h | 4 ++- .../wavetrack/ui/WaveformView.cpp | 12 +++++-- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 827b3df53..b166e305a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -568,6 +568,7 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable) }; BeginSection( "SubViews" ); + // Multi-view check mark item, if more than one track sub-view type is // known Append( []( My &table ) -> Registry::BaseItemPtr { @@ -622,16 +623,17 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable) menu.Enable( id, false ); }; }; - Append( [type, id]( My &table ) -> Registry::BaseItemPtr { - const auto pTrack = &table.FindWaveTrack(); - const auto &view = WaveTrackView::Get( *pTrack ); - const auto itemType = - view.GetMultiView() ? Entry::CheckItem : Entry::RadioItem; - return std::make_unique( type.name.Internal(), itemType, - id, type.name.Msgid(), - POPUP_MENU_FN( OnSetDisplay ), table, - initFn( !view.GetMultiView() ) ); - } ); + if( id < OnSetDisplayId + 2 ) + Append( [type, id]( My &table ) -> Registry::BaseItemPtr { + const auto pTrack = &table.FindWaveTrack(); + const auto &view = WaveTrackView::Get( *pTrack ); + const auto itemType = + view.GetMultiView() ? Entry::CheckItem : Entry::RadioItem; + return std::make_unique( type.name.Internal(), itemType, + id, type.name.Msgid(), + POPUP_MENU_FN( OnSetDisplay ), table, + initFn( !view.GetMultiView() ) ); + } ); ++id; } BeginSection( "Extra" ); @@ -746,8 +748,16 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event) const auto pTrack = static_cast(mpData->pTrack); auto id = AllTypes()[ idInt - OnSetDisplayId ].id; - auto &view = WaveTrackView::Get( *pTrack ); + + if (id == WaveTrackViewConstants::Multiview) + { + // Only set it to multiview, if not already multi view. + if( !view.GetMultiView() ) + OnMultiView(event); + return; + } + if ( view.GetMultiView() ) { for (auto channel : TrackList::Channels(pTrack)) { if ( !WaveTrackView::Get( *channel ) diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index 9292fd958..70b416491 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -929,6 +929,12 @@ bool WaveTrackView::ToggleSubView(Display display) // Be sure the sequence in which the other views appear is determinate. void WaveTrackView::DoSetDisplay(Display display, bool exclusive) { + if (display == WaveTrackViewConstants::Multiview) { + SetMultiView(true); + display = WaveTrackViewConstants::Waveform; + exclusive = false; + } + // Some generality here anticipating more than two views. // The order of sub-views in the array is not specified, so make it definite // by sorting by the view type constants. diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h index f8ee93456..c612936d4 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h @@ -29,9 +29,11 @@ namespace WaveTrackViewConstants obsolete3, // was SpectralSelectionLogDisplay obsolete4, // was PitchDisplay + Multiview, + // Add values here, and update MaxDisplay. - MaxDisplay = Spectrum, + MaxDisplay = Multiview, NoDisplay, // Preview track has no display }; diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp index bc722ddb9..a9f430b60 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp @@ -36,12 +36,18 @@ Paul Licameli split from WaveTrackView.cpp #include #include -static WaveTrackSubView::Type sType{ +static WaveTrackSubView::Type sTypeWave{ WaveTrackViewConstants::Waveform, { wxT("Waveform"), XXO("Wa&veform") } }; -static WaveTrackSubViewType::RegisteredType reg{ sType }; +static WaveTrackSubView::Type sTypeMulti{ + WaveTrackViewConstants::Multiview, + { wxT("Multiview"), XXO("&Multi-view") } +}; + +static WaveTrackSubViewType::RegisteredType regWave{ sTypeWave }; +static WaveTrackSubViewType::RegisteredType regMulti{ sTypeMulti }; WaveformView::~WaveformView() = default; @@ -128,7 +134,7 @@ void WaveformView::DoSetMinimized( bool minimized ) auto WaveformView::SubViewType() const -> const Type & { - return sType; + return sTypeWave; } std::shared_ptr WaveformView::DoGetVRulerControls()