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.
This commit is contained in:
parent
fe3fecde93
commit
561f62ba63
@ -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>
|
||||
|
@ -120,6 +120,35 @@ class NumberMetadataField : public MetadataField {
|
||||
guint width;
|
||||
};
|
||||
|
||||
/// MetadataField that accepts EAN-13 data only
|
||||
class EAN13MetadataField : public MetadataField {
|
||||
private:
|
||||
typedef std::string (ARDOUR::SessionMetadata::*Getter) () const;
|
||||
typedef void (ARDOUR::SessionMetadata::*Setter) (std::string const &);
|
||||
public:
|
||||
EAN13MetadataField (Getter getter, Setter setter, std::string const & field_name, guint width = 13);
|
||||
MetadataPtr copy ();
|
||||
|
||||
void save_data (ARDOUR::SessionMetadata & data) const;
|
||||
void load_data (ARDOUR::SessionMetadata const & data);
|
||||
|
||||
Gtk::Widget & name_widget ();
|
||||
Gtk::Widget & value_widget ();
|
||||
Gtk::Widget & edit_widget ();
|
||||
private:
|
||||
void update_value ();
|
||||
std::string numeric_string (std::string const & str) const;
|
||||
|
||||
Getter getter;
|
||||
Setter setter;
|
||||
|
||||
Gtk::Label* label;
|
||||
Gtk::Label* value_label;
|
||||
Gtk::Entry* entry;
|
||||
|
||||
guint width;
|
||||
};
|
||||
|
||||
/// Interface for MetadataFields
|
||||
class SessionMetadataSet : public ARDOUR::SessionHandlePtr {
|
||||
public:
|
||||
|
Loading…
Reference in New Issue
Block a user