From 5d28a05702dd1683081164cab167a36af0c34833 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 12 Apr 2016 16:16:32 -0400 Subject: [PATCH] RAII object for pausing and unpausing OD manager --- src/Menus.cpp | 3 +-- src/Project.cpp | 9 ++------- src/ondemand/ODManager.cpp | 4 ++-- src/ondemand/ODManager.h | 15 ++++++++++++--- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 6368c8de1..5adffbe12 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -5450,7 +5450,7 @@ void AudacityProject::OnImport() //sort selected files by OD status. Load non OD first so user can edit asap. //first sort selectedFiles. selectedFiles.Sort(CompareNoCaseFileName); - ODManager::Pause(); + ODManager::Pauser pauser; for (size_t ff = 0; ff < selectedFiles.GetCount(); ff++) { wxString fileName = selectedFiles[ff]; @@ -5466,7 +5466,6 @@ void AudacityProject::OnImport() gPrefs->Flush(); HandleResize(); // Adjust scrollers for NEW track sizes. - ODManager::Resume(); } void AudacityProject::OnImportLabels() diff --git a/src/Project.cpp b/src/Project.cpp index dc4391c87..4891e4ce4 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -412,7 +412,7 @@ public: //sort by OD non OD. load Non OD first so user can start editing asap. wxArrayString sortednames(filenames); - ODManager::Pause(); + ODManager::Pauser pauser; sortednames.Sort(CompareNoCaseFileName); for (unsigned int i = 0; i < sortednames.GetCount(); i++) { @@ -421,8 +421,6 @@ public: } mProject->HandleResize(); // Adjust scrollers for NEW track sizes. - ODManager::Resume(); - return true; } @@ -2500,7 +2498,7 @@ void AudacityProject::OpenFiles(AudacityProject *proj) //For the open menu we load OD first so user can edit asap. //first sort selectedFiles. selectedFiles.Sort(CompareNoCaseFileName); - ODManager::Pause(); + ODManager::Pauser pauser; for (size_t ff = 0; ff < selectedFiles.GetCount(); ff++) { const wxString &fileName = selectedFiles[ff]; @@ -2534,9 +2532,6 @@ void AudacityProject::OpenFiles(AudacityProject *proj) gPrefs->Write(wxT("/LastOpenType"),wxT("")); gPrefs->Flush(); - - ODManager::Resume(); - } // Most of this string was duplicated 3 places. Made the warning consistent in this global. diff --git a/src/ondemand/ODManager.cpp b/src/ondemand/ODManager.cpp index 3099b3962..4d498f30e 100644 --- a/src/ondemand/ODManager.cpp +++ b/src/ondemand/ODManager.cpp @@ -330,7 +330,7 @@ void ODManager::Start() //static function that prevents ODTasks from being scheduled //does not stop currently running tasks from completing their immediate subtask, //but presumably they will finish within a second -void ODManager::Pause(bool pause) +void ODManager::Pauser::Pause(bool pause) { if(IsInstanceCreated()) { @@ -349,7 +349,7 @@ void ODManager::Pause(bool pause) } } -void ODManager::Resume() +void ODManager::Pauser::Resume() { Pause(false); } diff --git a/src/ondemand/ODManager.h b/src/ondemand/ODManager.h index 872f48364..0423246ed 100644 --- a/src/ondemand/ODManager.h +++ b/src/ondemand/ODManager.h @@ -106,9 +106,18 @@ class ODManager final ///Get Total Number of Tasks. int GetTotalNumTasks(); - //Pause/unpause all OD Tasks. Does not occur immediately. - static void Pause(bool pause = true); - static void Resume(); + // RAII object for pausing and resuming.. + class Pauser + { + //Pause/unpause all OD Tasks. Does not occur immediately. + static void Pause(bool pause = true); + static void Resume(); + public: + Pauser() { Pause(); } + ~Pauser() { Resume(); } + Pauser(const Pauser&) PROHIBITED; + Pauser &operator= (const Pauser&) PROHIBITED; + }; static void LockLibSndFileMutex(); static void UnlockLibSndFileMutex();