summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-07-08 00:13:00 +0100
committerCarl Hetherington <cth@carlh.net>2016-07-08 01:52:16 +0100
commitb74bc6135a6a690bf5674638a8bea56e5580fd08 (patch)
tree0686281f3b6dc067093a841e30fe2193038f695e /src
parent09d5906f44907aab5afb41ce2da887550c0011a8 (diff)
Show hints before make DCP (#823).
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc3
-rw-r--r--src/lib/config.h9
-rw-r--r--src/tools/dcpomatic.cc21
-rw-r--r--src/wx/hints_dialog.cc27
-rw-r--r--src/wx/hints_dialog.h3
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;