5df9ea5cf3f70a1e1d3b7673d5b051a2154a10d7
[dcpomatic.git] / src / wx / content_properties_dialog.cc
1 /*
2     Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
3
4     This file is part of DCP-o-matic.
5
6     DCP-o-matic is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     DCP-o-matic is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with DCP-o-matic.  If not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21 #include "content_properties_dialog.h"
22 #include "wx_util.h"
23 #include "lib/raw_convert.h"
24 #include "lib/content.h"
25 #include "lib/video_content.h"
26 #include "lib/audio_content.h"
27 #include <boost/algorithm/string.hpp>
28 #include <boost/foreach.hpp>
29
30 using std::string;
31 using std::list;
32 using std::pair;
33 using std::map;
34 using boost::shared_ptr;
35 using boost::dynamic_pointer_cast;
36
37 ContentPropertiesDialog::ContentPropertiesDialog (wxWindow* parent, shared_ptr<Content> content)
38         : TableDialog (parent, _("Content Properties"), 2, 1, false)
39 {
40         map<string, list<UserProperty> > grouped;
41         BOOST_FOREACH (UserProperty i, content->user_properties()) {
42                 if (grouped.find(i.category) == grouped.end()) {
43                         grouped[i.category] = list<UserProperty> ();
44                 }
45                 grouped[i.category].push_back (i);
46         }
47
48         maybe_add_group (grouped, wx_to_std (_("General")));
49         maybe_add_group (grouped, wx_to_std (_("Video")));
50         maybe_add_group (grouped, wx_to_std (_("Audio")));
51         maybe_add_group (grouped, wx_to_std (_("Length")));
52
53         layout ();
54 }
55
56 void
57 ContentPropertiesDialog::maybe_add_group (map<string, list<UserProperty> > const & groups, string name)
58 {
59         map<string, list<UserProperty> >::const_iterator i = groups.find (name);
60         if (i == groups.end()) {
61                 return;
62         }
63
64         wxStaticText* m = new wxStaticText (this, wxID_ANY, std_to_wx (i->first));
65         wxFont font (*wxNORMAL_FONT);
66         font.SetWeight (wxFONTWEIGHT_BOLD);
67         m->SetFont (font);
68
69         add_spacer ();
70         add_spacer ();
71         add (m, false);
72         add_spacer ();
73
74         BOOST_FOREACH (UserProperty j, i->second) {
75                 add (std_to_wx (j.key), true);
76                 add (new wxStaticText (this, wxID_ANY, std_to_wx (j.value + " " + j.unit)));
77         }
78 }