summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-10-20 11:42:14 +0100
committerCarl Hetherington <cth@carlh.net>2016-10-20 11:42:14 +0100
commit00b60f52add041a36fa62118baf4b5ac78993980 (patch)
treea1427c61dc4ed0a17bb9f120985481f1772b9d50 /src
parentbd3be0efd59054666fd04d69715275f257994f5e (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.cc6
-rw-r--r--src/lib/util.h1
-rw-r--r--src/tools/dcpomatic_kdm.cc14
-rw-r--r--src/wx/cinema_dialog.cc2
-rw-r--r--src/wx/config_dialog.cc2
-rw-r--r--src/wx/editable_list.cc25
-rw-r--r--src/wx/editable_list.h19
-rw-r--r--src/wx/email_dialog.cc11
-rw-r--r--src/wx/email_dialog.h3
-rw-r--r--src/wx/file_dialog_wrapper.h4
-rw-r--r--src/wx/screen_dialog.cc1
-rw-r--r--src/wx/server_dialog.cc3
-rw-r--r--src/wx/server_dialog.h2
-rw-r--r--src/wx/wscript1
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