diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-02-22 01:06:09 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-02-23 01:47:38 +0100 |
| commit | 9d04286df486dbc2d7523e3454e3bbeec9329bd4 (patch) | |
| tree | c8fc6b291d081b46fc55f7f229914bb928418de2 /src/tools | |
| parent | 81d8c747c7a04be10821223dea69faf058b05b1d (diff) | |
Add cancel button to verifier.
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/dcpomatic_verifier.cc | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/tools/dcpomatic_verifier.cc b/src/tools/dcpomatic_verifier.cc index 925168106..bf634a799 100644 --- a/src/tools/dcpomatic_verifier.cc +++ b/src/tools/dcpomatic_verifier.cc @@ -126,8 +126,12 @@ public: options_sizer->Add(_write_log, 0, wxBOTTOM, DCPOMATIC_SIZER_GAP); overall_sizer->Add(options_sizer, 0, wxLEFT, DCPOMATIC_DIALOG_BORDER); + auto actions_sizer = new wxBoxSizer(wxHORIZONTAL); + _cancel = new Button(this, _("Cancel")); + actions_sizer->Add(_cancel, 0, wxRIGHT, DCPOMATIC_SIZER_GAP); _verify = new Button(this, _("Verify")); - overall_sizer->Add(_verify, 0, wxEXPAND | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER); + actions_sizer->Add(_verify, 0, wxRIGHT, DCPOMATIC_SIZER_GAP); + overall_sizer->Add(actions_sizer, 1, wxLEFT | wxRIGHT | wxALIGN_CENTER, DCPOMATIC_DIALOG_BORDER); _progress_panel = new VerifyDCPProgressPanel(this); overall_sizer->Add(_progress_panel, 0, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER); @@ -137,6 +141,7 @@ public: SetSizerAndFit(overall_sizer); + _cancel->bind(&DOMFrame::cancel_clicked, this); _verify->bind(&DOMFrame::verify_clicked, this); setup_sensitivity(); @@ -145,7 +150,14 @@ public: private: void setup_sensitivity() { - _verify->Enable(!_dcp_paths.empty()); + auto const work = JobManager::instance()->work_to_do(); + _cancel->Enable(work); + _verify->Enable(!_dcp_paths.empty() && !work); + } + + void cancel_clicked() + { + _cancel_pending = true; } void verify_clicked() @@ -158,7 +170,9 @@ private: jobs.push_back(job); } - while (job_manager->work_to_do()) { + setup_sensitivity(); + + while (job_manager->work_to_do() && !_cancel_pending) { wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI | wxEVT_CATEGORY_USER_INPUT); dcpomatic_sleep_seconds(1); auto last = job_manager->last_active_job(); @@ -169,6 +183,14 @@ private: } } + if (_cancel_pending) { + _cancel_pending = false; + JobManager::instance()->cancel_all_jobs(); + _progress_panel->clear(); + setup_sensitivity(); + return; + } + DCPOMATIC_ASSERT(_dcp_paths.size() == jobs.size()); _result_panel->add(jobs); if (_write_log->get()) { @@ -195,9 +217,11 @@ private: std::vector<boost::filesystem::path> _dcp_paths; CheckBox* _write_log; + Button* _cancel; Button* _verify; VerifyDCPProgressPanel* _progress_panel; VerifyDCPResultPanel* _result_panel; + bool _cancel_pending = false; }; |
