X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_kdm.cc;h=8ee4c72d40f27c2c1670b178bc63b27eac42227b;hb=2e134de1d71debb8465a43703b14a19ffeb4211e;hp=3b97fa2da2cb57882eb0ab7c29421ee27182e103;hpb=2b39c4d68f321f5e9a6579df8c6e82cae838482e;p=dcpomatic.git diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 3b97fa2da..8ee4c72d4 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2015-2017 Carl Hetherington + Copyright (C) 2015-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -33,6 +33,7 @@ #include "wx/editable_list.h" #include "wx/static_text.h" #include "wx/dcpomatic_button.h" +#include "wx/nag_dialog.h" #include "lib/config.h" #include "lib/util.h" #include "lib/screen.h" @@ -159,6 +160,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); @@ -188,6 +191,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 (); } @@ -378,7 +382,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) @@ -523,12 +531,43 @@ private: return; } + if (NagDialog::maybe_nag ( + this, Config::NAG_DELETE_DKDM, + _("You are about to remove a DKDM. This will make it impossible to decrypt the DCP that the DKDM was made for, and it cannot be undone. " + "Are you sure?"), + true)) { + return; + } + _dkdm->Delete (dkdm_to_id (removed)); shared_ptr dkdms = Config::instance()->dkdms (); dkdms->remove (removed); 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; @@ -538,6 +577,7 @@ private: wxButton* _add_dkdm; wxButton* _add_dkdm_folder; wxButton* _remove_dkdm; + wxButton* _export_dkdm; wxButton* _create; KDMOutputPanel* _output; JobViewDialog* _job_view;