From 6ccca16a756000268dd29cba1d89bb7e56a6e0c1 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 9 Jul 2019 10:29:29 -0400 Subject: [PATCH] Move display type from WaveTrack to WaveTrackView --- src/WaveTrack.cpp | 11 -------- src/WaveTrack.h | 7 ----- src/commands/SetTrackInfoCommand.cpp | 5 ++-- src/effects/Effect.cpp | 9 ++++--- src/effects/nyquist/Nyquist.cpp | 7 +++-- src/menus/SelectMenus.cpp | 4 ++- src/prefs/SpectrumPrefs.cpp | 8 +++--- src/prefs/WaveformPrefs.cpp | 5 +++- .../wavetrack/ui/SpectrumView.cpp | 1 + .../wavetrack/ui/WaveTrackControls.cpp | 21 +++++++++------ .../wavetrack/ui/WaveTrackView.cpp | 27 +++++++++++++++++-- .../wavetrack/ui/WaveTrackView.h | 10 +++++++ .../wavetrack/ui/WaveformView.cpp | 1 + 13 files changed, 76 insertions(+), 40 deletions(-) diff --git a/src/WaveTrack.cpp b/src/WaveTrack.cpp index 8cc4b1d04..83508ea4a 100644 --- a/src/WaveTrack.cpp +++ b/src/WaveTrack.cpp @@ -97,15 +97,6 @@ WaveTrack::WaveTrack(const std::shared_ptr &projDirManager, sampleFo } } - // Force creation always: - WaveformSettings &settings = GetIndependentWaveformSettings(); - - mDisplay = TracksPrefs::ViewModeChoice(); - if (mDisplay == WaveTrackViewConstants::obsoleteWaveformDBDisplay) { - mDisplay = WaveTrackViewConstants::Waveform; - settings.scaleType = WaveformSettings::stLogarithmic; - } - mLegacyProjectFileOffset = 0; mFormat = format; @@ -161,7 +152,6 @@ void WaveTrack::Init(const WaveTrack &orig) mOldGain[1] = 0.0; SetDefaultName(orig.GetDefaultName()); SetName(orig.GetName()); - mDisplay = orig.mDisplay; mDisplayMin = orig.mDisplayMin; mDisplayMax = orig.mDisplayMax; mSpectrumMin = orig.mSpectrumMin; @@ -196,7 +186,6 @@ void WaveTrack::Merge(const Track &orig) { orig.TypeSwitch( [&](const WaveTrack *pwt) { const WaveTrack &wt = *pwt; - mDisplay = wt.mDisplay; mGain = wt.mGain; mPan = wt.mPan; mDisplayMin = wt.mDisplayMin; diff --git a/src/WaveTrack.h b/src/WaveTrack.h index c131fd422..fa8a838f5 100644 --- a/src/WaveTrack.h +++ b/src/WaveTrack.h @@ -17,7 +17,6 @@ #include #include "WaveTrackLocation.h" -#include "tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" class ProgressDialog; @@ -523,17 +522,12 @@ private: // Set the unique autosave ID void SetAutoSaveIdent(int id); - using WaveTrackDisplay = WaveTrackViewConstants::Display; - int GetLastScaleType() const { return mLastScaleType; } void SetLastScaleType() const; int GetLastdBRange() const { return mLastdBRange; } void SetLastdBRange() const; - WaveTrackDisplay GetDisplay() const { return mDisplay; } - void SetDisplay(WaveTrackDisplay display) { mDisplay = display; } - void GetDisplayBounds(float *min, float *max) const; void SetDisplayBounds(float min, float max) const; void GetSpectrumBounds(float *min, float *max) const; @@ -568,7 +562,6 @@ private: mutable float mSpectrumMin; mutable float mSpectrumMax; - WaveTrackDisplay mDisplay; mutable int mLastScaleType; // last scale type choice mutable int mLastdBRange; mutable std::vector mDisplayLocationsCache; diff --git a/src/commands/SetTrackInfoCommand.cpp b/src/commands/SetTrackInfoCommand.cpp index 57fd75c5b..2f7c8a3e3 100644 --- a/src/commands/SetTrackInfoCommand.cpp +++ b/src/commands/SetTrackInfoCommand.cpp @@ -44,7 +44,8 @@ SetTrackAudioCommand and SetTrackVisualsCommand. #include "../prefs/SpectrogramSettings.h" #include "../Shuttle.h" #include "../ShuttleGui.h" -#include "../tracks/ui/TrackView.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" #include "CommandContext.h" SetTrackBase::SetTrackBase(){ @@ -353,7 +354,7 @@ bool SetTrackVisualsCommand::ApplyInner(const CommandContext & context, Track * TrackView::Get( *t ).SetHeight( mHeight ); if( wt && bHasDisplayType ) - wt->SetDisplay( + WaveTrackView::Get( *wt ).SetDisplay( (mDisplayType == kWaveform) ? WaveTrackViewConstants::Waveform : WaveTrackViewConstants::Spectrum diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 470280465..b53a81fdd 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -68,6 +68,8 @@ greater use in future. #include "../widgets/ProgressDialog.h" #include "../ondemand/ODManager.h" #include "TimeWarper.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" #include "../widgets/HelpSystem.h" #include "../widgets/NumericTextCtrl.h" #include "../widgets/AudacityMessageBox.h" @@ -2360,7 +2362,8 @@ void Effect::Preview(bool dryOnly) mixLeft->Offset(-mixLeft->GetStartTime()); mixLeft->SetSelected(true); - mixLeft->SetDisplay(WaveTrackViewConstants::NoDisplay); + WaveTrackView::Get( *mixLeft ) + .SetDisplay(WaveTrackViewConstants::NoDisplay); auto pLeft = mTracks->Add( mixLeft ); Track *pRight{}; if (mixRight) { @@ -2375,8 +2378,8 @@ void Effect::Preview(bool dryOnly) if (src->GetSelected() || mPreviewWithNotSelected) { auto dest = src->Copy(mT0, t1); dest->SetSelected(src->GetSelected()); - static_cast(dest.get()) - ->SetDisplay(WaveTrackViewConstants::NoDisplay); + WaveTrackView::Get( *static_cast(dest.get()) ) + .SetDisplay(WaveTrackViewConstants::NoDisplay); mTracks->Add( dest ); } } diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 612b142f2..3ba86ddb8 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -73,6 +73,8 @@ effects from this one class. #include "../../wxFileNameWrapper.h" #include "../../prefs/GUIPrefs.h" #include "../../prefs/WaveformSettings.h" +#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" +#include "../../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" #include "../../widgets/NumericTextCtrl.h" #include "../../widgets/ProgressDialog.h" @@ -542,7 +544,8 @@ bool NyquistEffect::Init() for ( auto t : TrackList::Get( *project ).Selected< const WaveTrack >() ) { - if (t->GetDisplay() != WaveTrackViewConstants::Spectrum || + if (WaveTrackView::Get(*t).GetDisplay() + != WaveTrackViewConstants::Spectrum || !(t->GetSpectrogramSettings().SpectralSelectionEnabled())) { bAllowSpectralEditing = false; break; @@ -1066,7 +1069,7 @@ bool NyquistEffect::ProcessOne() [&](const WaveTrack *wt) { type = wxT("wave"); spectralEditp = mCurTrack[0]->GetSpectrogramSettings().SpectralSelectionEnabled()? wxT("T") : wxT("NIL"); - switch (wt->GetDisplay()) + switch ( WaveTrackView::Get( *wt ).GetDisplay() ) { case Waveform: view = (mCurTrack[0]->GetWaveformSettings().scaleType == 0) ? wxT("\"Waveform\"") : wxT("\"Waveform (dB)\""); diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index 6501670b8..6210bfb1f 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -21,6 +21,8 @@ #include "../commands/CommandManager.h" #include "../toolbars/ControlToolBar.h" #include "../tracks/ui/SelectHandle.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" // private helper classes and functions namespace { @@ -33,7 +35,7 @@ void DoNextPeakFrequency(AudacityProject &project, bool up) // Find the first selected wave track that is in a spectrogram view. const WaveTrack *pTrack {}; for ( auto wt : tracks.Selected< const WaveTrack >() ) { - const int display = wt->GetDisplay(); + const auto display = WaveTrackView::Get( *wt ).GetDisplay(); if (display == WaveTrackViewConstants::Spectrum) { pTrack = wt; break; diff --git a/src/prefs/SpectrumPrefs.cpp b/src/prefs/SpectrumPrefs.cpp index 2f4ac3422..65f272cdf 100644 --- a/src/prefs/SpectrumPrefs.cpp +++ b/src/prefs/SpectrumPrefs.cpp @@ -31,6 +31,7 @@ #include "../TrackPanel.h" #include "../WaveTrack.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" #include @@ -48,7 +49,7 @@ SpectrumPrefs::SpectrumPrefs(wxWindow * parent, wxWindowID winid, WaveTrack *wt) wt->GetSpectrumBounds(&mOrigMin, &mOrigMax); mTempSettings.maxFreq = mOrigMax; mTempSettings.minFreq = mOrigMin; - mOrigDisplay = mWt->GetDisplay(); + mOrigDisplay = WaveTrackView::Get( *mWt ).GetDisplay(); } else { mTempSettings = mOrigSettings = SpectrogramSettings::defaults(); @@ -423,7 +424,7 @@ void SpectrumPrefs::Rollback() if (mWt && isOpenPage) { auto channels = TrackList::Channels(mWt); for (auto channel : channels) - channel->SetDisplay(mOrigDisplay); + WaveTrackView::Get( *channel ).SetDisplay( mOrigDisplay ); } if (isOpenPage) { @@ -470,7 +471,8 @@ void SpectrumPrefs::Preview() if (mWt && isOpenPage) { for (auto channel : TrackList::Channels(mWt)) - channel->SetDisplay(WaveTrackViewConstants::Spectrum); + WaveTrackView::Get( *channel ) + .SetDisplay( WaveTrackViewConstants::Spectrum ); } if (isOpenPage) { diff --git a/src/prefs/WaveformPrefs.cpp b/src/prefs/WaveformPrefs.cpp index 7fb3f62fe..56b295b1c 100644 --- a/src/prefs/WaveformPrefs.cpp +++ b/src/prefs/WaveformPrefs.cpp @@ -27,6 +27,8 @@ Paul Licameli #include "../TrackPanel.h" #include "../ShuttleGui.h" #include "../WaveTrack.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackView.h" +#include "../tracks/playabletrack/wavetrack/ui/WaveTrackViewConstants.h" WaveformPrefs::WaveformPrefs(wxWindow * parent, wxWindowID winid, WaveTrack *wt) /* i18n-hint: A waveform is a visual representation of vibration */ @@ -184,7 +186,8 @@ bool WaveformPrefs::Commit() if (mWt && isOpenPage) { for (auto channel : TrackList::Channels(mWt)) - channel->SetDisplay(WaveTrackViewConstants::Waveform); + WaveTrackView::Get( *channel ) + .SetDisplay( WaveTrackViewConstants::Waveform ); } if (isOpenPage) { diff --git a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp index 03352137f..8cb0f5668 100644 --- a/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/SpectrumView.cpp @@ -15,6 +15,7 @@ Paul Licameli split from WaveTrackView.cpp #include "SpectrumVRulerControls.h" #include "WaveTrackView.h" +#include "WaveTrackViewConstants.h" #include "../../../../AColor.h" #include "../../../../Prefs.h" diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp index 4e9eac80f..9ec4a0ecc 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackControls.cpp @@ -16,7 +16,7 @@ Paul Licameli split from TrackPanel.cpp #include "../../ui/PlayableTrackButtonHandles.h" #include "WaveTrackSliderHandles.h" -#include "../../../ui/TrackView.h" +#include "WaveTrackView.h" #include "../../../../AudioIOBase.h" #include "../../../../CellularPanel.h" #include "../../../../Menus.h" @@ -599,7 +599,7 @@ void WaveTrackMenuTable::InitMenu(Menu *pMenu, void *pUserData) std::vector checkedIds; - const int display = pTrack->GetDisplay(); + const auto display = WaveTrackView::Get( *pTrack ).GetDisplay(); checkedIds.push_back( display == WaveTrackViewConstants::Waveform ? (pTrack->GetWaveformSettings().isLinear() @@ -702,7 +702,9 @@ BEGIN_POPUP_MENU(WaveTrackMenuTable) #endif WaveTrack *const pTrack = static_cast(mpTrack); - if( pTrack && pTrack->GetDisplay() != WaveTrackViewConstants::Spectrum ){ + if( pTrack && + WaveTrackView::Get( *pTrack ).GetDisplay() + != WaveTrackViewConstants::Spectrum ){ POPUP_MENU_SEPARATOR() POPUP_MENU_SUB_MENU(OnWaveColorID, _("&Wave Color"), WaveColorMenuTable) } @@ -723,7 +725,7 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event) const auto pTrack = static_cast(mpData->pTrack); bool linear = false; - WaveTrack::WaveTrackDisplay id; + WaveTrackView::WaveTrackDisplay id; switch (idInt) { default: case OnWaveformID: @@ -734,14 +736,15 @@ void WaveTrackMenuTable::OnSetDisplay(wxCommandEvent & event) id = Spectrum; break; } - const bool wrongType = pTrack->GetDisplay() != id; + const bool wrongType = WaveTrackView::Get( *pTrack ).GetDisplay() != id; const bool wrongScale = (id == Waveform && pTrack->GetWaveformSettings().isLinear() != linear); if (wrongType || wrongScale) { for (auto channel : TrackList::Channels(pTrack)) { channel->SetLastScaleType(); - channel->SetDisplay(WaveTrack::WaveTrackDisplay(id)); + WaveTrackView::Get( *channel ) + .SetDisplay(WaveTrackView::WaveTrackDisplay(id)); if (wrongScale) channel->GetIndependentWaveformSettings().scaleType = linear ? WaveformSettings::stLinear @@ -876,8 +879,8 @@ void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &) // Set NEW track heights and minimized state auto - &view = TrackView::Get( *pTrack ), - &partnerView = TrackView::Get( *partner ); + &view = WaveTrackView::Get( *pTrack ), + &partnerView = WaveTrackView::Get( *partner ); view.SetMinimized(false); partnerView.SetMinimized(false); int AverageHeight = (view.GetHeight() + partnerView.GetHeight()) / 2; @@ -886,6 +889,8 @@ void WaveTrackMenuTable::OnMergeStereo(wxCommandEvent &) view.SetMinimized(bBothMinimizedp); partnerView.SetMinimized(bBothMinimizedp); + partnerView.SetDisplay( view.GetDisplay() ); + //On Demand - join the queues together. if (ODManager::IsInstanceCreated()) if (!ODManager::Instance() diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp index d6ac68b78..c88296345 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.cpp @@ -22,6 +22,8 @@ Paul Licameli split from TrackPanel.cpp #include "../../../../TrackPanelMouseEvent.h" #include "../../../../ViewInfo.h" #include "../../../../prefs/SpectrogramSettings.h" +#include "../../../../prefs/WaveformSettings.h" +#include "../../../../prefs/TracksPrefs.h" #include "../../../ui/TimeShiftHandle.h" @@ -39,12 +41,34 @@ WaveTrackView::WaveTrackView( const std::shared_ptr &pTrack ) : CommonTrackView{ pTrack } { WaveTrackSubViews::BuildAll(); + + mDisplay = TracksPrefs::ViewModeChoice(); + + // Force creation always: + WaveformSettings &settings = static_cast< WaveTrack* >( pTrack.get() ) + ->GetIndependentWaveformSettings(); + + if (mDisplay == WaveTrackViewConstants::obsoleteWaveformDBDisplay) { + mDisplay = WaveTrackViewConstants::Waveform; + settings.scaleType = WaveformSettings::stLogarithmic; + } } WaveTrackView::~WaveTrackView() { } +void WaveTrackView::CopyTo( Track &track ) const +{ + TrackView::CopyTo( track ); + auto &other = TrackView::Get( track ); + + if ( const auto pOther = dynamic_cast< WaveTrackView* >( &other ) ) { + // only one field is important to preserve in undo/redo history + pOther->mDisplay = mDisplay; + } +} + std::vector WaveTrackView::DetailedHitTest (const TrackPanelMouseState &st, const AudacityProject *pProject, int currentTool, bool bMultiTool) @@ -87,8 +111,7 @@ WaveTrackView::DoDetailedHitTest auto WaveTrackView::GetSubViews( const wxRect &rect ) -> Refinement { - auto wt = static_cast( FindTrack().get() ); - auto display = wt->GetDisplay(); + auto display = mDisplay; std::shared_ptr pSubView; WaveTrackSubViews::ForEach( [&,display]( WaveTrackSubView &subView ){ if ( subView.SubViewType() == display ) diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h index 35ebabcb7..b78dbccee 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h +++ b/src/tracks/playabletrack/wavetrack/ui/WaveTrackView.h @@ -44,6 +44,9 @@ public: WaveTrackView( const std::shared_ptr &pTrack ); ~WaveTrackView() override; + // Preserve some view state too for undo/redo purposes + void CopyTo( Track &track ) const override; + std::shared_ptr DoGetVRulerControls() override; // CommonTrackView implementation @@ -58,6 +61,11 @@ public: const std::shared_ptr &wt, CommonTrackView &view); + using WaveTrackDisplay = WaveTrackViewConstants::Display; + + WaveTrackDisplay GetDisplay() const { return mDisplay; } + void SetDisplay(WaveTrackDisplay display) { mDisplay = display; } + private: // TrackPanelDrawable implementation void Draw( @@ -74,6 +82,8 @@ private: protected: void DoSetMinimized( bool minimized ) override; + + WaveTrackDisplay mDisplay; }; // Helper for drawing routines diff --git a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp index 115593418..a238d018a 100644 --- a/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp +++ b/src/tracks/playabletrack/wavetrack/ui/WaveformView.cpp @@ -15,6 +15,7 @@ Paul Licameli split from WaveTrackView.cpp #include "WaveformVRulerControls.h" #include "WaveTrackView.h" +#include "WaveTrackViewConstants.h" #include "CutlineHandle.h" #include "SampleHandle.h"