// ApplyChain returns true on success, false otherwise. // Any error reporting to the user has already been done. bool BatchCommands::ApplyChain(const wxString & filename) { mFileName = filename; unsigned int i; bool res = true; mAbort = false; for (i = 0; i < mCommandChain.GetCount(); i++) { if (!ApplyCommandInBatchMode(mCommandChain[i], mParamsChain[i]) || mAbort) { res = false; break; } } mFileName.Empty(); AudacityProject *proj = GetActiveProject(); if (!res) { if(proj) { // Chain failed or was cancelled; revert to the previous state proj->RollbackState(); } return false; } // Chain was successfully applied; save the NEW project state wxString longDesc, shortDesc; wxString name = gPrefs->Read(wxT("/Batch/ActiveChain"), wxEmptyString); if (name.IsEmpty()) { longDesc = wxT("Applied batch chain"); shortDesc = wxT("Apply chain"); } else { longDesc = wxString::Format(wxT("Applied batch chain '%s'"), name.c_str()); shortDesc = wxString::Format(wxT("Apply '%s'"), name.c_str()); } if (!proj) return false; proj->PushState(longDesc, shortDesc); return true; }