Add advanced KDM options button containing switches for forensic marking.
[dcpomatic.git] / src / wx / kdm_dialog.cc
index 253050ddf52de2444b85fa99cee26342c2cd4327..be7e2506542be7ad4f73095c9683e611cceb06bf 100644 (file)
 #include "kdm_timing_panel.h"
 #include "kdm_output_panel.h"
 #include "kdm_cpl_panel.h"
+#include "confirm_kdm_email_dialog.h"
 #include "lib/film.h"
 #include "lib/screen.h"
 #include "lib/screen_kdm.h"
 #include "lib/send_kdm_email_job.h"
 #include "lib/job_manager.h"
 #include "lib/cinema_kdms.h"
+#include "lib/config.h"
+#include "lib/cinema.h"
 #include <libcxml/cxml.h>
 #include <dcp/exceptions.h>
 #include <wx/treectrl.h>
@@ -45,6 +48,7 @@ using std::cout;
 using std::vector;
 using std::make_pair;
 using boost::shared_ptr;
+using boost::bind;
 
 KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
        : wxDialog (parent, wxID_ANY, _("Make KDMs"))
@@ -55,7 +59,7 @@ KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
        wxBoxSizer* left = new wxBoxSizer (wxVERTICAL);
        wxBoxSizer* right = new wxBoxSizer (wxVERTICAL);
 
-       horizontal->Add (left, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP * 2);
+       horizontal->Add (left, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP * 4);
        horizontal->Add (right, 1, wxEXPAND);
 
        /* Font for sub-headings */
@@ -103,7 +107,7 @@ KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
 
        _screens->ScreensChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this));
        _timing->TimingChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this));
-       _make->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::make_clicked, this));
+       _make->Bind (wxEVT_BUTTON, boost::bind (&KDMDialog::make_clicked, this));
 
        setup_sensitivity ();
 
@@ -120,47 +124,37 @@ KDMDialog::setup_sensitivity ()
        _make->Enable (!_screens->screens().empty() && _timing->valid() && _cpl->has_selected());
 }
 
+bool
+KDMDialog::confirm_overwrite (boost::filesystem::path path)
+{
+       return confirm_dialog (
+               this,
+               wxString::Format (_("File %s already exists.  Do you want to overwrite it?"), std_to_wx(path.string()).data())
+               );
+}
+
 void
 KDMDialog::make_clicked ()
 {
        shared_ptr<const Film> film = _film.lock ();
        DCPOMATIC_ASSERT (film);
 
-       _output->save_kdm_name_format ();
+       list<ScreenKDM> screen_kdms = film->make_kdms (
+               _screens->screens(), _cpl->cpl(), _timing->from(), _timing->until(), _output->formulation(),
+               !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
+               );
 
-       try {
-               list<ScreenKDM> screen_kdms = film->make_kdms (
-                       _screens->screens(), _cpl->cpl(), _timing->from(), _timing->until(), _output->formulation()
-                       );
+       pair<shared_ptr<Job>, int> result = _output->make (screen_kdms, film->name(), _timing, bind (&KDMDialog::confirm_overwrite, this, _1), film->log());
+       if (result.first) {
+               JobManager::instance()->add (result.first);
+       }
 
-               NameFormat::Map name_values;
-               name_values["film_name"] = film->name();
-               name_values["from"] = dcp::LocalTime(_timing->from()).date() + " " + dcp::LocalTime(_timing->from()).time_of_day();
-               name_values["to"] = dcp::LocalTime(_timing->until()).date() + " " + dcp::LocalTime(_timing->until()).time_of_day();
-
-               if (_output->write_to ()) {
-                       ScreenKDM::write_files (
-                               screen_kdms,
-                               _output->directory(),
-                               _output->name_format(),
-                               name_values
-                               );
-               } else {
-                       JobManager::instance()->add (
-                               shared_ptr<Job> (new SendKDMEmailJob (
-                                                        CinemaKDMs::collect (screen_kdms),
-                                                        _output->name_format(),
-                                                        name_values,
-                                                        film->dcp_name(),
-                                                        film->log()
-                                                        ))
-                               );
-               }
-       } catch (dcp::NotEncryptedError& e) {
-               error_dialog (this, _("CPL's content is not encrypted."));
-       } catch (exception& e) {
-               error_dialog (this, e.what ());
-       } catch (...) {
-               error_dialog (this, _("An unknown exception occurred."));
+       if (result.second > 0) {
+               /* XXX: proper plural form support in wxWidgets? */
+               wxString s = result.second == 1 ? _("%d KDM written to %s") : _("%d KDMs written to %s");
+               message_dialog (
+                       this,
+                       wxString::Format (s, result.second, std_to_wx(_output->directory().string()).data())
+                       );
        }
 }