X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsession_metadata_dialog.h;h=b52efe4c0cdabb71f8e75c1c0bc20ae20d65359e;hb=c30b47f0eb72b0f4c6807ef34eea7b557bd9be16;hp=e06dbe010cb3dc923a2e9c0db6ba1783a9fa0af3;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/gtk2_ardour/session_metadata_dialog.h b/gtk2_ardour/session_metadata_dialog.h index e06dbe010c..b52efe4c0c 100644 --- a/gtk2_ardour/session_metadata_dialog.h +++ b/gtk2_ardour/session_metadata_dialog.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2008 Paul Davis + Copyright (C) 2008 Paul Davis Author: Sakari Bergen This program is free software; you can redistribute it and/or modify it @@ -22,6 +22,10 @@ #include "ardour_dialog.h" +#ifdef interface +#undef interface +#endif + #include #include @@ -30,25 +34,22 @@ #include "ardour/session_metadata.h" -using std::string; -using Glib::ustring; - class MetadataField; -typedef boost::shared_ptr MetadataPtr; +typedef boost::shared_ptr MetadataPtr; /// Wraps a metadata field to be used in a GUI class MetadataField { public: - MetadataField (ustring const & field_name); + MetadataField (std::string const & field_name); virtual ~MetadataField(); virtual MetadataPtr copy () = 0; - + virtual void save_data (ARDOUR::SessionMetadata & data) const = 0; virtual void load_data (ARDOUR::SessionMetadata const & data) = 0; - - virtual ustring name() { return _name; } - virtual ustring value() { return _value; } - + + virtual std::string name() { return _name; } + virtual std::string value() { return _value; } + /// Get widget containing name of field virtual Gtk::Widget & name_widget () = 0; /// Get label containing value of field @@ -56,36 +57,36 @@ class MetadataField { /// Get widget for editing value virtual Gtk::Widget & edit_widget () = 0; protected: - ustring _name; - ustring _value; + std::string _name; + std::string _value; }; /// MetadataField that contains text class TextMetadataField : public MetadataField { private: - typedef ustring (ARDOUR::SessionMetadata::*Getter) () const; - typedef void (ARDOUR::SessionMetadata::*Setter) (ustring const &); + typedef std::string (ARDOUR::SessionMetadata::*Getter) () const; + typedef void (ARDOUR::SessionMetadata::*Setter) (std::string const &); public: - TextMetadataField (Getter getter, Setter setter, ustring const & field_name, guint width = 50); + TextMetadataField (Getter getter, Setter setter, std::string const & field_name, guint width = 50); 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 (); - + Getter getter; Setter setter; - + Gtk::Label* label; Gtk::Label* value_label; Gtk::Entry* entry; - - uint width; + + guint width; }; /// MetadataField that accepts only numbers @@ -94,70 +95,100 @@ class NumberMetadataField : public MetadataField { typedef uint32_t (ARDOUR::SessionMetadata::*Getter) () const; typedef void (ARDOUR::SessionMetadata::*Setter) (uint32_t); public: - NumberMetadataField (Getter getter, Setter setter, ustring const & field_name, guint numbers, guint width = 50); + NumberMetadataField (Getter getter, Setter setter, std::string const & field_name, guint numbers, guint width = 50); 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 (); - ustring uint_to_str (uint32_t i) const; - uint32_t str_to_uint (ustring const & str) const; - + std::string uint_to_str (uint32_t i) const; + uint32_t str_to_uint (std::string const & str) const; + Getter getter; Setter setter; - + Gtk::Label* label; Gtk::Label* value_label; Gtk::Entry* entry; - + guint numbers; 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 (); + + Gtk::Label* status_label; + void update_status (); + 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 { +class SessionMetadataSet : public ARDOUR::SessionHandlePtr { public: - SessionMetadataSet (ustring const & name); + SessionMetadataSet (std::string const & name); virtual ~SessionMetadataSet () {}; - + void add_data_field (MetadataPtr field); - - /// Sets session, into which the data is eventually saved - virtual void set_session (ARDOUR::Session * s) { session = s; } + /// allows loading extra data into data sets (for importing etc.) - virtual void load_extra_data (ARDOUR::SessionMetadata const & data) { } + virtual void load_extra_data (ARDOUR::SessionMetadata const & /*data*/) { } /// Saves data to session virtual void save_data () = 0; - + virtual Gtk::Widget & get_widget () = 0; virtual Gtk::Widget & get_tab_widget () = 0; - + protected: typedef std::list DataList; DataList list; - ustring name; - ARDOUR::Session *session; + std::string name; }; /// Contains MetadataFields for editing class SessionMetadataSetEditable : public SessionMetadataSet { public: - SessionMetadataSetEditable (ustring const & name); - - Gtk::Widget & get_widget () { return table; } + SessionMetadataSetEditable (std::string const & name); + + Gtk::Widget & get_widget () { return vbox; } Gtk::Widget & get_tab_widget (); - + /// Sets session and loads data void set_session (ARDOUR::Session * s); /// Saves from MetadataFields into data void save_data (); - + private: + Gtk::VBox vbox; Gtk::Table table; Gtk::Label tab_widget; }; @@ -165,41 +196,41 @@ class SessionMetadataSetEditable : public SessionMetadataSet { /// Contains MetadataFields for importing class SessionMetadataSetImportable : public SessionMetadataSet { public: - SessionMetadataSetImportable (ustring const & name); - + SessionMetadataSetImportable (std::string const & name); + Gtk::Widget & get_widget () { return tree_view; } Gtk::Widget & get_tab_widget (); Gtk::Widget & get_select_all_widget (); - + /// Loads importable data from data void load_extra_data (ARDOUR::SessionMetadata const & data); /// Saves from importable data (see load_data) to session_data void save_data (); - + private: DataList & session_list; // References MetadataSet::list DataList import_list; - + struct Columns : public Gtk::TreeModel::ColumnRecord { public: - Gtk::TreeModelColumn field; - Gtk::TreeModelColumn values; + Gtk::TreeModelColumn field; + Gtk::TreeModelColumn values; Gtk::TreeModelColumn import; Gtk::TreeModelColumn data; - + Columns() { add (field); add (values); add (import); add (data); } }; - + Glib::RefPtr tree; Columns tree_cols; Gtk::TreeView tree_view; - - Gtk::Label tab_widget; + + Gtk::Label tab_widget; Gtk::CheckButton select_all_check; - + void select_all (); - void selection_changed (ustring const & path); + void selection_changed (std::string const & path); }; /// Metadata dialog interface @@ -211,40 +242,42 @@ template class SessionMetadataDialog : public ArdourDialog { public: - SessionMetadataDialog (ustring const & name); + SessionMetadataDialog (std::string const & name); protected: - void init_data (); + void init_data ( bool skip_user = false ); void load_extra_data (ARDOUR::SessionMetadata const & data); void save_data (); - + virtual void init_gui () = 0; virtual void save_and_close (); virtual void end_dialog (); - - void warn_user (ustring const & string); - + + void warn_user (std::string const & string); + typedef std::list WidgetList; typedef boost::shared_ptr WidgetListPtr; typedef Gtk::Widget & (DataSet::*WidgetFunc) (); - + /// Returns list of widgets gathered by calling f for each data set WidgetListPtr get_custom_widgets (WidgetFunc f); - + /// Adds a widget to the table (vertical stacking) with automatic spacing void add_widget (Gtk::Widget & widget); Gtk::Notebook notebook; private: + void init_user_data (); void init_track_data (); void init_album_data (); void init_people_data (); + void init_school_data (); typedef boost::shared_ptr DataSetPtr; typedef std::list DataSetList; DataSetList data_list; - + Gtk::Button * save_button; Gtk::Button * cancel_button; }; @@ -266,11 +299,11 @@ class SessionMetadataImporter : public SessionMetadataDialog