diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-07-08 00:13:00 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-07-08 01:52:16 +0100 |
| commit | b74bc6135a6a690bf5674638a8bea56e5580fd08 (patch) | |
| tree | 0686281f3b6dc067093a841e30fe2193038f695e /src | |
| parent | 09d5906f44907aab5afb41ce2da887550c0011a8 (diff) | |
Show hints before make DCP (#823).
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/config.cc | 3 | ||||
| -rw-r--r-- | src/lib/config.h | 9 | ||||
| -rw-r--r-- | src/tools/dcpomatic.cc | 21 | ||||
| -rw-r--r-- | src/wx/hints_dialog.cc | 27 | ||||
| -rw-r--r-- | src/wx/hints_dialog.h | 3 |
5 files changed, 57 insertions, 6 deletions
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<boost::filesystem::path> _history; std::vector<dcp::EncryptedKDM> _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 <dcp/exceptions.h> #include <wx/generic/aboutdlgg.h> #include <wx/stdpaths.h> @@ -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 <wx/richtext/richtextctrl.h> #include <boost/foreach.hpp> @@ -32,7 +33,7 @@ using boost::shared_ptr; using boost::optional; using boost::dynamic_pointer_cast; -HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr<Film> film) +HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr<Film> film, bool ok) : wxDialog (parent, wxID_ANY, _("Hints")) , _film (film) { @@ -40,11 +41,23 @@ HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr<Film> 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<Film>); + HintsDialog (wxWindow* parent, boost::weak_ptr<Film>, bool ok); private: void film_changed (); + void shut_up (wxCommandEvent& ev); boost::weak_ptr<Film> _film; wxRichTextCtrl* _text; |
