From 00b60f52add041a36fa62118baf4b5ac78993980 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 20 Oct 2016 11:42:14 +0100 Subject: [PATCH] Give a better error if the user tries to load a non-KDM as a DKDM into the KDM creator. --- src/lib/util.cc | 6 ------ src/lib/util.h | 1 - src/tools/dcpomatic_kdm.cc | 14 +++++++++++++- src/wx/cinema_dialog.cc | 2 +- src/wx/config_dialog.cc | 2 -- src/wx/editable_list.cc | 25 ------------------------- src/wx/editable_list.h | 19 +++++++------------ src/wx/email_dialog.cc | 11 +++++++++-- src/wx/email_dialog.h | 3 ++- src/wx/file_dialog_wrapper.h | 4 ++-- src/wx/screen_dialog.cc | 1 - src/wx/server_dialog.cc | 3 ++- src/wx/server_dialog.h | 2 +- src/wx/wscript | 1 - 14 files changed, 37 insertions(+), 57 deletions(-) delete mode 100644 src/wx/editable_list.cc diff --git a/src/lib/util.cc b/src/lib/util.cc index 00f36f217..38451e931 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -675,9 +675,3 @@ relaxed_string_to_float (string s) return lexical_cast (s); } } - -bool -string_not_empty (string s) -{ - return !s.empty (); -} diff --git a/src/lib/util.h b/src/lib/util.h index f9b4d0e05..5e1780d72 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -79,6 +79,5 @@ extern std::map split_get_request (std::string url); extern std::string video_asset_filename (boost::shared_ptr asset, int reel_index, int reel_count, boost::optional content_summary); extern std::string audio_asset_filename (boost::shared_ptr asset, int reel_index, int reel_count, boost::optional content_summary); extern float relaxed_string_to_float (std::string); -extern bool string_not_empty (std::string); #endif diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc index 362d8105f..21dd01940 100644 --- a/src/tools/dcpomatic_kdm.cc +++ b/src/tools/dcpomatic_kdm.cc @@ -62,6 +62,7 @@ using std::string; using std::vector; using boost::shared_ptr; using boost::bind; +using boost::optional; enum { ID_help_report_a_problem = 1, @@ -75,6 +76,17 @@ public: { } + + optional get () + { + try { + return dcp::EncryptedKDM (dcp::file_to_string (wx_to_std (_dialog->GetPath ()))); + } catch (cxml::Error& e) { + error_dialog (_parent, wxString::Format ("This file does not look like a KDM (%s)", std_to_wx (e.what()).data())); + } + + return optional (); + } }; static string @@ -156,7 +168,7 @@ public: vector columns; columns.push_back (wx_to_std (_("CPL"))); _dkdm = new EditableList ( - overall_panel, columns, bind (&DOMFrame::dkdms, this), bind (&DOMFrame::set_dkdms, this, _1), bind (&always_valid), bind (&column, _1), false + overall_panel, columns, bind (&DOMFrame::dkdms, this), bind (&DOMFrame::set_dkdms, this, _1), bind (&column, _1), false ); right->Add (_dkdm, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_Y_GAP); diff --git a/src/wx/cinema_dialog.cc b/src/wx/cinema_dialog.cc index 264b046d1..87fcb443e 100644 --- a/src/wx/cinema_dialog.cc +++ b/src/wx/cinema_dialog.cc @@ -70,7 +70,7 @@ CinemaDialog::CinemaDialog (wxWindow* parent, wxString title, string name, list< vector columns; columns.push_back (wx_to_std (_("Address"))); _email_list = new EditableList ( - this, columns, bind (&CinemaDialog::get_emails, this), bind (&CinemaDialog::set_emails, this, _1), bind (&string_not_empty, _1), bind (&column, _1) + this, columns, bind (&CinemaDialog::get_emails, this), bind (&CinemaDialog::set_emails, this, _1), bind (&column, _1) ); sizer->Add (_email_list, wxGBPosition (r, 0), wxGBSpan (1, 2), wxEXPAND); diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc index 0369070a7..5b7dc1cc4 100644 --- a/src/wx/config_dialog.cc +++ b/src/wx/config_dialog.cc @@ -624,7 +624,6 @@ private: columns, boost::bind (&Config::servers, Config::instance()), boost::bind (&Config::set_servers, Config::instance(), _1), - boost::bind (&always_valid), boost::bind (&EncodingServersPage::server_column, this, _1) ); @@ -1276,7 +1275,6 @@ private: columns, bind (&Config::kdm_cc, Config::instance()), bind (&Config::set_kdm_cc, Config::instance(), _1), - bind (&string_not_empty, _1), bind (&column, _1) ); table->Add (_kdm_cc, 1, wxEXPAND | wxALL); diff --git a/src/wx/editable_list.cc b/src/wx/editable_list.cc deleted file mode 100644 index 34471b6c6..000000000 --- a/src/wx/editable_list.cc +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (C) 2016 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 . - -*/ - -bool -always_valid () -{ - return true; -} diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h index 8226c9cac..681588215 100644 --- a/src/wx/editable_list.h +++ b/src/wx/editable_list.h @@ -27,8 +27,6 @@ #include #include -bool always_valid (); - /** @param T type of things being edited. * @param S dialog to edit a thing. */ @@ -41,7 +39,6 @@ public: std::vector columns, boost::function ()> get, boost::function)> set, - boost::function valid, boost::function column, bool can_edit = true, bool title = true @@ -49,7 +46,6 @@ public: : wxPanel (parent) , _get (get) , _set (set) - , _valid (valid) , _columns (columns.size ()) , _column (column) , _edit (0) @@ -159,11 +155,11 @@ private: S* dialog = new S (this); if (dialog->ShowModal() == wxID_OK) { - T const v = dialog->get (); - if (_valid (v)) { - add_to_control (v); + boost::optional const v = dialog->get (); + if (v) { + add_to_control (v.get ()); std::vector all = _get (); - all.push_back (v); + all.push_back (v.get ()); _set (all); } } @@ -184,12 +180,12 @@ private: S* dialog = new S (this); dialog->set (all[item]); if (dialog->ShowModal() == wxID_OK) { - T const v = dialog->get (); - if (!_valid (v)) { + boost::optional const v = dialog->get (); + if (!v) { return; } - all[item] = v; + all[item] = v.get (); } dialog->Destroy (); @@ -226,7 +222,6 @@ private: boost::function ()> _get; boost::function )> _set; - boost::function _valid; int _columns; boost::function _column; diff --git a/src/wx/email_dialog.cc b/src/wx/email_dialog.cc index 97f974a90..b95d79b03 100644 --- a/src/wx/email_dialog.cc +++ b/src/wx/email_dialog.cc @@ -23,6 +23,7 @@ using std::string; using boost::shared_ptr; +using boost::optional; EmailDialog::EmailDialog (wxWindow* parent) : TableDialog (parent, _("Email address"), 2, 1, true) @@ -39,8 +40,14 @@ EmailDialog::set (string address) _email->SetValue (std_to_wx (address)); } -string +optional EmailDialog::get () const { - return wx_to_std (_email->GetValue ()); + string s = wx_to_std (_email->GetValue ()); + if (s.empty ()) { + /* Invalid email address */ + return optional (); + } + + return s; } diff --git a/src/wx/email_dialog.h b/src/wx/email_dialog.h index 4fb08d28b..40a6fdb74 100644 --- a/src/wx/email_dialog.h +++ b/src/wx/email_dialog.h @@ -19,6 +19,7 @@ */ #include "table_dialog.h" +#include class EmailDialog : public TableDialog { @@ -26,7 +27,7 @@ public: EmailDialog (wxWindow *); void set (std::string); - std::string get () const; + boost::optional get () const; private: wxTextCtrl* _email; diff --git a/src/wx/file_dialog_wrapper.h b/src/wx/file_dialog_wrapper.h index 251d1b71d..dd63ff2da 100644 --- a/src/wx/file_dialog_wrapper.h +++ b/src/wx/file_dialog_wrapper.h @@ -32,7 +32,7 @@ public: void set (T) {} - T get () + boost::optional get () { return T (dcp::file_to_string (wx_to_std (_dialog->GetPath ()))); } @@ -49,7 +49,7 @@ public: delete this; } -private: +protected: wxWindow* _parent; wxFileDialog* _dialog; }; diff --git a/src/wx/screen_dialog.cc b/src/wx/screen_dialog.cc index 0ecf223e6..e5b254346 100644 --- a/src/wx/screen_dialog.cc +++ b/src/wx/screen_dialog.cc @@ -105,7 +105,6 @@ ScreenDialog::ScreenDialog ( columns, bind (&ScreenDialog::trusted_devices, this), bind (&ScreenDialog::set_trusted_devices, this, _1), - bind (&always_valid), bind (&column, _1), false ); diff --git a/src/wx/server_dialog.cc b/src/wx/server_dialog.cc index f5983b4cd..abad58989 100644 --- a/src/wx/server_dialog.cc +++ b/src/wx/server_dialog.cc @@ -24,6 +24,7 @@ using std::string; using boost::shared_ptr; +using boost::optional; ServerDialog::ServerDialog (wxWindow* parent) : TableDialog (parent, _("Server"), 2, 1, true) @@ -48,7 +49,7 @@ ServerDialog::set (string server) _host->SetValue (std_to_wx (server)); } -string +optional ServerDialog::get () const { return wx_to_std (_host->GetValue ()); diff --git a/src/wx/server_dialog.h b/src/wx/server_dialog.h index 0f1352ed0..ed109c697 100644 --- a/src/wx/server_dialog.h +++ b/src/wx/server_dialog.h @@ -26,7 +26,7 @@ public: ServerDialog (wxWindow *); void set (std::string); - std::string get () const; + boost::optional get () const; private: wxTextCtrl* _host; diff --git a/src/wx/wscript b/src/wx/wscript index fd1528b27..4543be09f 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -42,7 +42,6 @@ sources = """ content_properties_dialog.cc content_sub_panel.cc dcp_panel.cc - editable_list.cc email_dialog.cc image_sequence_dialog.cc image_subtitle_colour_dialog.cc -- 2.30.2