Optimize automation-event process splitting
[ardour.git] / libs / ardour / ardour / session_metadata.h
1 /*
2     Copyright (C) 2008 Paul Davis
3     Author: Sakari Bergen
4
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)
8     any later version.
9
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
13     for more details.
14
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.
18 */
19
20 #ifndef __ardour_session_metadata_h__
21 #define __ardour_session_metadata_h__
22
23 #include <string>
24
25 #include <map>
26 #include <utility>
27
28 #include "pbd/statefuldestructible.h"
29 #include "pbd/xml++.h"
30
31 #include "ardour/libardour_visibility.h"
32
33 namespace ARDOUR {
34
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.
38  */
39 class LIBARDOUR_API SessionMetadata : public PBD::StatefulDestructible
40 {
41   public:
42         //singleton instance:
43         static SessionMetadata *Metadata() { if (_metadata == NULL) _metadata = new SessionMetadata();  return _metadata; }
44
45         SessionMetadata ();
46         ~SessionMetadata ();
47
48         /*** Accessing ***/
49         std::string description () const;
50
51         std::string comment () const;
52         std::string copyright () const;
53         std::string isrc () const;
54         uint32_t year () const;
55
56         std::string grouping () const;
57         std::string barcode () const;
58         std::string title () const;
59         std::string subtitle () const;
60
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;
72
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;
80
81         std::string genre () const;
82
83         std::string instructor () const;
84         std::string course () const;
85
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;
91
92         /*** Editing ***/
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);
98
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 &);
103
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 &);
115
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);
123
124         void set_genre (const std::string &);
125
126         void set_instructor (const std::string &);
127         void set_course (const std::string &);
128
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 &);
134
135         /*** Export ***/
136         typedef std::map<std::string,std::string> MetaDataMap;
137         void av_export_tag (MetaDataMap&) const;
138
139         /*** Serialization ***/
140         XMLNode & get_state ();  //serializes stuff in the map, to be stored in session file
141         XMLNode & get_user_state ();  //serializes stuff in the user_map, to be stored in user's config file
142         int set_state (const XMLNode &, int version_num);
143
144   private:
145
146         static SessionMetadata *_metadata;  //singleton instance
147
148         typedef std::pair<std::string, std::string> Property;
149         typedef std::map<std::string, std::string> PropertyMap;
150         PropertyMap map;
151         PropertyMap user_map;
152
153         XMLNode * get_xml (const std::string & name);
154
155         std::string get_value (const std::string & name) const;
156         uint32_t get_uint_value (const std::string & name) const;
157
158         void set_value (const std::string & name, const std::string & value);
159         void set_value (const std::string & name, uint32_t value);
160 };
161
162 } // namespace ARDOUR
163
164 #endif // __ardour_session_metadata_h__