From 6654f028571db33d1e203ff36f85619d03a9f9fb Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 6 Jul 2018 20:33:04 +0100 Subject: [PATCH] Add advanced KDM options button containing switches for forensic marking. --- ChangeLog | 4 +++ src/tools/dcpomatic_kdm.cc | 3 ++- src/wx/kdm_advanced_dialog.cc | 48 +++++++++++++++++++++++++++++++++++ src/wx/kdm_advanced_dialog.h | 34 +++++++++++++++++++++++++ src/wx/kdm_dialog.cc | 3 ++- src/wx/kdm_output_panel.cc | 23 +++++++++++++++-- src/wx/kdm_output_panel.h | 9 +++++++ src/wx/wscript | 1 + 8 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 src/wx/kdm_advanced_dialog.cc create mode 100644 src/wx/kdm_advanced_dialog.h diff --git a/ChangeLog b/ChangeLog index 3a9ec74a9..ddeac7e5c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2018-07-06 Carl Hetherington + + * Add option to enable/disable KDM forensic marking. + 2018-07-04 Carl Hetherington * Sort audio views in order of their first mapped DCP channel (#1279). diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 65326efb3..184319a5f 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -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() : 0 ) ) ); diff --git a/src/wx/kdm_advanced_dialog.cc b/src/wx/kdm_advanced_dialog.cc new file mode 100644 index 000000000..9c35f506a --- /dev/null +++ b/src/wx/kdm_advanced_dialog.cc @@ -0,0 +1,48 @@ +/* + Copyright (C) 2018 Carl Hetherington + + 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 . + +*/ + +#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 index 000000000..590c16137 --- /dev/null +++ b/src/wx/kdm_advanced_dialog.h @@ -0,0 +1,34 @@ +/* + Copyright (C) 2018 Carl Hetherington + + 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 . + +*/ + +#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; +}; diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc index 64987a121..be7e25065 100644 --- a/src/wx/kdm_dialog.cc +++ b/src/wx/kdm_dialog.cc @@ -140,7 +140,8 @@ KDMDialog::make_clicked () DCPOMATIC_ASSERT (film); list 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() : 0 ); pair, int> result = _output->make (screen_kdms, film->name(), _timing, bind (&KDMDialog::confirm_overwrite, this, _1), film->log()); diff --git a/src/wx/kdm_output_panel.cc b/src/wx/kdm_output_panel.cc index 6d741cf5e..07bbce2d2 100644 --- a/src/wx/kdm_output_panel.cc +++ b/src/wx/kdm_output_panel.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2015-2017 Carl Hetherington + Copyright (C) 2015-2018 Carl Hetherington 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 #include @@ -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 () { diff --git a/src/wx/kdm_output_panel.h b/src/wx/kdm_output_panel.h index b2f428252..ba947b714 100644 --- a/src/wx/kdm_output_panel.h +++ b/src/wx/kdm_output_panel.h @@ -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, int> make ( std::list 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; }; diff --git a/src/wx/wscript b/src/wx/wscript index 35861db00..77076c23e 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -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 -- 2.30.2