Allow changing colour conversion settings for multiple pieces of content at the same...
[dcpomatic.git] / src / wx / about_dialog.cc
1 /*
2     Copyright (C) 2013-2019 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 /** @file  src/wx/about_dialog.cc
22  *  @brief The "about DCP-o-matic" dialogue box.
23  */
24
25 #include "about_dialog.h"
26 #include "wx_util.h"
27 #include "static_text.h"
28 #include "lib/version.h"
29 #include "lib/compose.hpp"
30 #include <wx/notebook.h>
31 #include <wx/hyperlink.h>
32
33 using std::vector;
34
35 AboutDialog::AboutDialog (wxWindow* parent)
36         : wxDialog (parent, wxID_ANY, _("About DCP-o-matic"))
37 {
38         wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
39         wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
40
41         wxFont title_font (*wxNORMAL_FONT);
42         title_font.SetPointSize (title_font.GetPointSize() + 12);
43         title_font.SetWeight (wxFONTWEIGHT_BOLD);
44
45         wxFont subtitle_font (*wxNORMAL_FONT);
46         subtitle_font.SetPointSize (subtitle_font.GetPointSize() + 2);
47
48         wxFont version_font (*wxNORMAL_FONT);
49         version_font.SetWeight (wxFONTWEIGHT_BOLD);
50
51         wxStaticText* t = new StaticText (this, _("DCP-o-matic"));
52         t->SetFont (title_font);
53         sizer->Add (t, wxSizerFlags().Centre().Border(wxALL, 16));
54
55         wxString s;
56         if (strcmp (dcpomatic_git_commit, "release") == 0) {
57                 t = new StaticText (this, std_to_wx(String::compose("Version %1", dcpomatic_version)));
58         } else {
59                 t = new StaticText (this, std_to_wx(String::compose("Version %1 git %2", dcpomatic_version, dcpomatic_git_commit)));
60         }
61         t->SetFont (version_font);
62         sizer->Add (t, wxSizerFlags().Centre().Border(wxALL, 2));
63         sizer->AddSpacer (12);
64
65         t = new StaticText (
66                 this,
67                 _("Free, open-source DCP creation from almost anything."),
68                 wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER
69                 );
70         t->SetFont (subtitle_font);
71
72         sizer->Add (t, wxSizerFlags().Centre().Border(wxALL, 8));
73
74         wxHyperlinkCtrl* h = new wxHyperlinkCtrl (
75                 this, wxID_ANY,
76                 wxT ("dcpomatic.com"),
77                 wxT ("https://dcpomatic.com")
78                 );
79
80         sizer->Add (h, wxSizerFlags().Centre().Border(wxALL, 8));
81
82         t = new StaticText (
83                 this,
84                 _("(C) 2012-2019 Carl Hetherington, Terrence Meiczinger\n Ole Laursen, Brecht Sanders"),
85                 wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER
86                 );
87
88         sizer->Add (t, wxSizerFlags().Centre().Border(wxLEFT | wxRIGHT, 16));
89
90         _notebook = new wxNotebook (this, wxID_ANY);
91
92         wxArrayString written_by;
93         written_by.Add (wxT ("Carl Hetherington"));
94         written_by.Add (wxT ("Terrence Meiczinger"));
95         written_by.Add (wxT ("Mart Jansink"));
96         written_by.Add (wxT ("Ole Laursen"));
97         written_by.Add (wxT ("Brecht Sanders"));
98         written_by.Add (wxT ("Jianguo Huang"));
99         add_section (_("Written by"), written_by);
100
101         wxArrayString with_help_from;
102         with_help_from.Add (wxT ("David Vignoni"));
103         with_help_from.Add (wxT ("Dennis Couzin"));
104         with_help_from.Add (wxT ("Carsten Kurz"));
105         with_help_from.Add (wxT ("Gérald Maruccia"));
106         with_help_from.Add (wxT ("Julian van Mil"));
107         add_section (_("With help from"), with_help_from);
108
109         wxArrayString translated_by;
110         translated_by.Add (wxT ("Manuel AC"));
111         translated_by.Add (wxT ("Max Aeschlimann"));
112         translated_by.Add (wxT ("Thiago Andre"));
113         translated_by.Add (wxT ("Felice D'Andrea"));
114         translated_by.Add (wxT ("Grégoire Ausina"));
115         translated_by.Add (wxT ("Tomáš Begeni"));
116         translated_by.Add (wxT ("Fabio \"Zak\" Belli"));
117         translated_by.Add (wxT ("Cherif Ben Brahim"));
118         translated_by.Add (wxT ("Massimiliano Broggi"));
119         translated_by.Add (wxT ("Dan Cohen"));
120         translated_by.Add (wxT ("Davide Dall'AraCiao"));
121         translated_by.Add (wxT ("William Fanelli"));
122         translated_by.Add (wxT ("Max M. Fuhlendorf"));
123         translated_by.Add (wxT ("Tomáš Hlaváč"));
124         translated_by.Add (wxT ("Thierry Journet"));
125         translated_by.Add (wxT ("Adam Klotblixt"));
126         translated_by.Add (wxT ("Theo Kooijmans"));
127         translated_by.Add (wxT ("Carsten Kurz"));
128         translated_by.Add (wxT ("Lilian Lefranc"));
129         translated_by.Add (wxT ("Gérald Maruccia"));
130         translated_by.Add (wxT ("Mike Mazur"));
131         translated_by.Add (wxT ("Rob van Nieuwkerk"));
132         translated_by.Add (wxT ("Anders Uhl Pedersen"));
133         translated_by.Add (wxT ("Olivier Perriere"));
134         translated_by.Add (wxT ("Markus Raab"));
135         translated_by.Add (wxT ("Tiago Casal Ribeiro"));
136         translated_by.Add (wxT ("Davide Sanvito"));
137         translated_by.Add (wxT ("Marek Skrzelowski"));
138         translated_by.Add (wxT ("Igor Voytovich"));
139         translated_by.Add (wxT ("Rov (若文)"));
140         translated_by.Add (wxT ("刘汉源"));
141         translated_by.Add (wxT ("Gökhan Aksoy"));
142         add_section (_("Translated by"), translated_by);
143
144         wxArrayString patrons;
145         patrons.Add ("Luproduction");
146         patrons.Add ("Lightbender Post");
147         patrons.Add ("Drop-out Cinema");
148         add_section (_("Patrons"), patrons);
149
150         wxArrayString subscribers;
151         #include "subscribers.cc"
152         add_section (_("Subscribers"), subscribers);
153
154         wxArrayString supported_by;
155         #include "supporters.cc"
156         add_section (_("Also supported by"), supported_by);
157
158         wxArrayString tested_by;
159         tested_by.Add (wxT ("Manuel AC"));
160         tested_by.Add (wxT ("Trever Anderson"));
161         tested_by.Add (wxT ("JP Beauviala"));
162         tested_by.Add (wxT ("Mike Blakesley"));
163         tested_by.Add (wxT ("David Booty"));
164         tested_by.Add (wxT ("Roop Chand"));
165         tested_by.Add (wxT ("Daniel Chauvet"));
166         tested_by.Add (wxT ("Adam Colt"));
167         tested_by.Add (wxT ("John Convertino"));
168         tested_by.Add (wxT ("Andreas Eli"));
169         tested_by.Add (wxT ("Leo Enticknap"));
170         tested_by.Add (wxT ("Jose Angel Velasco Fernandez"));
171         tested_by.Add (wxT ("Maurizio Giampà"));
172         tested_by.Add (wxT ("Luke Granger-Brown"));
173         tested_by.Add (wxT ("Sumit Guha"));
174         tested_by.Add (wxT ("Steve Guttag"));
175         tested_by.Add (wxT ("Patrick Haderer"));
176         tested_by.Add (wxT ("Bill Hamell"));
177         tested_by.Add (wxT ("Jonathan Jensen"));
178         tested_by.Add (wxT ("Thierry Journet"));
179         tested_by.Add (wxT ("Markus Kalb"));
180         tested_by.Add (wxT ("Ada de Kamper"));
181         tested_by.Add (wxT ("Stefan Karner"));
182         tested_by.Add (wxT ("Adam Keay"));
183         tested_by.Add (wxT ("Simon Kesselman"));
184         tested_by.Add (wxT ("Pepijn Klijs"));
185         tested_by.Add (wxT ("Denzil Kriekenbeek"));
186         tested_by.Add (wxT ("Carsten Kurz"));
187         tested_by.Add (wxT ("Bill Lam"));
188         tested_by.Add (wxT ("Lilian Lefranc"));
189         tested_by.Add (wxT ("Olivier Lemaire"));
190         tested_by.Add (wxT ("Gavin Lewarne"));
191         tested_by.Add (wxT ("Gérald Maruccia"));
192         tested_by.Add (wxT ("George Mazarakis"));
193         tested_by.Add (wxT ("Mattias Mattsson"));
194         tested_by.Add (wxT ("Will Meadows"));
195         tested_by.Add (wxT ("Brad Miller"));
196         tested_by.Add (wxT ("Ash Mitchell"));
197         tested_by.Add (wxT ("Rob van Nieuwkerk"));
198         tested_by.Add (wxT ("Anders Nordentoft-Madsen"));
199         tested_by.Add (wxT ("Mauro Ottonello"));
200         tested_by.Add (wxT ("Peter Puchner"));
201         tested_by.Add (wxT ("Markus Raab"));
202         tested_by.Add (wxT ("Michael Reckert"));
203         tested_by.Add (wxT ("Greg Rooke"));
204         tested_by.Add (wxT ("Elad Saad"));
205         tested_by.Add (wxT ("Karim Senoucci"));
206         tested_by.Add (wxT ("Hordur Valgardsson"));
207         tested_by.Add (wxT ("Xenophon the Vampire"));
208         tested_by.Add (wxT ("Simon Vannarath"));
209         tested_by.Add (wxT ("Igor Voytovich"));
210         tested_by.Add (wxT ("Andrew Walls"));
211         tested_by.Add (wxT ("Andreas Weiss"));
212         tested_by.Add (wxT ("Paul Willmott"));
213         tested_by.Add (wxT ("Wolfgang Woehl"));
214         add_section (_("Tested by"), tested_by);
215
216         sizer->Add (_notebook, wxSizerFlags().Centre().Border(wxALL, 16).Expand());
217
218         overall_sizer->Add (sizer);
219
220         wxSizer* buttons = CreateButtonSizer (wxOK);
221         if (buttons) {
222                 overall_sizer->Add (buttons, 1, wxEXPAND | wxALL, 4);
223         }
224
225         SetSizerAndFit (overall_sizer);
226 }
227
228 /** Add a section of credits.
229  *  @param name Name of section.
230  *  @param credits List of names.
231  */
232 void
233 AboutDialog::add_section (wxString name, wxArrayString credits)
234 {
235         static bool first = true;
236         int const N = 4;
237
238         wxScrolledWindow* panel = new wxScrolledWindow (_notebook);
239         panel->SetMaxSize (wxSize (-1, 380));
240         panel->EnableScrolling (false, true);
241         panel->SetScrollRate (0, 32);
242         wxSizer* overall_sizer = new wxBoxSizer (wxHORIZONTAL);
243
244         vector<wxSizer*> sizers;
245
246         for (int i = 0; i < N; ++i) {
247                 sizers.push_back (new wxBoxSizer (wxVERTICAL));
248                 overall_sizer->Add (sizers.back (), 1, wxEXPAND | wxALL, 6);
249         }
250
251         int c = 0;
252         for (size_t i = 0; i < credits.Count(); ++i) {
253                 add_label_to_sizer (sizers[c], panel, credits[i], false);
254                 ++c;
255                 if (c == N) {
256                         c = 0;
257                 }
258         }
259
260         panel->SetSizerAndFit (overall_sizer);
261         _notebook->AddPage (panel, name, first);
262         first = false;
263 }