From: Carl Hetherington Date: Fri, 13 Jan 2023 12:57:28 +0000 (+0100) Subject: Use more ScopeGuards. X-Git-Tag: v2.16.41~63 X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=b7e65adf286ce20918797a06a910ededf8f07b7b Use more ScopeGuards. --- diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 5ff04de22..257bb7ab1 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -80,6 +80,7 @@ #include "lib/log.h" #include "lib/make_dcp.h" #include "lib/release_notes.h" +#include "lib/scope_guard.h" #include "lib/screen.h" #include "lib/send_kdm_email_job.h" #include "lib/signal_manager.h" @@ -577,36 +578,37 @@ private: void file_new () { auto d = new FilmNameLocationDialog (this, _("New Film"), true); + ScopeGuard sg = [d]() { d->Destroy(); }; int const r = d->ShowModal (); - if (r == wxID_OK && d->check_path() && maybe_save_then_delete_film()) { - try { - new_film (d->path(), d->template_name()); - } catch (boost::filesystem::filesystem_error& e) { + if (r != wxID_OK || !d->check_path() || !maybe_save_then_delete_film()) { + return; + } + + try { + new_film (d->path(), d->template_name()); + } catch (boost::filesystem::filesystem_error& e) { #ifdef DCPOMATIC_WINDOWS - string bad_chars = "<>:\"/|?*"; - string const filename = d->path().filename().string(); - string found_bad_chars; - for (size_t i = 0; i < bad_chars.length(); ++i) { - if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) { - found_bad_chars += bad_chars[i]; - } + string bad_chars = "<>:\"/|?*"; + string const filename = d->path().filename().string(); + string found_bad_chars; + for (size_t i = 0; i < bad_chars.length(); ++i) { + if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) { + found_bad_chars += bad_chars[i]; } - wxString message = _("Could not create folder to store film."); - message += " "; - if (!found_bad_chars.empty()) { - message += wxString::Format (_("Try removing the %s characters from your folder name."), std_to_wx(found_bad_chars).data()); - } else { - message += _("Please check that you do not have Windows controlled folder access enabled for DCP-o-matic."); - } - error_dialog (this, message, std_to_wx(e.what())); + } + wxString message = _("Could not create folder to store film."); + message += " "; + if (!found_bad_chars.empty()) { + message += wxString::Format (_("Try removing the %s characters from your folder name."), std_to_wx(found_bad_chars).data()); + } else { + message += _("Please check that you do not have Windows controlled folder access enabled for DCP-o-matic."); + } + error_dialog (this, message, std_to_wx(e.what())); #else - error_dialog (this, _("Could not create folder to store film."), std_to_wx(e.what())); + error_dialog (this, _("Could not create folder to store film."), std_to_wx(e.what())); #endif - } } - - d->Destroy (); } void file_open () @@ -617,6 +619,7 @@ private: std_to_wx (Config::instance()->default_directory_or (wx_to_std (wxStandardPaths::Get().GetDocumentsDir())).string ()), wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST ); + ScopeGuard sg = [c]() { c->Destroy(); }; int r; while (true) { @@ -631,8 +634,6 @@ private: if (r == wxID_OK && maybe_save_then_delete_film()) { load_film (wx_to_std (c->GetPath ())); } - - c->Destroy (); } void file_save () @@ -643,42 +644,37 @@ private: void file_save_as_template () { auto d = new SaveTemplateDialog (this); - int const r = d->ShowModal (); - if (r == wxID_OK) { + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() == wxID_OK) { Config::instance()->save_template (_film, d->name ()); } - d->Destroy (); } void file_duplicate () { auto d = new FilmNameLocationDialog (this, _("Duplicate Film"), false); - int const r = d->ShowModal (); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (r == wxID_OK && d->check_path() && maybe_save_film()) { + if (d->ShowModal() == wxID_OK && d->check_path() && maybe_save_film()) { shared_ptr film (new Film (d->path())); film->copy_from (_film); film->set_name (d->path().filename().generic_string()); film->write_metadata (); } - - d->Destroy (); } void file_duplicate_and_open () { auto d = new FilmNameLocationDialog (this, _("Duplicate Film"), false); - int const r = d->ShowModal (); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (r == wxID_OK && d->check_path() && maybe_save_film()) { + if (d->ShowModal() == wxID_OK && d->check_path() && maybe_save_film()) { shared_ptr film (new Film (d->path())); film->copy_from (_film); film->set_name (d->path().filename().generic_string()); film->write_metadata (); set_film (film); } - - d->Destroy (); } void file_close () @@ -733,29 +729,31 @@ private: DCPOMATIC_ASSERT (_clipboard); auto d = new PasteDialog (this, static_cast(_clipboard->video), static_cast(_clipboard->audio), !_clipboard->text.empty()); - if (d->ShowModal() == wxID_OK) { - for (auto i: _film_editor->content_panel()->selected()) { - if (d->video() && i->video) { - DCPOMATIC_ASSERT (_clipboard->video); - i->video->take_settings_from (_clipboard->video); - } - if (d->audio() && i->audio) { - DCPOMATIC_ASSERT (_clipboard->audio); - i->audio->take_settings_from (_clipboard->audio); - } + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { + return; + } - if (d->text()) { - auto j = i->text.begin (); - auto k = _clipboard->text.begin (); - while (j != i->text.end() && k != _clipboard->text.end()) { - (*j)->take_settings_from (*k); - ++j; - ++k; - } + for (auto i: _film_editor->content_panel()->selected()) { + if (d->video() && i->video) { + DCPOMATIC_ASSERT (_clipboard->video); + i->video->take_settings_from (_clipboard->video); + } + if (d->audio() && i->audio) { + DCPOMATIC_ASSERT (_clipboard->audio); + i->audio->take_settings_from (_clipboard->audio); + } + + if (d->text()) { + auto j = i->text.begin (); + auto k = _clipboard->text.begin (); + while (j != i->text.end() && k != _clipboard->text.end()) { + (*j)->take_settings_from (*k); + ++j; + ++k; } } } - d->Destroy (); } void edit_select_all () @@ -779,11 +777,9 @@ private: _("Restore default preferences"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION ); + ScopeGuard sg = [d]() { d->Destroy(); }; - int const r = d->ShowModal (); - d->Destroy (); - - if (r == wxID_YES) { + if (d->ShowModal() == wxID_YES) { Config::restore_defaults (); } } @@ -794,11 +790,9 @@ private: this, _("Specify ZIP file"), wxEmptyString, wxT("dcpomatic_config.zip"), wxT("ZIP files (*.zip)|*.zip"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; - int const r = dialog->ShowModal (); - dialog->Destroy (); - - if (r == wxID_OK) { + if (dialog->ShowModal() == wxID_OK) { save_all_config_as_zip (wx_to_std(dialog->GetPath())); } } @@ -823,9 +817,8 @@ private: if (Config::instance()->show_hints_before_make_dcp()) { auto hints = new HintsDialog (this, _film, false); - int const r = hints->ShowModal(); - hints->Destroy (); - if (r == wxID_CANCEL) { + ScopeGuard sg = [hints]() { hints->Destroy(); }; + if (hints->ShowModal() == wxID_CANCEL) { return; } } @@ -937,9 +930,8 @@ private: if (Config::instance()->show_hints_before_make_dcp()) { auto hints = new HintsDialog (this, _film, false); - int const r = hints->ShowModal(); - hints->Destroy (); - if (r == wxID_CANCEL) { + ScopeGuard sg = [hints]() { hints->Destroy(); }; + if (hints->ShowModal() == wxID_CANCEL) { return; } } @@ -977,8 +969,8 @@ private: } auto d = new SelfDKDMDialog (this, _film); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () != wxID_OK) { - d->Destroy (); return; } @@ -1028,49 +1020,49 @@ private: kdm->as_xml (path); } } - - d->Destroy (); } void jobs_export_video_file () { auto d = new ExportVideoFileDialog (this, _film->isdcf_name(true)); - if (d->ShowModal() == wxID_OK) { - if (boost::filesystem::exists(d->path())) { - bool ok = confirm_dialog( - this, - wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(d->path().string()).data()) - ); - - if (!ok) { - d->Destroy (); - return; - } - } + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { + return; + } - auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); - job->set_encoder ( - make_shared ( - _film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->split_streams(), d->x264_crf()) - ); - JobManager::instance()->add (job); + if (boost::filesystem::exists(d->path())) { + bool ok = confirm_dialog( + this, + wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(d->path().string()).data()) + ); + + if (!ok) { + return; + } } - d->Destroy (); + + auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); + job->set_encoder ( + make_shared ( + _film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->split_streams(), d->x264_crf()) + ); + JobManager::instance()->add (job); } void jobs_export_subtitles () { auto d = new ExportSubtitlesDialog (this, _film->reels().size(), _film->interop()); - if (d->ShowModal() == wxID_OK) { - auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); - job->set_encoder ( - make_shared(_film, job, d->path(), _film->isdcf_name(true), d->split_reels(), d->include_font()) - ); - JobManager::instance()->add (job); + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { + return; } - d->Destroy (); + auto job = make_shared(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP); + job->set_encoder( + make_shared(_film, job, d->path(), _film->isdcf_name(true), d->split_reels(), d->include_font()) + ); + JobManager::instance()->add(job); } @@ -1146,6 +1138,7 @@ private: void tools_send_translations () { auto d = new SendI18NDialog (this); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { string body; body += d->name() + "\n"; @@ -1169,24 +1162,22 @@ private: } } } - - d->Destroy (); } void help_about () { auto d = new AboutDialog (this); + ScopeGuard sg = [d]() { d->Destroy(); }; d->ShowModal (); - d->Destroy (); } void help_report_a_problem () { auto d = new ReportProblemDialog (this, _film); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { d->report (); } - d->Destroy (); } bool should_close () @@ -1201,10 +1192,9 @@ private: _("Unfinished jobs"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION ); + ScopeGuard sg = [d]() { d->Destroy(); }; - bool const r = d->ShowModal() == wxID_YES; - d->Destroy (); - return r; + return d->ShowModal() == wxID_YES; } void close (wxCloseEvent& ev) @@ -1540,8 +1530,8 @@ private: if (uc->state() == UpdateChecker::State::YES) { auto dialog = new UpdateDialog (this, uc->stable(), uc->test()); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; dialog->ShowModal (); - dialog->Destroy (); } else if (uc->state() == UpdateChecker::State::FAILED) { error_dialog (this, _("The DCP-o-matic download server could not be contacted.")); } else { @@ -1578,8 +1568,8 @@ private: void analytics_message (string title, string html) { auto d = new HTMLDialog(this, std_to_wx(title), std_to_wx(html)); + ScopeGuard sg = [d]() { d->Destroy(); }; d->ShowModal(); - d->Destroy(); } void set_title () @@ -1749,9 +1739,9 @@ private: auto release_notes = find_release_notes(gui_is_dark()); if (release_notes) { auto notes = new HTMLDialog(nullptr, _("Release notes"), std_to_wx(*release_notes), true); + ScopeGuard sg = [notes]() { notes->Destroy(); }; notes->Centre(); notes->ShowModal(); - notes->Destroy(); } } catch (exception& e) @@ -1873,7 +1863,7 @@ private: { if (_splash) { _splash->Destroy (); - _splash = 0; + _splash = nullptr; } } @@ -1910,9 +1900,8 @@ private: _("Do nothing"), Config::NAG_BAD_SIGNER_CHAIN_UTF8 ); - int const r = d->ShowModal (); - d->Destroy (); - return r == wxID_OK; + ScopeGuard sg = [d]() { d->Destroy(); }; + return d->ShowModal() == wxID_OK; } case Config::BAD_SIGNER_VALIDITY_TOO_LONG: { @@ -1927,9 +1916,8 @@ private: _("Do nothing"), Config::NAG_BAD_SIGNER_CHAIN_VALIDITY ); - int const r = d->ShowModal (); - d->Destroy (); - return r == wxID_OK; + ScopeGuard sg = [d]() { d->Destroy(); }; + return d->ShowModal() == wxID_OK; } case Config::BAD_SIGNER_INCONSISTENT: { @@ -1940,9 +1928,8 @@ private: "the certificate chain for signing DCPs and KDMs?"), _("Close DCP-o-matic") ); - int const r = d->ShowModal (); - d->Destroy (); - if (r != wxID_OK) { + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { exit (EXIT_FAILURE); } return true; @@ -1957,9 +1944,8 @@ private: "configuration before continuing."), _("Close DCP-o-matic") ); - int const r = d->ShowModal (); - d->Destroy (); - if (r != wxID_OK) { + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { exit (EXIT_FAILURE); } return true; diff --git a/src/tools/dcpomatic_batch.cc b/src/tools/dcpomatic_batch.cc index a2db604df..64015a0e3 100644 --- a/src/tools/dcpomatic_batch.cc +++ b/src/tools/dcpomatic_batch.cc @@ -33,6 +33,7 @@ #include "lib/job.h" #include "lib/job_manager.h" #include "lib/make_dcp.h" +#include "lib/scope_guard.h" #include "lib/transcode_job.h" #include "lib/util.h" #include "lib/version.h" @@ -274,10 +275,9 @@ private: _("Unfinished jobs"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION ); + ScopeGuard sg = [d]{ d->Destroy(); }; - bool const r = d->ShowModal() == wxID_YES; - d->Destroy (); - return r; + return d->ShowModal() == wxID_YES; } void close (wxCloseEvent& ev) @@ -322,21 +322,22 @@ private: void help_about () { auto d = new AboutDialog (this); + ScopeGuard sg = [d]() { d->Destroy(); }; d->ShowModal (); - d->Destroy (); } void add_film () { - auto c = new wxDirDialog (this, _("Select film to open"), wxStandardPaths::Get().GetDocumentsDir(), wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST); + auto dialog = new wxDirDialog(this, _("Select film to open"), wxStandardPaths::Get().GetDocumentsDir(), wxDEFAULT_DIALOG_STYLE | wxDD_DIR_MUST_EXIST); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; if (_last_parent) { - c->SetPath (std_to_wx(_last_parent.get().string())); + dialog->SetPath(std_to_wx(_last_parent.get().string())); } int r; while (true) { - r = c->ShowModal (); - if (r == wxID_OK && c->GetPath() == wxStandardPaths::Get().GetDocumentsDir()) { + r = dialog->ShowModal(); + if (r == wxID_OK && dialog->GetPath() == wxStandardPaths::Get().GetDocumentsDir()) { error_dialog (this, _("You did not select a folder. Make sure that you select a folder before clicking Open.")); } else { break; @@ -344,12 +345,10 @@ private: } if (r == wxID_OK) { - start_job (wx_to_std (c->GetPath ())); + start_job(wx_to_std(dialog->GetPath())); } - _last_parent = boost::filesystem::path (wx_to_std (c->GetPath ())).parent_path (); - - c->Destroy (); + _last_parent = boost::filesystem::path(wx_to_std(dialog->GetPath())).parent_path(); } void config_changed (Config::Property what) diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 04b37b2c6..256367977 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -267,17 +267,17 @@ private: void help_about () { auto d = new AboutDialog (this); + ScopeGuard sg = [d]() { d->Destroy(); }; d->ShowModal (); - d->Destroy (); } void help_report_a_problem () { auto d = new ReportProblemDialog (this, shared_ptr()); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { d->report (); } - d->Destroy (); } void setup_menu (wxMenuBar* m) @@ -567,16 +567,18 @@ private: void add_dkdm_folder_clicked () { auto d = new NewDKDMFolderDialog (this); - if (d->ShowModal() == wxID_OK) { - auto new_dkdm = make_shared(wx_to_std(d->get())); - auto parent = dynamic_pointer_cast(selected_dkdm()); - if (!parent) { - parent = Config::instance()->dkdms (); - } - add_dkdm(new_dkdm, parent); - update_dkdm_view(); + ScopeGuard sg = [d]() { d->Destroy(); }; + if (d->ShowModal() != wxID_OK) { + return; } - d->Destroy (); + + auto new_dkdm = make_shared(wx_to_std(d->get())); + auto parent = dynamic_pointer_cast(selected_dkdm()); + if (!parent) { + parent = Config::instance()->dkdms (); + } + add_dkdm(new_dkdm, parent); + update_dkdm_view(); } void update_dkdm_view() @@ -720,11 +722,11 @@ private: this, _("Select DKDM File"), wxEmptyString, wxEmptyString, wxT("XML files (*.xml)|*.xml"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { dkdm->dkdm().as_xml(wx_to_std(d->GetPath())); } - d->Destroy (); } void dkdm_search_changed() diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 6403d7e12..bf7e295ee 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -368,6 +368,7 @@ void CertificateChainEditor::add_certificate () { auto d = new wxFileDialog (this, _("Select Certificate File")); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { try { @@ -377,7 +378,6 @@ CertificateChainEditor::add_certificate () extra = c.read_string (dcp::file_to_string (wx_to_std (d->GetPath ()))); } catch (boost::filesystem::filesystem_error& e) { error_dialog (this, _("Could not import certificate (%s)"), d->GetPath()); - d->Destroy (); return; } @@ -406,8 +406,6 @@ CertificateChainEditor::add_certificate () } } - d->Destroy (); - update_sensitivity (); } @@ -456,26 +454,28 @@ CertificateChainEditor::export_certificate () this, _("Select Certificate File"), wxEmptyString, default_name, wxT ("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; auto j = all.begin (); for (int k = 0; k < i; ++k) { ++j; } - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - string const s = j->certificate (true); - f.checked_write(s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; } - d->Destroy (); + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); + } + + string const s = j->certificate(true); + f.checked_write(s.c_str(), s.length()); } void @@ -485,22 +485,23 @@ CertificateChainEditor::export_chain () this, _("Select Chain File"), wxEmptyString, wxT("certificate_chain.pem"), wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const s = _get()->chain(); - f.checked_write (s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; + } + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const s = _get()->chain(); + f.checked_write(s.c_str(), s.length()); } void @@ -546,14 +547,13 @@ CertificateChainEditor::remake_certificates () } auto d = new MakeChainDialog (this, _get()); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { _set (d->get()); update_certificate_list (); update_private_key (); } - - d->Destroy (); } void @@ -575,6 +575,7 @@ void CertificateChainEditor::import_private_key () { auto d = new wxFileDialog (this, _("Select Key File")); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { try { @@ -596,8 +597,6 @@ CertificateChainEditor::import_private_key () } } - d->Destroy (); - update_sensitivity (); } @@ -613,6 +612,7 @@ CertificateChainEditor::export_private_key () this, _("Select Key File"), wxEmptyString, wxT("private_key.pem"), wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal () == wxID_OK) { boost::filesystem::path path (wx_to_std(d->GetPath())); @@ -627,7 +627,6 @@ CertificateChainEditor::export_private_key () auto const s = _get()->key().get (); f.checked_write(s.c_str(), s.length()); } - d->Destroy (); } wxString @@ -732,22 +731,23 @@ KeysPage::export_decryption_chain_and_key () _panel, _("Select Export File"), wxEmptyString, wxEmptyString, wxT ("DOM files (*.dom)|*.dom"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const chain = Config::instance()->decryption_chain()->chain(); - f.checked_write (chain.c_str(), chain.length()); - auto const key = Config::instance()->decryption_chain()->key(); - DCPOMATIC_ASSERT (key); - f.checked_write(key->c_str(), key->length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const chain = Config::instance()->decryption_chain()->chain(); + f.checked_write(chain.c_str(), chain.length()); + auto const key = Config::instance()->decryption_chain()->key(); + DCPOMATIC_ASSERT(key); + f.checked_write(key->c_str(), key->length()); } void @@ -765,38 +765,40 @@ KeysPage::import_decryption_chain_and_key () auto d = new wxFileDialog ( _panel, _("Select File To Import"), wxEmptyString, wxEmptyString, wxT ("DOM files (*.dom)|*.dom") ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - auto new_chain = make_shared(); + if (d->ShowModal() != wxID_OK) { + return; + } - dcp::File f(wx_to_std(d->GetPath()), "r"); - if (!f) { - throw OpenFileError (f.path(), errno, OpenFileError::WRITE); - } + auto new_chain = make_shared(); - string current; - while (!f.eof()) { - char buffer[128]; - if (f.gets(buffer, 128) == 0) { - break; - } - current += buffer; - if (strncmp (buffer, "-----END CERTIFICATE-----", 25) == 0) { - new_chain->add (dcp::Certificate (current)); - current = ""; - } else if (strncmp (buffer, "-----END RSA PRIVATE KEY-----", 29) == 0) { - new_chain->set_key (current); - current = ""; - } - } + dcp::File f(wx_to_std(d->GetPath()), "r"); + if (!f) { + throw OpenFileError(f.path(), errno, OpenFileError::WRITE); + } - if (new_chain->chain_valid() && new_chain->private_key_valid()) { - Config::instance()->set_decryption_chain (new_chain); - } else { - error_dialog (_panel, _("Invalid DCP-o-matic export file")); + string current; + while (!f.eof()) { + char buffer[128]; + if (f.gets(buffer, 128) == 0) { + break; + } + current += buffer; + if (strncmp (buffer, "-----END CERTIFICATE-----", 25) == 0) { + new_chain->add(dcp::Certificate(current)); + current = ""; + } else if (strncmp (buffer, "-----END RSA PRIVATE KEY-----", 29) == 0) { + new_chain->set_key(current); + current = ""; } } - d->Destroy (); + + if (new_chain->chain_valid() && new_chain->private_key_valid()) { + Config::instance()->set_decryption_chain(new_chain); + } else { + error_dialog(_panel, _("Invalid DCP-o-matic export file")); + } } bool @@ -827,22 +829,23 @@ KeysPage::export_decryption_certificate () _panel, _("Select Certificate File"), wxEmptyString, default_name, wxT("PEM files (*.pem)|*.pem"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); + ScopeGuard sg = [d]() { d->Destroy(); }; - if (d->ShowModal () == wxID_OK) { - boost::filesystem::path path (wx_to_std(d->GetPath())); - if (path.extension() != ".pem") { - path += ".pem"; - } - dcp::File f(path, "w"); - if (!f) { - throw OpenFileError (path, errno, OpenFileError::WRITE); - } + if (d->ShowModal() != wxID_OK) { + return; + } - auto const s = Config::instance()->decryption_chain()->leaf().certificate (true); - f.checked_write(s.c_str(), s.length()); + boost::filesystem::path path(wx_to_std(d->GetPath())); + if (path.extension() != ".pem") { + path += ".pem"; + } + dcp::File f(path, "w"); + if (!f) { + throw OpenFileError(path, errno, OpenFileError::WRITE); } - d->Destroy (); + auto const s = Config::instance()->decryption_chain()->leaf().certificate (true); + f.checked_write(s.c_str(), s.length()); } wxString diff --git a/src/wx/content_panel.cc b/src/wx/content_panel.cc index e035d1795..c18520c30 100644 --- a/src/wx/content_panel.cc +++ b/src/wx/content_panel.cc @@ -654,15 +654,12 @@ ContentPanel::add_folder(boost::filesystem::path folder) auto ic = dynamic_pointer_cast (i); if (ic) { auto e = new ImageSequenceDialog (_splitter); - int const r = e->ShowModal(); - auto const frame_rate = e->frame_rate (); - e->Destroy (); + ScopeGuard sg = [e]() { e->Destroy(); }; - if (r != wxID_OK) { + if (e->ShowModal() != wxID_OK) { return; } - - ic->set_video_frame_rate(_film, frame_rate); + ic->set_video_frame_rate(_film, e->frame_rate()); } _film->examine_and_add_content (i); diff --git a/src/wx/controls.cc b/src/wx/controls.cc index f16b494c9..804b59dae 100644 --- a/src/wx/controls.cc +++ b/src/wx/controls.cc @@ -36,6 +36,7 @@ #include "lib/job.h" #include "lib/job_manager.h" #include "lib/player_video.h" +#include "lib/scope_guard.h" #include #include #include @@ -381,10 +382,11 @@ void Controls::timecode_clicked () { auto dialog = new PlayheadToTimecodeDialog(this, _viewer.position(), _film->video_frame_rate()); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; + if (dialog->ShowModal() == wxID_OK) { _viewer.seek(dialog->get(), true); } - dialog->Destroy (); } @@ -392,10 +394,11 @@ void Controls::frame_number_clicked () { auto dialog = new PlayheadToFrameDialog(this, _viewer.position(), _film->video_frame_rate()); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; + if (dialog->ShowModal() == wxID_OK) { _viewer.seek(dialog->get(), true); } - dialog->Destroy (); } diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h index 902d1ccbb..f3a0dd957 100644 --- a/src/wx/editable_list.h +++ b/src/wx/editable_list.h @@ -25,6 +25,7 @@ #include "dcpomatic_button.h" #include "wx_util.h" +#include "lib/scope_guard.h" #include LIBDCP_DISABLE_WARNINGS #include @@ -233,6 +234,7 @@ private: void add_clicked () { S* dialog = new S (this); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; if (dialog->ShowModal() == wxID_OK) { auto const v = dialog->get (); @@ -244,8 +246,6 @@ private: _set (all); } } - - dialog->Destroy (); } void edit_clicked () @@ -259,6 +259,7 @@ private: DCPOMATIC_ASSERT (item >= 0 && item < int (all.size ())); S* dialog = new S (this); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; dialog->set (all[item]); if (dialog->ShowModal() == wxID_OK) { auto const v = dialog->get (); @@ -269,7 +270,6 @@ private: all[item] = v.get (); } - dialog->Destroy (); for (size_t i = 0; i < _columns.size(); ++i) { _list->SetItem (item, i, std_to_wx (_column (all[item], i))); diff --git a/src/wx/language_tag_widget.cc b/src/wx/language_tag_widget.cc index 37b7f6209..f28046bd9 100644 --- a/src/wx/language_tag_widget.cc +++ b/src/wx/language_tag_widget.cc @@ -23,6 +23,7 @@ #include "language_tag_dialog.h" #include "language_tag_widget.h" #include "wx_util.h" +#include "lib/scope_guard.h" #include LIBDCP_DISABLE_WARNINGS #include @@ -66,11 +67,11 @@ void LanguageTagWidget::edit () { auto d = new LanguageTagDialog(_parent, _tag.get_value_or(dcp::LanguageTag("en"))); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { set(d->get()); Changed(d->get()); } - d->Destroy (); } diff --git a/src/wx/screen_dialog.cc b/src/wx/screen_dialog.cc index 1f1fc2fad..6d7fb4f03 100644 --- a/src/wx/screen_dialog.cc +++ b/src/wx/screen_dialog.cc @@ -272,12 +272,12 @@ ScreenDialog::get_recipient_from_file () void ScreenDialog::download_recipient () { - auto d = new DownloadCertificateDialog (this); - if (d->ShowModal() == wxID_OK) { - set_recipient (d->certificate()); - checked_set (_recipient_file, d->url()); + auto dialog = new DownloadCertificateDialog (this); + ScopeGuard sg = [dialog]() { dialog->Destroy(); }; + if (dialog->ShowModal() == wxID_OK) { + set_recipient(dialog->certificate()); + checked_set(_recipient_file, dialog->url()); } - d->Destroy (); setup_sensitivity (); } diff --git a/src/wx/text_panel.cc b/src/wx/text_panel.cc index 7e6557ba9..8e7d4434e 100644 --- a/src/wx/text_panel.cc +++ b/src/wx/text_panel.cc @@ -41,6 +41,7 @@ #include "lib/ffmpeg_content.h" #include "lib/ffmpeg_subtitle_stream.h" #include "lib/job_manager.h" +#include "lib/scope_guard.h" #include "lib/string_text_file_content.h" #include "lib/string_text_file_decoder.h" #include "lib/subtitle_analysis.h" @@ -370,10 +371,10 @@ TextPanel::dcp_track_changed () if (_dcp_track->GetSelection() == int(_dcp_track->GetCount()) - 1) { auto d = new DCPTextTrackDialog (this); + ScopeGuard sg = [d]() { d->Destroy(); }; if (d->ShowModal() == wxID_OK) { track = d->get(); } - d->Destroy (); } else { /* Find the DCPTextTrack that was selected */ for (auto i: _parent->film()->closed_caption_tracks()) {