Fix height of content properties dialogue (#884).
[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         /* SetSizeHints() seems to get it slightly wrong (see #884),
56            so hack in a bit more height.
57         */
58         wxSize const s = GetMinSize ();
59         SetMinSize (wxSize (s.GetWidth(), s.GetHeight() + 32));
60 }
61
62 void
63 ContentPropertiesDialog::maybe_add_group (map<string, list<UserProperty> > const & groups, string name)
64 {
65         map<string, list<UserProperty> >::const_iterator i = groups.find (name);
66         if (i == groups.end()) {
67                 return;
68         }
69
70         wxStaticText* m = new wxStaticText (this, wxID_ANY, std_to_wx (i->first));
71         wxFont font (*wxNORMAL_FONT);
72         font.SetWeight (wxFONTWEIGHT_BOLD);
73         m->SetFont (font);
74
75         add_spacer ();
76         add_spacer ();
77         add (m, false);
78         add_spacer ();
79
80         BOOST_FOREACH (UserProperty j, i->second) {
81                 add (std_to_wx (j.key), true);
82                 add (new wxStaticText (this, wxID_ANY, std_to_wx (j.value + " " + j.unit)));
83         }
84 }