summaryrefslogtreecommitdiff
path: root/gtk2_ardour/session_metadata_dialog.cc
diff options
context:
space:
mode:
authorColin Fletcher <colin.m.fletcher@googlemail.com>2015-02-10 11:06:55 +0000
committerRobin Gareus <robin@gareus.org>2015-03-28 18:34:02 +0100
commit9d35a105bd3cfa14bd139028490ce880ce4d7fb5 (patch)
tree17c81b56359c6eb425ff91f01aea3e8218927855 /gtk2_ardour/session_metadata_dialog.cc
parentc625d7a6373fa1889c9632fbcd423cccfd0e4bd1 (diff)
Add EAN barcode field to session metadata dialogue
Add an EAN13MetadataField type to the session metadata dialogue, and use it for entry of the EAN barcode in the 'album' tab.
Diffstat (limited to 'gtk2_ardour/session_metadata_dialog.cc')
-rw-r--r--gtk2_ardour/session_metadata_dialog.cc87
1 files changed, 86 insertions, 1 deletions
diff --git a/gtk2_ardour/session_metadata_dialog.cc b/gtk2_ardour/session_metadata_dialog.cc
index 69f215a9e2..f4e708f62a 100644
--- a/gtk2_ardour/session_metadata_dialog.cc
+++ b/gtk2_ardour/session_metadata_dialog.cc
@@ -154,7 +154,7 @@ NumberMetadataField::load_data (ARDOUR::SessionMetadata const & data)
void
NumberMetadataField::update_value ()
{
- // Accpt only numbers
+ // Accept only numbers that will fit into a uint32_t
uint32_t number = str_to_uint (entry->get_text());
_value = uint_to_str (number);
entry->set_text (_value);
@@ -216,6 +216,88 @@ NumberMetadataField::str_to_uint (string const & str) const
}
+
+/* EAN13MetadataField */
+
+EAN13MetadataField::EAN13MetadataField (Getter getter, Setter setter, string const & field_name, guint width) :
+ MetadataField (field_name),
+ getter (getter),
+ setter (setter),
+ width (width)
+{
+ entry = 0;
+ label = 0;
+ value_label = 0;
+}
+
+MetadataPtr
+EAN13MetadataField::copy ()
+{
+ return MetadataPtr (new EAN13MetadataField (getter, setter, _name, width));
+}
+
+void
+EAN13MetadataField::save_data (ARDOUR::SessionMetadata & data) const
+{
+ CALL_MEMBER_FN (data, setter) (_value);
+}
+
+void
+EAN13MetadataField::load_data (ARDOUR::SessionMetadata const & data)
+{
+ _value = CALL_MEMBER_FN (data, getter) ();
+ if (entry) {
+ entry->set_text (_value);
+ }
+}
+
+void
+EAN13MetadataField::update_value ()
+{
+ // Accept only numeric characters
+ _value = numeric_string (entry->get_text());
+ entry->set_text (_value);
+}
+
+Gtk::Widget &
+EAN13MetadataField::name_widget ()
+{
+ label = Gtk::manage (new Gtk::Label(_name + ':'));
+ label->set_alignment (1, 0.5);
+ return *label;
+}
+
+Gtk::Widget &
+EAN13MetadataField::value_widget ()
+{
+ value_label = Gtk::manage (new Gtk::Label(_value));
+ return *value_label;
+}
+
+Gtk::Widget &
+EAN13MetadataField::edit_widget ()
+{
+ entry = Gtk::manage (new Gtk::Entry());
+
+ entry->set_text (_value);
+ entry->set_width_chars (width);
+ entry->set_max_length (13);
+ entry->signal_changed().connect (sigc::mem_fun(*this, &EAN13MetadataField::update_value));
+
+ return *entry;
+}
+
+string
+EAN13MetadataField::numeric_string (string const & str) const
+{
+ string tmp (str);
+ string::size_type i;
+ while ((i = tmp.find_first_not_of("1234567890")) != string::npos) {
+ tmp.erase (i, 1);
+ }
+ return tmp;
+}
+
/* SessionMetadataSet */
SessionMetadataSet::SessionMetadataSet (string const & name)
@@ -609,6 +691,9 @@ SessionMetadataDialog<DataSet>::init_album_data ()
ptr = MetadataPtr (new TextMetadataField (&ARDOUR::SessionMetadata::isrc, &ARDOUR::SessionMetadata::set_isrc, _("ISRC")));
data_set->add_data_field (ptr);
+
+ ptr = MetadataPtr (new EAN13MetadataField (&ARDOUR::SessionMetadata::barcode, &ARDOUR::SessionMetadata::set_barcode, _("EAN barcode")));
+ data_set->add_data_field (ptr);
}
template <typename DataSet>