2 Copyright (C) 2008 Paul Davis
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2 of the License, or (at your option)
10 This program is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __ardour_session_metadata_h__
21 #define __ardour_session_metadata_h__
28 #include "pbd/statefuldestructible.h"
29 #include "pbd/xml++.h"
31 #include "ardour/libardour_visibility.h"
35 /** Represents metadata associated to a Session
36 * Metadata can be accessed and edited via this class.
37 * Exported files can also be tagged with this data.
39 class LIBARDOUR_API SessionMetadata : public PBD::StatefulDestructible
43 static SessionMetadata *Metadata() { if (_metadata == NULL) _metadata = new SessionMetadata(); return _metadata; }
49 std::string description () const;
51 std::string comment () const;
52 std::string copyright () const;
53 std::string isrc () const;
54 uint32_t year () const;
56 std::string grouping () const;
57 std::string barcode () const;
58 std::string title () const;
59 std::string subtitle () const;
61 std::string artist () const;
62 std::string album_artist () const;
63 std::string lyricist () const;
64 std::string composer () const;
65 std::string conductor () const;
66 std::string remixer () const;
67 std::string arranger () const;
68 std::string engineer () const;
69 std::string producer () const;
70 std::string dj_mixer () const;
71 std::string mixer () const;
73 std::string album () const;
74 std::string compilation () const;
75 std::string disc_subtitle () const;
76 uint32_t disc_number () const;
77 uint32_t total_discs () const;
78 uint32_t track_number () const;
79 uint32_t total_tracks () const;
81 std::string genre () const;
83 std::string instructor () const;
84 std::string course () const;
86 std::string user_name () const;
87 std::string user_email () const;
88 std::string user_web () const;
89 std::string organization () const;
90 std::string country () const;
93 void set_description (const std::string &);
94 void set_comment (const std::string &);
95 void set_copyright (const std::string &);
96 void set_isrc (const std::string &);
97 void set_year (uint32_t);
99 void set_grouping (const std::string &);
100 void set_barcode (const std::string &);
101 void set_title (const std::string &);
102 void set_subtitle (const std::string &);
104 void set_artist (const std::string &);
105 void set_album_artist (const std::string &);
106 void set_lyricist (const std::string &);
107 void set_composer (const std::string &);
108 void set_conductor (const std::string &);
109 void set_remixer (const std::string &);
110 void set_arranger (const std::string &);
111 void set_engineer (const std::string &);
112 void set_producer (const std::string &);
113 void set_dj_mixer (const std::string &);
114 void set_mixer (const std::string &);
116 void set_album (const std::string &);
117 void set_compilation (const std::string &);
118 void set_disc_subtitle (const std::string &);
119 void set_disc_number (uint32_t);
120 void set_total_discs (uint32_t);
121 void set_track_number (uint32_t);
122 void set_total_tracks (uint32_t);
124 void set_genre (const std::string &);
126 void set_instructor (const std::string &);
127 void set_course (const std::string &);
129 void set_user_name (const std::string &);
130 void set_user_email (const std::string &);
131 void set_user_web (const std::string &);
132 void set_organization (const std::string &);
133 void set_country (const std::string &);
135 /*** Serialization ***/
136 XMLNode & get_state (); //serializes stuff in the map, to be stored in session file
137 XMLNode & get_user_state (); //serializes stuff in the user_map, to be stored in user's config file
138 int set_state (const XMLNode &, int version_num);
142 static SessionMetadata *_metadata; //singleton instance
144 typedef std::pair<std::string, std::string> Property;
145 typedef std::map<std::string, std::string> PropertyMap;
147 PropertyMap user_map;
149 XMLNode * get_xml (const std::string & name);
151 std::string get_value (const std::string & name) const;
152 uint32_t get_uint_value (const std::string & name) const;
154 void set_value (const std::string & name, const std::string & value);
155 void set_value (const std::string & name, uint32_t value);
158 } // namespace ARDOUR
160 #endif // __ardour_session_metadata_h__