2016-07-08 Carl Hetherington <cth@carlh.net>
+ * Show hints before making DCP / sending to batch
+ converter (#823).
+
* Allow import of some more types of DNxHR file.
* Support shadow in subtitles (#911).
_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);
}
_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)) {
}
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 ());
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);
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 ();
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;
#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>
}
}
+ 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.
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
void tools_hints ()
{
if (!_hints_dialog) {
- _hints_dialog = new HintsDialog (this, _film);
+ _hints_dialog = new HintsDialog (this, _film, true);
}
_hints_dialog->Show ();
#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>
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)
{
_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);
_text->EndSymbolBullet ();
}
}
+
+void
+HintsDialog::shut_up (wxCommandEvent& ev)
+{
+ Config::instance()->set_show_hints_before_make_dcp (!ev.IsChecked());
+}
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;