X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_kdm.cc;h=fc4282535664e2b00d54777e7b12aa7709485f74;hb=006e38346a8bcdcc889979b7c00802d9bb8fc6f8;hp=2b0d25836dbf4cb0e77234f09a2fe10e99ef5f1f;hpb=6bfda50f36b35a6635e9da7a25f84319ca29d92f;p=dcpomatic.git diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 2b0d25836..fc4282535 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -74,6 +74,7 @@ using boost::bind; using boost::optional; using boost::ref; using boost::dynamic_pointer_cast; +using namespace dcpomatic; enum { ID_help_report_a_problem = 1, @@ -160,6 +161,8 @@ public: dkdm_buttons->Add (_add_dkdm_folder, 0, wxALL | wxEXPAND, DCPOMATIC_BUTTON_STACK_GAP); _remove_dkdm = new Button (overall_panel, _("Remove")); dkdm_buttons->Add (_remove_dkdm, 0, wxALL | wxEXPAND, DCPOMATIC_BUTTON_STACK_GAP); + _export_dkdm = new Button (overall_panel, _("Export...")); + dkdm_buttons->Add (_export_dkdm, 0, wxALL | wxEXPAND, DCPOMATIC_BUTTON_STACK_GAP); dkdm_sizer->Add (dkdm_buttons, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_GAP); right->Add (dkdm_sizer, 1, wxEXPAND | wxALL, DCPOMATIC_SIZER_Y_GAP); @@ -189,6 +192,7 @@ public: _add_dkdm->Bind (wxEVT_BUTTON, bind (&DOMFrame::add_dkdm_clicked, this)); _add_dkdm_folder->Bind (wxEVT_BUTTON, bind (&DOMFrame::add_dkdm_folder_clicked, this)); _remove_dkdm->Bind (wxEVT_BUTTON, bind (&DOMFrame::remove_dkdm_clicked, this)); + _export_dkdm->Bind (wxEVT_BUTTON, bind (&DOMFrame::export_dkdm_clicked, this)); setup_sensitivity (); } @@ -309,7 +313,7 @@ private: throw InvalidSignerError (); } - list screen_kdms; + list > screen_kdms; BOOST_FOREACH (shared_ptr i, _screens->screens()) { if (!i->recipient) { @@ -332,11 +336,13 @@ private: /* Encrypt */ screen_kdms.push_back ( - ScreenKDM ( - i, - kdm.encrypt ( - signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(), - !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional() : 0 + shared_ptr( + new DCPScreenKDM( + i, + kdm.encrypt( + signer, i->recipient.get(), i->trusted_device_thumbprints(), _output->formulation(), + !_output->forensic_mark_video(), _output->forensic_mark_audio() ? boost::optional() : 0 + ) ) ) ); @@ -379,7 +385,11 @@ private: _output->setup_sensitivity (); wxArrayTreeItemIds sel; _dkdm->GetSelections (sel); + shared_ptr group = dynamic_pointer_cast(selected_dkdm()); + shared_ptr dkdm = dynamic_pointer_cast(selected_dkdm()); _create->Enable (!_screens->screens().empty() && sel.GetCount() > 0); + _remove_dkdm->Enable (sel.GetCount() > 0 && (!group || group->name() != "root")); + _export_dkdm->Enable (sel.GetCount() > 0 && dkdm); } void dkdm_begin_drag (wxTreeEvent& ev) @@ -538,6 +548,29 @@ private: Config::instance()->changed (); } + void export_dkdm_clicked () + { + shared_ptr removed = selected_dkdm (); + if (!removed) { + return; + } + + shared_ptr dkdm = dynamic_pointer_cast(removed); + if (!dkdm) { + return; + } + + wxFileDialog* d = new wxFileDialog ( + this, _("Select DKDM File"), wxEmptyString, wxEmptyString, wxT("XML files (*.xml)|*.xml"), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); + + if (d->ShowModal() == wxID_OK) { + dkdm->dkdm().as_xml(wx_to_std(d->GetPath())); + } + d->Destroy (); + } + wxPreferencesEditor* _config_dialog; ScreensPanel* _screens; KDMTimingPanel* _timing; @@ -547,6 +580,7 @@ private: wxButton* _add_dkdm; wxButton* _add_dkdm_folder; wxButton* _remove_dkdm; + wxButton* _export_dkdm; wxButton* _create; KDMOutputPanel* _output; JobViewDialog* _job_view;