Tidy.
[ardour.git] / libs / ardour / ardour / export_filename.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
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 */
20
21 #ifndef __ardour_export_filename_h__
22 #define __ardour_export_filename_h__
23
24 #include <boost/shared_ptr.hpp>
25 #include <glibmm/ustring.h>
26 #include <pbd/statefuldestructible.h>
27
28 using Glib::ustring;
29
30 namespace ARDOUR
31 {
32
33 class Session;
34 class ExportTimespan;
35 class ExportChannelConfiguration;
36 class ExportFormatSpecification;
37
38 class ExportFilename {
39   private:
40
41         typedef boost::shared_ptr<ExportTimespan> TimespanPtr;
42         typedef boost::shared_ptr<ExportChannelConfiguration> ChannelConfigPtr;
43         typedef boost::shared_ptr<ExportFormatSpecification const> FormatPtr;
44
45   public:
46
47         enum DateFormat {
48                 D_None,
49                 D_ISO,       // ISO 8601 full date
50                 D_ISOShortY, // Like ISO 8601, but short year representation
51                 D_BE,        // big endian (no deliminator)
52                 D_BEShortY   // big endian short year representation
53         };
54         
55         enum TimeFormat {
56                 T_None,
57                 T_NoDelim,
58                 T_Delim
59         };
60
61   private:
62         friend class ExportElementFactory;
63         ExportFilename (Session & session);
64
65   public:       
66         /* Serialization */
67         
68         XMLNode & get_state ();
69         int set_state (const XMLNode &);
70         
71         /* data access */
72         
73         ustring get_path (FormatPtr format) const;
74         ustring get_folder () const { return folder; }
75         
76         TimeFormat get_time_format () const { return time_format; }
77         DateFormat get_date_format () const { return date_format; }
78         ustring get_time_format_str (TimeFormat format) const;
79         ustring get_date_format_str (DateFormat format) const;
80         
81         ustring get_label () const { return label; }
82         uint32_t get_revision () const { return revision; }
83         
84         /* data modification */
85         
86         void set_time_format (TimeFormat format);
87         void set_date_format (DateFormat format);
88         void set_label (ustring value);
89         void set_revision (uint32_t value) { revision = value; }
90         void set_channel (uint32_t value) { channel = value; }
91         bool set_folder (ustring path);
92         
93         void set_timespan (TimespanPtr ts) { timespan = ts; }
94         void set_channel_config (ChannelConfigPtr cc) { channel_config = cc; }
95         
96         /* public members */
97         
98         bool include_label;
99         bool include_session;
100         bool include_revision;
101         bool include_channel_config;
102         bool include_channel;
103         bool include_timespan;
104         bool include_time;
105         bool include_date;
106         
107   private:
108
109         Session & session;
110
111         ustring   label;
112         uint32_t  revision;
113         uint32_t  channel;
114         
115         ustring   folder;
116         
117         DateFormat date_format;
118         TimeFormat time_format;
119         
120         ustring get_formatted_time (ustring const & format) const;
121         struct tm * time_struct; // Due to static allocation no destructor or copy-ctor is needed because of this
122         
123         TimespanPtr timespan;
124         ChannelConfigPtr channel_config;
125         
126         /* Serialization helpers */
127         
128         typedef std::pair<bool, ustring> FieldPair;
129         
130         void add_field (XMLNode * node, ustring const & name, bool enabled, ustring const & value = "");
131         FieldPair get_field (XMLNode const & node, ustring const & name);
132         FieldPair analyse_folder ();
133         
134 };
135
136
137 } // namespace ARDOUR
138
139 #endif /* __ardour_export_filename_h__ */