summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-05-16 23:07:21 +0100
committerCarl Hetherington <cth@carlh.net>2018-05-16 23:07:21 +0100
commitba8350385b30409cb69faa07a74dd3bb8b355e00 (patch)
tree05db1060ff0d0687c605f678d7c2d181d8e11147 /src/tools
parent255562e13056c967ca969d6762024166500d8038 (diff)
Add cancel button to player progress (#1294).
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/dcpomatic_player.cc30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc
index d1f37784b..5c8c7d1d5 100644
--- a/src/tools/dcpomatic_player.cc
+++ b/src/tools/dcpomatic_player.cc
@@ -194,8 +194,8 @@ public:
}
_film->examine_and_add_content (dcp, true);
- progress (_("Loading DCP"));
- if (!report_errors_from_last_job()) {
+ bool const ok = progress (_("Loading DCP"));
+ if (!ok || !report_errors_from_last_job()) {
return;
}
@@ -343,8 +343,8 @@ private:
DCPOMATIC_ASSERT (dcp);
dcp->add_ov (wx_to_std(c->GetPath()));
JobManager::instance()->add(shared_ptr<Job>(new ExamineContentJob (_film, dcp)));
- progress (_("Loading DCP"));
- if (!report_errors_from_last_job()) {
+ bool const ok = progress (_("Loading DCP"));
+ if (!ok || !report_errors_from_last_job()) {
return;
}
setup_from_dcp (dcp);
@@ -432,7 +432,10 @@ private:
JobManager* jm = JobManager::instance ();
jm->add (shared_ptr<Job> (new VerifyDCPJob (dcp->directories())));
- progress (_("Verifying DCP"));
+ bool const ok = progress (_("Verifying DCP"));
+ if (!ok) {
+ return;
+ }
DCPOMATIC_ASSERT (!jm->get().empty());
shared_ptr<VerifyDCPJob> last = dynamic_pointer_cast<VerifyDCPJob> (jm->get().back());
@@ -568,18 +571,29 @@ private:
private:
- void progress (wxString task)
+ /** @return false if the task was cancelled */
+ bool progress (wxString task)
{
JobManager* jm = JobManager::instance ();
- wxProgressDialog* progress = new wxProgressDialog (_("DCP-o-matic Player"), task);
+ wxProgressDialog* progress = new wxProgressDialog (_("DCP-o-matic Player"), task, 100, 0, wxPD_CAN_ABORT);
+
+ bool ok = true;
while (jm->work_to_do() || signal_manager->ui_idle()) {
dcpomatic_sleep (1);
- progress->Pulse ();
+ if (!progress->Pulse()) {
+ /* user pressed cancel */
+ BOOST_FOREACH (shared_ptr<Job> i, jm->get()) {
+ i->cancel();
+ }
+ ok = false;
+ break;
+ }
}
progress->Destroy ();
+ return ok;
}
bool report_errors_from_last_job ()