summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-03-13 02:48:32 +0000
committerCarl Hetherington <cth@carlh.net>2016-03-13 02:48:32 +0000
commit692f9e2951a8bf600f95bb0b76c18df71c881504 (patch)
tree740b3d2853bfd7ea47d86f4d20024a0647caec53 /src
parent1a1d4b22589d5832dd594a65054d9261f9f496cf (diff)
Ignore empty KDM email addresses (#818).
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.cc2
-rw-r--r--src/wx/cinema_dialog.cc3
-rw-r--r--src/wx/config_dialog.cc8
-rw-r--r--src/wx/editable_list.cc24
-rw-r--r--src/wx/editable_list.h25
-rw-r--r--src/wx/screen_dialog.cc8
-rw-r--r--src/wx/wscript1
9 files changed, 68 insertions, 10 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc
index 61c9dac06..6f366257c 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -636,3 +636,9 @@ 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 640933f00..142b21e96 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -75,5 +75,6 @@ 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);
extern std::string audio_asset_filename (boost::shared_ptr<dcp::SoundAsset> asset);
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 b98ec84a9..6c3103da2 100644
--- a/src/tools/dcpomatic_kdm.cc
+++ b/src/tools/dcpomatic_kdm.cc
@@ -146,7 +146,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 (&column, _1), false
+ overall_panel, columns, bind (&DOMFrame::dkdms, this), bind (&DOMFrame::set_dkdms, this, _1), bind (&always_valid), bind (&column, _1), false
);
vertical->Add (_dkdm, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_Y_GAP);
diff --git a/src/wx/cinema_dialog.cc b/src/wx/cinema_dialog.cc
index 6fb4acc6b..c0b7b5242 100644
--- a/src/wx/cinema_dialog.cc
+++ b/src/wx/cinema_dialog.cc
@@ -20,6 +20,7 @@
#include "cinema_dialog.h"
#include "wx_util.h"
#include "lib/dcpomatic_assert.h"
+#include "lib/util.h"
#include <boost/foreach.hpp>
using std::string;
@@ -63,7 +64,7 @@ CinemaDialog::CinemaDialog (wxWindow* parent, string title, string name, list<st
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 (&column, _1)
+ this, columns, bind (&CinemaDialog::get_emails, this), bind (&CinemaDialog::set_emails, this, _1), bind (&string_not_empty, _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 7e70326dc..50d806f35 100644
--- a/src/wx/config_dialog.cc
+++ b/src/wx/config_dialog.cc
@@ -639,6 +639,7 @@ 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)
);
@@ -1251,7 +1252,12 @@ private:
columns.push_back (wx_to_std (_("Address")));
add_label_to_sizer (table, _panel, _("CC addresses"), true);
_kdm_cc = new EditableList<string, EmailDialog> (
- _panel, columns, bind (&Config::kdm_cc, Config::instance()), bind (&Config::set_kdm_cc, Config::instance(), _1), bind (&column, _1)
+ _panel,
+ 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
new file mode 100644
index 000000000..28017e01a
--- /dev/null
+++ b/src/wx/editable_list.cc
@@ -0,0 +1,24 @@
+/*
+ Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+bool
+always_valid ()
+{
+ return true;
+}
diff --git a/src/wx/editable_list.h b/src/wx/editable_list.h
index 47eb254e9..b756a408b 100644
--- a/src/wx/editable_list.h
+++ b/src/wx/editable_list.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -26,6 +26,8 @@
#include <boost/function.hpp>
#include <vector>
+bool always_valid ();
+
/** @param T type of things being edited.
* @param S dialog to edit a thing.
*/
@@ -38,6 +40,7 @@ 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
@@ -45,6 +48,7 @@ public:
: wxPanel (parent)
, _get (get)
, _set (set)
+ , _valid (valid)
, _columns (columns.size ())
, _column (column)
, _edit (0)
@@ -158,10 +162,13 @@ private:
S* dialog = new S (this);
if (dialog->ShowModal() == wxID_OK) {
- add_to_control (dialog->get ());
- std::vector<T> all = _get ();
- all.push_back (dialog->get ());
- _set (all);
+ T const v = dialog->get ();
+ if (_valid (v)) {
+ add_to_control (v);
+ std::vector<T> all = _get ();
+ all.push_back (v);
+ _set (all);
+ }
}
dialog->Destroy ();
@@ -180,7 +187,12 @@ private:
S* dialog = new S (this);
dialog->set (all[item]);
if (dialog->ShowModal() == wxID_OK) {
- all[item] = dialog->get ();
+ T const v = dialog->get ();
+ if (!_valid (v)) {
+ return;
+ }
+
+ all[item] = v;
}
dialog->Destroy ();
@@ -217,6 +229,7 @@ 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/screen_dialog.cc b/src/wx/screen_dialog.cc
index 705a7ff58..f640cdbc2 100644
--- a/src/wx/screen_dialog.cc
+++ b/src/wx/screen_dialog.cc
@@ -92,7 +92,13 @@ ScreenDialog::ScreenDialog (wxWindow* parent, string title, string name, optiona
vector<string> columns;
columns.push_back (wx_to_std (_("Thumbprint")));
_trusted_device_list = new EditableList<dcp::Certificate, CertificateFileDialogWrapper> (
- this, columns, bind (&ScreenDialog::trusted_devices, this), bind (&ScreenDialog::set_trusted_devices, this, _1), bind (&column, _1), false
+ this,
+ columns,
+ bind (&ScreenDialog::trusted_devices, this),
+ bind (&ScreenDialog::set_trusted_devices, this, _1),
+ bind (&always_valid),
+ bind (&column, _1),
+ false
);
_sizer->Add (_trusted_device_list, wxGBPosition (r, 0), wxGBSpan (1, 3), wxEXPAND);
diff --git a/src/wx/wscript b/src/wx/wscript
index e25335682..19ff17d4e 100644
--- a/src/wx/wscript
+++ b/src/wx/wscript
@@ -39,6 +39,7 @@ 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