Add advanced KDM options button containing switches for forensic marking.
authorCarl Hetherington <cth@carlh.net>
Fri, 6 Jul 2018 19:33:04 +0000 (20:33 +0100)
committerCarl Hetherington <cth@carlh.net>
Fri, 6 Jul 2018 19:33:04 +0000 (20:33 +0100)
ChangeLog
src/tools/dcpomatic_kdm.cc
src/wx/kdm_advanced_dialog.cc [new file with mode: 0644]
src/wx/kdm_advanced_dialog.h [new file with mode: 0644]
src/wx/kdm_dialog.cc
src/wx/kdm_output_panel.cc
src/wx/kdm_output_panel.h
src/wx/wscript

index 3a9ec74a915f20618603d40dc9de17f653ffab0c..ddeac7e5c9a963b744371db67409987262127dd2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2018-07-06  Carl Hetherington  <cth@carlh.net>
+
+       * Add option to enable/disable KDM forensic marking.
+
 2018-07-04  Carl Hetherington  <cth@carlh.net>
 
        * Sort audio views in order of their first mapped DCP channel (#1279).
index 65326efb3e52139cfda31536c63b5f0bf02c3102..184319a5f4a5143ab9ba3d9363a016d6dd690033 100644 (file)
@@ -332,7 +332,8 @@ private:
                                        ScreenKDM (
                                                i,
                                                kdm.encrypt (
-                                                       signer, i->recipient.get(), i->trusted_devices, _output->formulation(), true, 0
+                                                       signer, i->recipient.get(), i->trusted_devices, _output->formulation(),
+                                                       !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
                                                        )
                                                )
                                        );
diff --git a/src/wx/kdm_advanced_dialog.cc b/src/wx/kdm_advanced_dialog.cc
new file mode 100644 (file)
index 0000000..9c35f50
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    DCP-o-matic is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "kdm_advanced_dialog.h"
+
+KDMAdvancedDialog::KDMAdvancedDialog (wxWindow* parent, bool forensic_mark_video, bool forensic_mark_audio)
+       : TableDialog (parent, _("Advanced KDM options"), 2, 1, false)
+{
+       _forensic_mark_video = new wxCheckBox (this, wxID_ANY, _("Forensically mark video"));
+       _forensic_mark_video->SetValue (forensic_mark_video);
+       add (_forensic_mark_video);
+       add_spacer ();
+       _forensic_mark_audio = new wxCheckBox (this, wxID_ANY, _("Forensically mark audio"));
+       _forensic_mark_audio->SetValue (forensic_mark_audio);
+       add (_forensic_mark_audio);
+       add_spacer ();
+
+       layout ();
+}
+
+bool
+KDMAdvancedDialog::forensic_mark_video () const
+{
+       return _forensic_mark_video->GetValue ();
+}
+
+bool
+KDMAdvancedDialog::forensic_mark_audio () const
+{
+       return _forensic_mark_audio->GetValue ();
+}
diff --git a/src/wx/kdm_advanced_dialog.h b/src/wx/kdm_advanced_dialog.h
new file mode 100644 (file)
index 0000000..590c161
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+
+    This file is part of DCP-o-matic.
+
+    DCP-o-matic is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    DCP-o-matic is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "table_dialog.h"
+
+class KDMAdvancedDialog : public TableDialog
+{
+public:
+       KDMAdvancedDialog (wxWindow* parent, bool forensic_mark_video, bool forensic_mark_audio);
+
+       bool forensic_mark_video () const;
+       bool forensic_mark_audio () const;
+
+private:
+       wxCheckBox* _forensic_mark_video;
+       wxCheckBox* _forensic_mark_audio;
+};
index 64987a1210c677f406c7a9d0a887546ceddcebe5..be7e2506542be7ad4f73095c9683e611cceb06bf 100644 (file)
@@ -140,7 +140,8 @@ KDMDialog::make_clicked ()
        DCPOMATIC_ASSERT (film);
 
        list<ScreenKDM> screen_kdms = film->make_kdms (
-               _screens->screens(), _cpl->cpl(), _timing->from(), _timing->until(), _output->formulation(), true, 0
+               _screens->screens(), _cpl->cpl(), _timing->from(), _timing->until(), _output->formulation(),
+               !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional<int>() : 0
                );
 
        pair<shared_ptr<Job>, int> result = _output->make (screen_kdms, film->name(), _timing, bind (&KDMDialog::confirm_overwrite, this, _1), film->log());
index 6d741cf5ec41345ddf1275a55d8ca4a49b7b5ad2..07bbce2d2510995ce7da460c6bc14910dcf9fcbc 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2015-2017 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2015-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -26,6 +26,7 @@
 #include "kdm_timing_panel.h"
 #include "confirm_kdm_email_dialog.h"
 #include "wx_util.h"
+#include "kdm_advanced_dialog.h"
 #include "name_format_editor.h"
 #include <dcp/exceptions.h>
 #include <dcp/types.h>
@@ -46,10 +47,14 @@ using boost::function;
 
 KDMOutputPanel::KDMOutputPanel (wxWindow* parent, bool interop)
        : wxPanel (parent, wxID_ANY)
+       , _forensic_mark_video (false)
+       , _forensic_mark_audio (false)
 {
        wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, 0);
 
        add_label_to_sizer (table, this, _("KDM type"), true);
+
+       wxBoxSizer* type = new wxBoxSizer (wxHORIZONTAL);
        _type = new wxChoice (this, wxID_ANY);
        _type->Append ("Modified Transitional 1", ((void *) dcp::MODIFIED_TRANSITIONAL_1));
        _type->Append ("Multiple Modified Transitional 1", ((void *) dcp::MULTIPLE_MODIFIED_TRANSITIONAL_1));
@@ -58,8 +63,11 @@ KDMOutputPanel::KDMOutputPanel (wxWindow* parent, bool interop)
                _type->Append ("DCI Any", ((void *) dcp::DCI_ANY));
                _type->Append ("DCI Specific", ((void *) dcp::DCI_SPECIFIC));
        }
-       table->Add (_type, 1, wxEXPAND);
+       type->Add (_type, 1, wxEXPAND);
        _type->SetSelection (0);
+       wxButton* advanced = new wxButton (this, wxID_ANY, _("Advanced..."));
+       type->Add (advanced, 0, wxALIGN_CENTER_VERTICAL);
+       table->Add (type, 1, wxEXPAND);
 
        add_label_to_sizer (table, this, _("Folder / ZIP name format"), true, 0, wxALIGN_TOP | wxTOP | wxLEFT | wxRIGHT);
        _container_name_format = new NameFormatEditor (this, Config::instance()->kdm_container_name_format(), dcp::NameFormat::Map(), dcp::NameFormat::Map(), "");
@@ -132,6 +140,7 @@ KDMOutputPanel::KDMOutputPanel (wxWindow* parent, bool interop)
        _write_flat->Bind   (wxEVT_RADIOBUTTON, boost::bind (&KDMOutputPanel::kdm_write_type_changed, this));
        _write_folder->Bind (wxEVT_RADIOBUTTON, boost::bind (&KDMOutputPanel::kdm_write_type_changed, this));
        _write_zip->Bind    (wxEVT_RADIOBUTTON, boost::bind (&KDMOutputPanel::kdm_write_type_changed, this));
+       advanced->Bind      (wxEVT_BUTTON, boost::bind (&KDMOutputPanel::advanced_clicked, this));
 
        SetSizer (table);
 }
@@ -146,6 +155,16 @@ KDMOutputPanel::setup_sensitivity ()
        _write_zip->Enable (write);
 }
 
+void
+KDMOutputPanel::advanced_clicked ()
+{
+       KDMAdvancedDialog* d = new KDMAdvancedDialog (this, _forensic_mark_video, _forensic_mark_audio);
+       d->ShowModal ();
+       _forensic_mark_video = d->forensic_mark_video ();
+       _forensic_mark_audio = d->forensic_mark_audio ();
+       d->Destroy ();
+}
+
 void
 KDMOutputPanel::kdm_write_type_changed ()
 {
index b2f428252ae84dce53cfe8f507bffc27a8109a35..ba947b7149067970bb80f412ded37c37835c0ea5 100644 (file)
@@ -41,6 +41,12 @@ public:
 
        boost::filesystem::path directory () const;
        dcp::Formulation formulation () const;
+       bool forensic_mark_video () const {
+               return _forensic_mark_video;
+       }
+       bool forensic_mark_audio () const {
+               return _forensic_mark_audio;
+       }
 
        std::pair<boost::shared_ptr<Job>, int> make (
                std::list<ScreenKDM> screen_kdms,
@@ -52,6 +58,7 @@ public:
 
 private:
        void kdm_write_type_changed ();
+       void advanced_clicked ();
 
        wxChoice* _type;
        NameFormatEditor* _container_name_format;
@@ -66,4 +73,6 @@ private:
        wxRadioButton* _write_folder;
        wxRadioButton* _write_zip;
        wxCheckBox* _email;
+       bool _forensic_mark_video;
+       bool _forensic_mark_audio;
 };
index 35861db00f144cb77861b123154fc407c975454c..77076c23e06d0c16098ae26c312973d944784c88 100644 (file)
@@ -66,6 +66,7 @@ sources = """
           job_view.cc
           job_view_dialog.cc
           job_manager_view.cc
+          kdm_advanced_dialog.cc
           kdm_cpl_panel.cc
           kdm_dialog.cc
           kdm_output_panel.cc