From b764c465d07b1c843be438c082efa7de5d4a43ce Mon Sep 17 00:00:00 2001 From: James Crook Date: Fri, 1 Apr 2016 11:13:32 +0100 Subject: [PATCH] Reduced some repetitive code. Added credit for Mark Young. Also added i18n-hint on translation and a couple of TODOs for further improvement. --- src/AboutDialog.cpp | 1 + src/TimerRecordDialog.cpp | 78 +++++++----------- src/export/Export.cpp | 169 +------------------------------------- 3 files changed, 32 insertions(+), 216 deletions(-) diff --git a/src/AboutDialog.cpp b/src/AboutDialog.cpp index b84da0b6e..d7f46ccc7 100644 --- a/src/AboutDialog.cpp +++ b/src/AboutDialog.cpp @@ -120,6 +120,7 @@ void AboutDialog::CreateCreditsList() AddCredit(wxString(wxT("Jun Wan, ")) + _("developer"), roleContributor); AddCredit(wxString(wxT("Daniel Winzen, ")) + _("developer"), roleContributor); AddCredit(wxString(wxT("Tom Woodhams, ")) + _("developer"), roleContributor); + AddCredit(wxString(wxT("Mark Young, ")) + _("developer"), roleContributor); AddCredit(wxString(wxT("Wing Yu, ")) + _("developer"), roleContributor); // Translators diff --git a/src/TimerRecordDialog.cpp b/src/TimerRecordDialog.cpp index 670b390a4..372eab32e 100644 --- a/src/TimerRecordDialog.cpp +++ b/src/TimerRecordDialog.cpp @@ -327,7 +327,6 @@ void TimerRecordDialog::OnOK(wxCommandEvent& WXUNUSED(event)) } } if (m_pTimerAutoExportCheckBoxCtrl->IsChecked()) { - if (!m_fnAutoExportFile.IsOk() || m_fnAutoExportFile.IsDir()) { wxMessageBox(_("Automatic Export path is invalid."), _("Error in Automatic Export"), wxICON_EXCLAMATION | wxOK); @@ -344,34 +343,19 @@ void TimerRecordDialog::OnOK(wxCommandEvent& WXUNUSED(event)) } void TimerRecordDialog::EnableDisableAutoControls(bool bEnable, int iControlGoup) { + if (iControlGoup == CONTROL_GROUP_EXPORT) { - // Enable or Disable the Export controls - if (bEnable) { - m_pTimerExportPathTextCtrl->Enable(); - m_pTimerExportPathButtonCtrl->Enable(); - } - else { - m_pTimerExportPathTextCtrl->Disable(); - m_pTimerExportPathButtonCtrl->Disable(); - } - } - else if (iControlGoup == CONTROL_GROUP_SAVE) { - // Enable or Disable the Save controls - if (bEnable) { - m_pTimerSavePathTextCtrl->Enable(); - m_pTimerSavePathButtonCtrl->Enable(); - } - else { - m_pTimerSavePathTextCtrl->Disable(); - m_pTimerSavePathButtonCtrl->Disable(); - } + m_pTimerExportPathTextCtrl->Enable( bEnable ); + m_pTimerExportPathButtonCtrl->Enable( bEnable); + } else if (iControlGoup == CONTROL_GROUP_SAVE) { + m_pTimerSavePathTextCtrl->Enable( bEnable); + m_pTimerSavePathButtonCtrl->Enable(bEnable ); } // Enable or disable the Choice box - if there is no Save or Export then this will be disabled if (m_pTimerAutoSaveCheckBoxCtrl->GetValue() || m_pTimerAutoExportCheckBoxCtrl->GetValue()) { m_pTimerAfterCompleteChoiceCtrl->Enable(); - } - else { + } else { m_pTimerAfterCompleteChoiceCtrl->SetSelection(POST_TIMER_RECORD_NOTHING); m_pTimerAfterCompleteChoiceCtrl->Disable(); } @@ -392,8 +376,7 @@ void TimerRecordDialog::UpdateTextBoxControls() { bool TimerRecordDialog::HaveFilesToRecover() { wxDir dir(FileNames::AutoSaveDir()); - if (!dir.IsOpened()) - { + if (!dir.IsOpened()) { wxMessageBox(_("Could not enumerate files in auto save directory."), _("Error"), wxICON_STOP); return false; @@ -437,13 +420,10 @@ int TimerRecordDialog::RunWaitDialog() if (m_DateTime_Start > wxDateTime::UNow()) updateResult = this->WaitForStart(); - if (updateResult != eProgressSuccess) - { + if (updateResult != eProgressSuccess) { // Don't proceed, but don't treat it as canceled recording. User just canceled waiting. return POST_TIMER_RECORD_CANCEL_WAIT; - } - else - { + } else { // Record for specified time. pProject->OnRecord(); bool bIsRecording = true; @@ -466,8 +446,7 @@ int TimerRecordDialog::RunWaitDialog() this->OnTimer(dummyTimerEvent); // Loop for progress display during recording. - while (bIsRecording && (updateResult == eProgressSuccess)) - { + while (bIsRecording && (updateResult == eProgressSuccess)) { wxMilliSleep(kTimerInterval); updateResult = progress.Update(); bIsRecording = (wxDateTime::UNow() <= m_DateTime_End); // Call UNow() again for extra accuracy... @@ -486,15 +465,14 @@ int TimerRecordDialog::RunWaitDialog() } int TimerRecordDialog::ExecutePostRecordActions(bool bWasStopped) { - // We no longer automatically (and silently) call ->Save() when the - // timer recording is completed! - // We can now Save and/or Export depending on the options selected by - // the user. + // MY: We no longer automatically (and silently) call ->Save() when the + // timer recording is completed. We can now Save and/or Export depending + // on the options selected by the user. // Once completed, we can also close Audacity, restart the system or // shutdown the system. // If there was any error with the auto save or export then we will not do // the actions requested and instead present an error mesasge to the user. - // Finally, if there is no post-record action selected then we will output + // Finally, if there is no post-record action selected then we output // a dialog detailing what has been carried out instead. AudacityProject* pProject = GetActiveProject(); @@ -511,8 +489,7 @@ int TimerRecordDialog::ExecutePostRecordActions(bool bWasStopped) { // MY: If this project has already been saved then simply execute a Save here if (m_bProjectAlreadySaved) { bSaveOK = pProject->Save(); - } - else { + } else { bSaveOK = pProject->SaveFromTimerRecording(m_fnAutoSaveFile); } } @@ -539,8 +516,7 @@ int TimerRecordDialog::ExecutePostRecordActions(bool bWasStopped) { if (bSaveOK) { sMessage.Printf("%s\n\nRecording saved: %s", sMessage, m_fnAutoSaveFile.GetFullPath()); - } - else { + } else { sMessage.Printf("%s\n\nError saving recording.", sMessage); } } @@ -548,8 +524,7 @@ int TimerRecordDialog::ExecutePostRecordActions(bool bWasStopped) { if (bExportOK) { sMessage.Printf("%s\n\nRecording exported: %s", sMessage, m_fnAutoExportFile.GetFullPath()); - } - else { + } else { sMessage.Printf("%s\n\nError exporting recording.", sMessage); } } @@ -566,8 +541,7 @@ int TimerRecordDialog::ExecutePostRecordActions(bool bWasStopped) { // Show Error Message Box wxMessageBox(sMessage, _("Error"), wxICON_EXCLAMATION | wxOK); - } - else { + } else { if (bWasStopped && (iOverriddenAction != POST_TIMER_RECORD_NOTHING)) { sMessage.Printf("%s\n\n'%s' has been cancelled as the recording was stopped.", @@ -919,21 +893,27 @@ int TimerRecordDialog::WaitForStart() return updateResult; } +// TODO: Rather than two flags, an enum with the possibilities would be better. int TimerRecordDialog::PreActionDelay(int iActionIndex, bool bSaved, bool bExported) { wxString sMessage; wxString sAction = m_pTimerAfterCompleteChoiceCtrl->GetString(iActionIndex); wxString sDone = ""; if (bSaved && bExported) { - sDone = "Saved and Exported"; + sDone = _("Saved and Exported"); } else if (bSaved) { - sDone = "Saved"; + sDone = _("Saved"); } else if (bExported) { - sDone = "Exported"; + sDone = _("Exported"); } - sMessage.Printf(_("Timer Recording completed: Recording has been %s as instructed.\n\n'%s' will occur shortly...\n"), + // TODO: The wording will sound better if there are complete messages for + // the will-occur-shortly messages. + /* i18n-hint: The first %s will be a translation of 'Saved', 'Exported' or + * 'Saved and Exported'. The second %s will be 'Exit Audacity' + * 'Restart System' or 'Shutdown System' */ + sMessage.Printf(_("Timer Recording completed: Recording has been %s.\n\n'%s' will occur shortly...\n"), sDone, sAction); wxDateTime dtNow = wxDateTime::UNow(); diff --git a/src/export/Export.cpp b/src/export/Export.cpp index 93858d47d..eca012ce1 100644 --- a/src/export/Export.cpp +++ b/src/export/Export.cpp @@ -954,173 +954,8 @@ bool Exporter::SetAutoExportOptions(AudacityProject *project) { mFormat = -1; mProject = project; - wxString maskString; - wxString defaultFormat = gPrefs->Read(wxT("/Export/Format"), - wxT("WAV")); - - mFilterIndex = 0; - - for (size_t i = 0; i < mPlugins.GetCount(); i++) { - for (int j = 0; j < mPlugins[i]->GetFormatCount(); j++) - { - maskString += mPlugins[i]->GetMask(j) + wxT("|"); - if (mPlugins[i]->GetFormat(j) == defaultFormat) { - mFormat = i; - mSubFormat = j; - } - if (mFormat == -1) mFilterIndex++; - } - } - if (mFormat == -1) - { - mFormat = 0; - mFilterIndex = 0; - } - maskString.RemoveLast(); - - mFilename.SetPath(gPrefs->Read(wxT("/Export/Path"), ::wxGetCwd())); - mFilename.SetName(mProject->GetName()); - while (true) { - // Must reset each iteration - mBook = NULL; - - FileDialog fd(mProject, - mFileDialogTitle, - mFilename.GetPath(), - mFilename.GetFullName(), - maskString, - wxFD_SAVE | wxRESIZE_BORDER); - mDialog = &fd; - mDialog->PushEventHandler(this); - - fd.SetUserPaneCreator(CreateUserPaneCallback, (wxUIntPtr) this); - fd.SetFilterIndex(mFilterIndex); - - int result = fd.ShowModal(); - - mDialog->PopEventHandler(); - - if (result == wxID_CANCEL) { - return false; - } - - mFilename = fd.GetPath(); - if (mFilename == wxT("")) { - return false; - } - - mFormat = fd.GetFilterIndex(); - mFilterIndex = fd.GetFilterIndex(); - - int c = 0; - for (size_t i = 0; i < mPlugins.GetCount(); i++) - { - for (int j = 0; j < mPlugins[i]->GetFormatCount(); j++) - { - if (mFilterIndex == c) - { - mFormat = i; - mSubFormat = j; - } - c++; - } - } - - wxString ext = mFilename.GetExt(); - wxString defext = mPlugins[mFormat]->GetExtension(mSubFormat).Lower(); - - // - // Check the extension - add the default if it's not there, - // and warn user if it's abnormal. - // - if (ext.IsEmpty()) { - // - // Make sure the user doesn't accidentally save the file - // as an extension with no name, like just plain ".wav". - // - if (mFilename.GetName().Left(1) == wxT(".")) { - wxString prompt = _("Are you sure you want to export the file as \"") + - mFilename.GetFullName() + - wxT("\"?\n"); - - int action = wxMessageBox(prompt, - _("Warning"), - wxYES_NO | wxICON_EXCLAMATION); - if (action != wxYES) { - continue; - } - } - - mFilename.SetExt(defext); - } - else if (!mPlugins[mFormat]->CheckFileName(mFilename, mSubFormat)) - { - continue; - } - else if (!ext.IsEmpty() && !mPlugins[mFormat]->IsExtension(ext, mSubFormat) && ext.CmpNoCase(defext)) { - wxString prompt; - prompt.Printf(_("You are about to export a %s file with the name \"%s\".\n\n\ - Normally these files end in \".%s\", and some programs\n\ - will not open files with nonstandard extensions.\n\n\ - Are you sure you want to export the file under this name?"), - mPlugins[mFormat]->GetFormat(mSubFormat).c_str(), - mFilename.GetFullName().c_str(), - defext.c_str()); - - int action = wxMessageBox(prompt, - _("Warning"), - wxYES_NO | wxICON_EXCLAMATION); - if (action != wxYES) { - continue; - } - } - - if (mFilename.GetFullPath().Length() >= 256) { - wxMessageBox(_("Sorry, pathnames longer than 256 characters not supported.")); - continue; - } - - // Check to see if we are writing to a path that a missing aliased file existed at. - // This causes problems for the exporter, so we don't allow it. - // Overwritting non-missing aliased files is okay. - // Also, this can only happen for uncompressed audio. - bool overwritingMissingAlias; - overwritingMissingAlias = false; - for (size_t i = 0; i < gAudacityProjects.GetCount(); i++) { - AliasedFileArray aliasedFiles; - FindDependencies(gAudacityProjects[i], &aliasedFiles); - size_t j; - for (j = 0; j< aliasedFiles.GetCount(); j++) { - if (mFilename.GetFullPath() == aliasedFiles[j].mFileName.GetFullPath() && - !mFilename.FileExists()) { - // Warn and return to the dialog - wxMessageBox(_("You are attempting to overwrite an aliased file that is missing.\n\ - The file cannot be written because the path is needed to restore the original audio to the project.\n\ - Choose File > Check Dependencies to view the locations of all missing files.\n\ - If you still wish to export, please choose a different filename or folder.")); - overwritingMissingAlias = true; - } - } - } - if (overwritingMissingAlias) - continue; - - if (mFilename.FileExists()) { - wxString prompt; - - prompt.Printf(_("A file named \"%s\" already exists. Replace?"), - mFilename.GetFullPath().c_str()); - - int action = wxMessageBox(prompt, - _("Warning"), - wxYES_NO | wxICON_EXCLAMATION); - if (action != wxYES) { - continue; - } - } - - break; - } + if( GetFilename()==false ) + return false; // Let user edit MetaData if (mPlugins[mFormat]->GetCanMetaData(mSubFormat)) {