From b74bc6135a6a690bf5674638a8bea56e5580fd08 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 8 Jul 2016 00:13:00 +0100 Subject: [PATCH] Show hints before make DCP (#823). --- ChangeLog | 3 +++ src/lib/config.cc | 3 +++ src/lib/config.h | 9 +++++++++ src/tools/dcpomatic.cc | 21 ++++++++++++++++++++- src/wx/hints_dialog.cc | 27 +++++++++++++++++++++++---- src/wx/hints_dialog.h | 3 ++- 6 files changed, 60 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2268d78fd..a4d35e7da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2016-07-08 Carl Hetherington + * Show hints before making DCP / sending to batch + converter (#823). + * Allow import of some more types of DNxHR file. * Support shadow in subtitles (#911). diff --git a/src/lib/config.cc b/src/lib/config.cc index 891d832a2..91966eefb 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -106,6 +106,7 @@ Config::set_defaults () _win32_console = false; #endif _cinemas_file = path ("cinemas.xml"); + _show_hints_before_make_dcp = true; _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -297,6 +298,7 @@ Config::read () } _cinemas_file = f.optional_string_child("CinemasFile").get_value_or (path ("cinemas.xml").string ()); + _show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true); /* Replace any cinemas from config.xml with those from the configured file */ if (boost::filesystem::exists (_cinemas_file)) { @@ -449,6 +451,7 @@ Config::write_config_xml () const } root->add_child("CinemasFile")->add_child_text (_cinemas_file.string()); + root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0"); try { doc.write_to_file_formatted (path("config.xml").string ()); diff --git a/src/lib/config.h b/src/lib/config.h index 1ffcfdb98..feaac8390 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -262,6 +262,10 @@ public: return _cinemas_file; } + bool show_hints_before_make_dcp () const { + return _show_hints_before_make_dcp; + } + /** @param n New number of local encoding threads */ void set_num_local_encoding_threads (int n) { maybe_set (_num_local_encoding_threads, n); @@ -466,6 +470,10 @@ public: void set_cinemas_file (boost::filesystem::path file); + void set_show_hints_before_make_dcp (bool s) { + maybe_set (_show_hints_before_make_dcp, s); + } + void clear_history () { _history.clear (); changed (); @@ -572,6 +580,7 @@ private: std::vector _history; std::vector _dkdms; boost::filesystem::path _cinemas_file; + bool _show_hints_before_make_dcp; /** Singleton instance, or 0 */ static Config* _instance; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 6b1d4d260..f31464282 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -58,6 +58,7 @@ #include "lib/compose.hpp" #include "lib/cinema_kdms.h" #include "lib/dcpomatic_socket.h" +#include "lib/hints.h" #include #include #include @@ -455,6 +456,15 @@ private: } } + if (!get_hints(_film).empty() && Config::instance()->show_hints_before_make_dcp()) { + HintsDialog* hints = new HintsDialog (this, _film, false); + int const r = hints->ShowModal(); + hints->Destroy (); + if (r == wxID_CANCEL) { + return; + } + } + try { /* It seems to make sense to auto-save metadata here, since the make DCP may last a long time, and crashes/power failures are moderately likely. @@ -517,6 +527,15 @@ private: return; } + if (!get_hints(_film).empty() && Config::instance()->show_hints_before_make_dcp()) { + HintsDialog* hints = new HintsDialog (this, _film, false); + int const r = hints->ShowModal(); + hints->Destroy (); + if (r == wxID_CANCEL) { + return; + } + } + _film->write_metadata (); /* i = 0; try to connect via socket @@ -663,7 +682,7 @@ private: void tools_hints () { if (!_hints_dialog) { - _hints_dialog = new HintsDialog (this, _film); + _hints_dialog = new HintsDialog (this, _film, true); } _hints_dialog->Show (); diff --git a/src/wx/hints_dialog.cc b/src/wx/hints_dialog.cc index f45eda0f7..cb971a671 100644 --- a/src/wx/hints_dialog.cc +++ b/src/wx/hints_dialog.cc @@ -22,6 +22,7 @@ #include "wx_util.h" #include "lib/film.h" #include "lib/hints.h" +#include "lib/config.h" #include #include @@ -32,7 +33,7 @@ using boost::shared_ptr; using boost::optional; using boost::dynamic_pointer_cast; -HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr film) +HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr film, bool ok) : wxDialog (parent, wxID_ANY, _("Hints")) , _film (film) { @@ -40,11 +41,23 @@ HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr film) _text = new wxRichTextCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (400, 300), wxRE_READONLY); sizer->Add (_text, 1, wxEXPAND | wxALL, 6); - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); - if (buttons) { - sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + if (!ok) { + wxCheckBox* b = new wxCheckBox (this, wxID_ANY, _("Don't show hints again")); + sizer->Add (b, 0, wxALL, 6); + b->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, bind (&HintsDialog::shut_up, this, _1)); } + wxStdDialogButtonSizer* buttons = CreateStdDialogButtonSizer (0); + sizer->Add (CreateSeparatedSizer(buttons), wxSizerFlags().Expand().DoubleBorder()); + if (ok) { + buttons->SetAffirmativeButton (new wxButton (this, wxID_OK)); + } else { + buttons->SetAffirmativeButton (new wxButton (this, wxID_OK, _("Make DCP anyway"))); + buttons->SetNegativeButton (new wxButton (this, wxID_CANCEL, _("Go back"))); + } + + buttons->Realize (); + SetSizer (sizer); sizer->Layout (); sizer->SetSizeHints (this); @@ -83,3 +96,9 @@ HintsDialog::film_changed () _text->EndSymbolBullet (); } } + +void +HintsDialog::shut_up (wxCommandEvent& ev) +{ + Config::instance()->set_show_hints_before_make_dcp (!ev.IsChecked()); +} diff --git a/src/wx/hints_dialog.h b/src/wx/hints_dialog.h index 72530c0bd..c02cc8c85 100644 --- a/src/wx/hints_dialog.h +++ b/src/wx/hints_dialog.h @@ -28,10 +28,11 @@ class Film; class HintsDialog : public wxDialog { public: - HintsDialog (wxWindow* parent, boost::weak_ptr); + HintsDialog (wxWindow* parent, boost::weak_ptr, bool ok); private: void film_changed (); + void shut_up (wxCommandEvent& ev); boost::weak_ptr _film; wxRichTextCtrl* _text; -- 2.30.2