diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-10-20 11:42:14 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-10-20 11:42:14 +0100 |
| commit | 00b60f52add041a36fa62118baf4b5ac78993980 (patch) | |
| tree | a1427c61dc4ed0a17bb9f120985481f1772b9d50 /src | |
| parent | bd3be0efd59054666fd04d69715275f257994f5e (diff) | |
Give a better error if the user tries to load a non-KDM as a DKDM into the KDM creator.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/util.cc | 6 | ||||
| -rw-r--r-- | src/lib/util.h | 1 | ||||
| -rw-r--r-- | src/tools/dcpomatic_kdm.cc | 14 | ||||
| -rw-r--r-- | src/wx/cinema_dialog.cc | 2 | ||||
| -rw-r--r-- | src/wx/config_dialog.cc | 2 | ||||
| -rw-r--r-- | src/wx/editable_list.cc | 25 | ||||
| -rw-r--r-- | src/wx/editable_list.h | 19 | ||||
| -rw-r--r-- | src/wx/email_dialog.cc | 11 | ||||
| -rw-r--r-- | src/wx/email_dialog.h | 3 | ||||
| -rw-r--r-- | src/wx/file_dialog_wrapper.h | 4 | ||||
| -rw-r--r-- | src/wx/screen_dialog.cc | 1 | ||||
| -rw-r--r-- | src/wx/server_dialog.cc | 3 | ||||
| -rw-r--r-- | src/wx/server_dialog.h | 2 | ||||
| -rw-r--r-- | src/wx/wscript | 1 |
14 files changed, 37 insertions, 57 deletions
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<float> (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<std::string, std::string> split_get_request (std::string url); extern std::string video_asset_filename (boost::shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, boost::optional<std::string> content_summary); extern std::string audio_asset_filename (boost::shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, boost::optional<std::string> 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<dcp::EncryptedKDM> 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<dcp::EncryptedKDM> (); + } }; static string @@ -156,7 +168,7 @@ public: vector<string> columns; columns.push_back (wx_to_std (_("CPL"))); _dkdm = new EditableList<dcp::EncryptedKDM, KDMFileDialogWrapper> ( - 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<string> columns; columns.push_back (wx_to_std (_("Address"))); _email_list = new EditableList<string, EmailDialog> ( - 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 <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/>. - -*/ - -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 <boost/function.hpp> #include <vector> -bool always_valid (); - /** @param T type of things being edited. * @param S dialog to edit a thing. */ @@ -41,7 +39,6 @@ public: std::vector<std::string> columns, boost::function<std::vector<T> ()> get, boost::function<void (std::vector<T>)> set, - boost::function<bool (T)> valid, boost::function<std::string (T, int)> 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<T> const v = dialog->get (); + if (v) { + add_to_control (v.get ()); std::vector<T> 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<T> const v = dialog->get (); + if (!v) { return; } - all[item] = v; + all[item] = v.get (); } dialog->Destroy (); @@ -226,7 +222,6 @@ private: boost::function <std::vector<T> ()> _get; boost::function <void (std::vector<T>)> _set; - boost::function <bool (T)> _valid; int _columns; boost::function<std::string (T, int)> _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<string> EmailDialog::get () const { - return wx_to_std (_email->GetValue ()); + string s = wx_to_std (_email->GetValue ()); + if (s.empty ()) { + /* Invalid email address */ + return optional<string> (); + } + + 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 <boost/optional.hpp> class EmailDialog : public TableDialog { @@ -26,7 +27,7 @@ public: EmailDialog (wxWindow *); void set (std::string); - std::string get () const; + boost::optional<std::string> 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<T> 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<string> 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<std::string> 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 |
