summaryrefslogtreecommitdiff
path: root/gtk2_ardour/session_metadata_dialog.cc
diff options
context:
space:
mode:
authorColin Fletcher <colin.m.fletcher@googlemail.com>2015-02-11 00:24:11 +0000
committerRobin Gareus <robin@gareus.org>2015-03-28 18:34:02 +0100
commitb55b7ce1add5f639d1860f1a250c61ecf53f590a (patch)
tree771f229529b3a0cbea6364b8d2e9d1089a468cc6 /gtk2_ardour/session_metadata_dialog.cc
parent9d35a105bd3cfa14bd139028490ce880ce4d7fb5 (diff)
Display length & check digit of entered EAN-13 in metadata dialogue
Diffstat (limited to 'gtk2_ardour/session_metadata_dialog.cc')
-rw-r--r--gtk2_ardour/session_metadata_dialog.cc43
1 files changed, 43 insertions, 0 deletions
diff --git a/gtk2_ardour/session_metadata_dialog.cc b/gtk2_ardour/session_metadata_dialog.cc
index f4e708f62a..c4eede02c3 100644
--- a/gtk2_ardour/session_metadata_dialog.cc
+++ b/gtk2_ardour/session_metadata_dialog.cc
@@ -228,6 +228,7 @@ EAN13MetadataField::EAN13MetadataField (Getter getter, Setter setter, string con
entry = 0;
label = 0;
value_label = 0;
+ status_label = Gtk::manage (new Gtk::Label (""));
}
MetadataPtr
@@ -249,6 +250,7 @@ EAN13MetadataField::load_data (ARDOUR::SessionMetadata const & data)
if (entry) {
entry->set_text (_value);
}
+ update_status ();
}
void
@@ -257,6 +259,42 @@ EAN13MetadataField::update_value ()
// Accept only numeric characters
_value = numeric_string (entry->get_text());
entry->set_text (_value);
+ update_status ();
+}
+
+void
+EAN13MetadataField::update_status ()
+{
+ int len = _value.length ();
+ if (len == 13) {
+ // calculate EAN-13 modulo 10 check digit
+ int sum = 0;
+ const char *p = _value.c_str();
+ for (int i =0; i < 12; i++) {
+ char c = p[i] - '0';
+ if (i % 2) {
+ sum += c;
+ } else {
+ sum += c * 3;
+ }
+ }
+ sum %= 10;
+ if (sum == p[12] - '0') {
+ status_label->set_markup (string_compose(
+ "<span color=\"green\">%1: %2</span>",
+ _("EAN Check digit OK"), sum));
+ } else {
+ status_label->set_markup (string_compose(
+ "<span color=\"#ffa755\">%1: %2 (expected %3)</span>",
+ _("EAN Check digit error"), p[12] - '0', sum));
+ }
+ } else if (len > 0) {
+ status_label->set_markup (string_compose(
+ "<span color=\"#ffa755\">%1: %2 (&lt;13)</span>",
+ _("EAN Length error"), len));
+ } else {
+ status_label->set_text("");
+ }
}
Gtk::Widget &
@@ -694,6 +732,11 @@ SessionMetadataDialog<DataSet>::init_album_data ()
ptr = MetadataPtr (new EAN13MetadataField (&ARDOUR::SessionMetadata::barcode, &ARDOUR::SessionMetadata::set_barcode, _("EAN barcode")));
data_set->add_data_field (ptr);
+
+ // EAN13MetadataField is the only kind of MetadataField which has a status label.
+ EAN13MetadataField &emf = (EAN13MetadataField &) *ptr;
+ ((Gtk::VBox &) data_set->get_widget()).pack_end (*emf.status_label);
+ emf.update_status ();
}
template <typename DataSet>