From 7dbb946d298bbf2a103168b66e2388ab4849a04c Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Sat, 7 Jan 2017 14:39:50 -0500 Subject: [PATCH] Propagate progress bar cancellation correctly in Normalize --- src/effects/Normalize.cpp | 18 +++++++++++++----- src/effects/Normalize.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/effects/Normalize.cpp b/src/effects/Normalize.cpp index 627783c08..d2daf993b 100644 --- a/src/effects/Normalize.cpp +++ b/src/effects/Normalize.cpp @@ -194,7 +194,9 @@ bool EffectNormalize::Process() else msg = topMsg + _("Analyzing first track of stereo pair: ") + trackName; float offset, min, max; - AnalyseTrack(track, msg, curTrackNum, offset, min, max); + if (! ( bGoodResult = + AnalyseTrack(track, msg, curTrackNum, offset, min, max) ) ) + break; if(!track->GetLinked() || mStereoInd) { // mono or 'stereo tracks independently' float extent = wxMax(fabs(max), fabs(min)); @@ -220,7 +222,9 @@ bool EffectNormalize::Process() track = (WaveTrack *) iter.Next(); // get the next one msg = topMsg + _("Analyzing second track of stereo pair: ") + trackName; float offset2, min2, max2; - AnalyseTrack(track, msg, curTrackNum + 1, offset2, min2, max2); + if ( ! ( bGoodResult = + AnalyseTrack(track, msg, curTrackNum + 1, offset2, min2, max2) ) ) + break; float extent = wxMax(fabs(min), fabs(max)); extent = wxMax(extent, fabs(min2)); extent = wxMax(extent, fabs(max2)); @@ -325,7 +329,7 @@ bool EffectNormalize::TransferDataFromWindow() // EffectNormalize implementation -void EffectNormalize::AnalyseTrack(const WaveTrack * track, const wxString &msg, +bool EffectNormalize::AnalyseTrack(const WaveTrack * track, const wxString &msg, int curTrackNum, float &offset, float &min, float &max) { @@ -334,7 +338,9 @@ void EffectNormalize::AnalyseTrack(const WaveTrack * track, const wxString &msg, // TODO: should we restrict the flags to just the relevant block files (for selections) while (track->GetODFlags()) { // update the gui - mProgress->Update(0, wxT("Waiting for waveform to finish computing...")); + if (ProgressResult::Cancelled == mProgress->Update( + 0, wxT("Waiting for waveform to finish computing...")) ) + return false; wxMilliSleep(100); } @@ -344,11 +350,13 @@ void EffectNormalize::AnalyseTrack(const WaveTrack * track, const wxString &msg, } if(mDC) { - AnalyseDC(track, msg, curTrackNum, offset); + auto rc = AnalyseDC(track, msg, curTrackNum, offset); min += offset; max += offset; + return rc; } else { offset = 0.0; + return true; } } diff --git a/src/effects/Normalize.h b/src/effects/Normalize.h index 1655542dc..557c07ac2 100644 --- a/src/effects/Normalize.h +++ b/src/effects/Normalize.h @@ -58,7 +58,7 @@ private: bool ProcessOne( WaveTrack * t, const wxString &msg, int curTrackNum, float offset); - void AnalyseTrack(const WaveTrack * track, const wxString &msg, + bool AnalyseTrack(const WaveTrack * track, const wxString &msg, int curTrackNum, float &offset, float &min, float &max); void AnalyzeData(float *buffer, size_t len);