X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fsession_metadata_dialog.h;h=72e56effc5f64a2d00acab9fedab8cbf98b30996;hb=e297951b3080bedab8c4cba415178ecdef8e1fb2;hp=1599e50bb3e9c5d804f8fac5eae821bab80d09f1;hpb=a882e96db1367c26660fd3d3079e9e3e19b1e149;p=ardour.git diff --git a/gtk2_ardour/session_metadata_dialog.h b/gtk2_ardour/session_metadata_dialog.h index 1599e50bb3..72e56effc5 100644 --- a/gtk2_ardour/session_metadata_dialog.h +++ b/gtk2_ardour/session_metadata_dialog.h @@ -26,7 +26,18 @@ #undef interface #endif -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include @@ -38,8 +49,9 @@ class MetadataField; typedef boost::shared_ptr MetadataPtr; /// Wraps a metadata field to be used in a GUI -class MetadataField { - public: +class MetadataField +{ +public: MetadataField (std::string const & field_name); virtual ~MetadataField(); virtual MetadataPtr copy () = 0; @@ -56,17 +68,18 @@ class MetadataField { virtual Gtk::Widget & value_widget () = 0; /// Get widget for editing value virtual Gtk::Widget & edit_widget () = 0; - protected: - std::string _name; - std::string _value; +protected: + std::string _name; + std::string _value; }; /// MetadataField that contains text -class TextMetadataField : public MetadataField { - private: +class TextMetadataField : public MetadataField +{ +protected: typedef std::string (ARDOUR::SessionMetadata::*Getter) () const; typedef void (ARDOUR::SessionMetadata::*Setter) (std::string const &); - public: +public: TextMetadataField (Getter getter, Setter setter, std::string const & field_name, guint width = 50); MetadataPtr copy (); @@ -76,7 +89,7 @@ class TextMetadataField : public MetadataField { Gtk::Widget & name_widget (); Gtk::Widget & value_widget (); Gtk::Widget & edit_widget (); - private: +protected: void update_value (); Getter getter; @@ -89,12 +102,27 @@ class TextMetadataField : public MetadataField { guint width; }; +/// MetadataField that contains longform text +class LongTextMetadataField : public TextMetadataField +{ +public: + LongTextMetadataField (Getter getter, Setter setter, std::string const & field_name, guint width = 50); + MetadataPtr copy (); + + Gtk::Widget & edit_widget (); +private: + void update_value (); + + Gtk::TextView* tview; +}; + /// MetadataField that accepts only numbers -class NumberMetadataField : public MetadataField { - private: +class NumberMetadataField : public MetadataField +{ +private: typedef uint32_t (ARDOUR::SessionMetadata::*Getter) () const; typedef void (ARDOUR::SessionMetadata::*Setter) (uint32_t); - public: +public: NumberMetadataField (Getter getter, Setter setter, std::string const & field_name, guint numbers, guint width = 50); MetadataPtr copy (); @@ -104,9 +132,9 @@ class NumberMetadataField : public MetadataField { Gtk::Widget & name_widget (); Gtk::Widget & value_widget (); Gtk::Widget & edit_widget (); - private: +private: void update_value (); - std::string uint_to_str (uint32_t i) const; + std::string uint_to_str (uint32_t i) const; uint32_t str_to_uint (std::string const & str) const; Getter getter; @@ -120,9 +148,43 @@ 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 (); + + 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 : public ARDOUR::SessionHandlePtr { - public: +class SessionMetadataSet : public ARDOUR::SessionHandlePtr +{ +public: SessionMetadataSet (std::string const & name); virtual ~SessionMetadataSet () {}; @@ -136,15 +198,16 @@ class SessionMetadataSet : public ARDOUR::SessionHandlePtr { virtual Gtk::Widget & get_widget () = 0; virtual Gtk::Widget & get_tab_widget () = 0; - protected: +protected: typedef std::list DataList; DataList list; - std::string name; + std::string name; }; /// Contains MetadataFields for editing -class SessionMetadataSetEditable : public SessionMetadataSet { - public: +class SessionMetadataSetEditable : public SessionMetadataSet +{ +public: SessionMetadataSetEditable (std::string const & name); Gtk::Widget & get_widget () { return vbox; } @@ -155,15 +218,16 @@ class SessionMetadataSetEditable : public SessionMetadataSet { /// Saves from MetadataFields into data void save_data (); - private: +private: Gtk::VBox vbox; Gtk::Table table; Gtk::Label tab_widget; }; /// Contains MetadataFields for importing -class SessionMetadataSetImportable : public SessionMetadataSet { - public: +class SessionMetadataSetImportable : public SessionMetadataSet +{ +public: SessionMetadataSetImportable (std::string const & name); Gtk::Widget & get_widget () { return tree_view; } @@ -175,13 +239,13 @@ class SessionMetadataSetImportable : public SessionMetadataSet { /// Saves from importable data (see load_data) to session_data void save_data (); - private: +private: DataList & session_list; // References MetadataSet::list DataList import_list; struct Columns : public Gtk::TreeModel::ColumnRecord { - public: + public: Gtk::TreeModelColumn field; Gtk::TreeModelColumn values; Gtk::TreeModelColumn import; @@ -209,10 +273,10 @@ class SessionMetadataSetImportable : public SessionMetadataSet { template class SessionMetadataDialog : public ArdourDialog { - public: +public: SessionMetadataDialog (std::string const & name); - protected: +protected: void init_data ( bool skip_user = false ); void load_extra_data (ARDOUR::SessionMetadata const & data); void save_data (); @@ -235,8 +299,9 @@ class SessionMetadataDialog : public ArdourDialog Gtk::Notebook notebook; - private: +private: void init_user_data (); + void init_description_data (); void init_track_data (); void init_album_data (); void init_people_data (); @@ -250,12 +315,13 @@ class SessionMetadataDialog : public ArdourDialog Gtk::Button * cancel_button; }; -class SessionMetadataEditor : public SessionMetadataDialog { - public: +class SessionMetadataEditor : public SessionMetadataDialog +{ +public: SessionMetadataEditor (); ~SessionMetadataEditor (); void run (); - private: +private: void init_gui (); };