KiCad PCB EDA Suite
AboutDialog_main.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2010 Rafael Sokolowski <[email protected]>
5  * Copyright (C) 2010-2022 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
25 #include <boost/version.hpp>
26 #include <wx/aboutdlg.h>
27 #include <wx/arrimpl.cpp>
28 #include <wx/textctrl.h>
29 #include <wx/utils.h>
30 
31 /* Used icons:
32  * show_3d_xpm; // 3D icon
33  * module_xpm;
34  * icon_kicad_xpm; // Icon of the application
35  */
36 #include <bitmaps.h>
37 #include <build_version.h>
38 #include <common.h>
39 #include <kiplatform/app.h>
40 #include <pgm_base.h>
41 #include <eda_base_frame.h>
42 
43 #include "aboutinfo.h"
44 #include "dialog_about.h"
45 
46 
47 WX_DEFINE_OBJARRAY( CONTRIBUTORS )
48 
49 // Helper functions:
50 static wxString HtmlHyperlink( const wxString& url, const wxString& description = wxEmptyString );
51 static wxString HtmlNewline( const unsigned int amount = 1 );
52 
53 
58 static void buildKicadAboutBanner( EDA_BASE_FRAME* aParent, ABOUT_APP_INFO& aInfo )
59 {
60  // Set application specific icon
61  aInfo.SetAppIcon( aParent->GetIcon() );
62 
63  /* Set title */
64  aInfo.SetAppName( Pgm().App().GetAppName() );
65 
66  /* Copyright information */
67  aInfo.SetCopyright( "(C) 1992-2022 KiCad Developers Team" );
68 
69  /* KiCad build version */
70  wxString version;
71  version << ( KIPLATFORM::APP::IsOperatingSystemUnsupported() ? wxT( "(UNSUPPORTED)" )
72  : GetBuildVersion() )
73 #ifdef DEBUG
74  << wxT( ", debug" )
75 #else
76  << wxT( ", release" )
77 #endif
78  << wxT( " build" );
79 
80  aInfo.SetBuildVersion( version );
81  aInfo.SetBuildDate( GetBuildDate() );
82 
83  /* wxWidgets version */
84  wxString libVersion;
85  libVersion << wxGetLibraryVersionInfo().GetVersionString();
86 
87  /* Unicode or ANSI version */
88 #if wxUSE_UNICODE
89  libVersion << wxT( " Unicode " );
90 #else
91  libVersion << wxT( " ANSI " );
92 #endif
93 
94  // Just in case someone builds KiCad with the platform native of Boost instead of
95  // the version included with the KiCad source.
96  libVersion << wxT( "and Boost " ) << ( BOOST_VERSION / 100000 ) << wxT( "." )
97  << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." ) << ( BOOST_VERSION % 100 )
98  << wxT( "\n" );
99 
100  // Operating System Information
101 
102  wxPlatformInfo platformInfo;
103 
104  libVersion << wxT( "Platform: " ) << wxGetOsDescription() << wxT( ", " )
105 // TODO (ISM): Readd conditional once our wx fork and flatpaks are running released 3.1.5
106 #if 0 && wxCHECK_VERSION( 3, 1, 5 )
107  << platformInfo.GetBitnessName();
108 #else
109  << platformInfo.GetArchName();
110 #endif
111 
112  aInfo.SetLibVersion( libVersion );
113 
114 
115  /* info/description part HTML formatted */
116 
117  wxString description;
118 
119  /* short description */
120  description << wxT( "<p>" );
121  description << wxT( "<b><u>" )
122  << _( "Description" )
123  << wxT( "</u></b>" ); // bold & underlined font for caption
124 
125  description << wxT( "<p>" )
126  << _( "The KiCad EDA Suite is a set of open source applications for the "
127  "creation of electronic schematics and printed circuit boards." )
128  << wxT( "</p>" );
129 
130  description << wxT( "</p>" );
131 
132  /* websites */
133  description << wxT( "<p><b><u>" )
134  << _( "KiCad on the web" )
135  << wxT( "</u></b>" ); // bold & underlined font for caption
136 
137  // bullet-ed list with some http links
138  description << wxT( "<ul>" );
139  description << wxT( "<li>" )
140  << _( "The official KiCad website - " )
141  << HtmlHyperlink( wxT( "http://www.kicad.org" ) )
142  << wxT( "</li>" );
143  description << wxT( "<li>" )
144  << _( "Developer website - " )
145  << HtmlHyperlink( wxT( "https://go.kicad.org/dev" ) )
146  << wxT( "</li>" );
147 
148  description << wxT( "<li>" )
149  << _("Official KiCad library repositories - " )
150  << HtmlHyperlink( wxT( "https://go.kicad.org/libraries" ) )
151  << wxT( "</li>" );
152 
153  description << wxT( "</ul></p>" );
154 
155  description << wxT( "<p><b><u>" )
156  << _( "Bug tracker" )
157  << wxT( "</u></b>" ); // bold & underlined font caption
158 
159  // bullet-ed list with some http links
160  description << wxT( "<ul>" );
161  description << wxT( "<li>" )
162  << _( "Report or examine bugs - " )
163  << HtmlHyperlink( wxT( "https://go.kicad.org/bugs" ) )
164  << wxT( "</li>" );
165  description << wxT( "</ul></p>" );
166 
167  description << wxT( "<p><b><u>" )
168  << _( "KiCad users group and community" )
169  << wxT( "</u></b>" ); // bold & underlined font caption
170 
171  description << wxT( "<ul>" );
172  description << wxT( "<li>" )
173  << _( "KiCad forum - " )
174  << HtmlHyperlink( wxT( "https://go.kicad.org/forum" ) )
175  << wxT( "</li>" );
176 
177  description << wxT( "</ul></p>" );
178 
179  aInfo.SetDescription( description );
180 
181 
182  // License information also HTML formatted:
183  wxString license;
184  license
185  << wxT( "<div align='center'>" )
186  << HtmlNewline( 4 )
187  << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
188  << HtmlHyperlink( wxT( "http://www.gnu.org/licenses" ),
189  _( "GNU General Public License (GPL) version 3 or any later version" ) )
190  << wxT( "</div>" );
191 
192  aInfo.SetLicense( license );
193 
194 
195  /* A contributor consists of the following information:
196  * Mandatory:
197  * - Name
198  * Optional:
199  * - EMail address
200  * - Category
201  * - Category specific icon
202  *
203  * All contributors of the same category will be enumerated under this category
204  * which should be represented by the same icon.
205  */
206 
207  // The core developers
208 #define LEAD_DEV _( "Lead Development Team" )
209 #define FORMER_DEV _( "Lead Development Alumni" )
210 #define CONTRIB_DEV _( "Additional Contributions By")
211  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jean-Pierre Charras" ), LEAD_DEV, nullptr ) );
212  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Wayne Stambaugh" ), LEAD_DEV, nullptr ) );
213 
214  // Alphabetical after the first two
215  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jon Evans" ), LEAD_DEV, nullptr ) );
216  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Roberto Fernandez Bautista" ), LEAD_DEV, nullptr ) );
217  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Seth Hillbrand" ), LEAD_DEV, nullptr ) );
218  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ian McInerney" ), LEAD_DEV, nullptr ) );
219  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Orson (Maciej Sumiński)" ), LEAD_DEV, nullptr ) );
220  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mark Roszko" ), LEAD_DEV, nullptr ) );
221  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Thomas Pointhuber" ), LEAD_DEV, nullptr ) );
222  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mikolaj Wielgus" ), LEAD_DEV, nullptr ) );
223  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Tomasz Wlostowski" ), LEAD_DEV, nullptr ) );
224  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jeff Young" ), LEAD_DEV, nullptr ) );
225 
226  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "John Beard" ), FORMER_DEV, nullptr ) );
227  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dick Hollenbeck" ), FORMER_DEV, nullptr ) );
228  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexis Lockwood" ), FORMER_DEV, nullptr ) );
229  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Brian Sidebotham" ), FORMER_DEV, nullptr ) );
230 
231  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin Aberg" ), CONTRIB_DEV, nullptr ) );
232  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Rohan Agrawal" ), CONTRIB_DEV, nullptr ) );
233  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Johannes Agricola" ), CONTRIB_DEV, nullptr ) );
234  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Nabeel Ahmad" ), CONTRIB_DEV, nullptr ) );
235  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Werner Almesberger" ), CONTRIB_DEV, nullptr ) );
236  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Shawn Anastasio" ), CONTRIB_DEV, nullptr ) );
237  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Collin Anderson" ), CONTRIB_DEV, nullptr ) );
238  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Tom Andrews" ), CONTRIB_DEV, nullptr ) );
239  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mikael Arguedas" ), CONTRIB_DEV, nullptr ) );
240  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Lachlan Audas" ), CONTRIB_DEV, nullptr ) );
241  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jean-Noel Avila" ), CONTRIB_DEV, nullptr ) );
242 
243  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Pascal Baerten" ), CONTRIB_DEV, nullptr ) );
244  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Konstantin Baranovskiy" ), CONTRIB_DEV, nullptr ) );
245  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Roman Bashkov" ), CONTRIB_DEV, nullptr ) );
246  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michael Beardsworth" ), CONTRIB_DEV, nullptr ) );
247  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Matthew Beckler" ), CONTRIB_DEV, nullptr ) );
248  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Konrad Beckmann" ), CONTRIB_DEV, nullptr ) );
249  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "David Beinder" ), CONTRIB_DEV, nullptr ) );
250  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Frank Bennett" ), CONTRIB_DEV, nullptr ) );
251  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Roman Beranek" ), CONTRIB_DEV, nullptr ) );
252  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Gustav Bergquist" ), CONTRIB_DEV, nullptr ) );
253  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Cirilo Bernardo" ), CONTRIB_DEV, nullptr ) );
254  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Joël Bertrand" ), CONTRIB_DEV, nullptr ) );
255  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andreas Beutling" ), CONTRIB_DEV, nullptr ) );
256  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Brian F. G. Bidulock" ), CONTRIB_DEV, nullptr ) );
257  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Anton Blanchard" ), CONTRIB_DEV, nullptr ) );
258  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Blair Bonnett" ), CONTRIB_DEV, nullptr ) );
259  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Carlo Bramini" ), CONTRIB_DEV, nullptr ) );
260  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Stefan Brüns" ), CONTRIB_DEV, nullptr ) );
261  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andreas Buhr" ), CONTRIB_DEV, nullptr ) );
262  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ryan Bunch" ), CONTRIB_DEV, nullptr ) );
263  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Emery Burhan" ), CONTRIB_DEV, nullptr ) );
264 
265  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Phinitnan Chanasabaeng" ), CONTRIB_DEV, nullptr ) );
266  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Shivpratap Chauhan" ), CONTRIB_DEV, nullptr ) );
267  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kevin Cozens" ), CONTRIB_DEV, nullptr ) );
268  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Joseph Y. Chen" ), CONTRIB_DEV, nullptr ) );
269  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexey Chernov" ), CONTRIB_DEV, nullptr ) );
270  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Ciampa" ), CONTRIB_DEV, nullptr ) );
271  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marcus Comstedt" ), CONTRIB_DEV, nullptr ) );
272  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Diogo Condeco" ), CONTRIB_DEV, nullptr ) );
273  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Colin Cooper" ), CONTRIB_DEV, nullptr ) );
274  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Fabien Corona" ), CONTRIB_DEV, nullptr ) );
275  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Garth Corral" ), CONTRIB_DEV, nullptr ) );
276  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kevin Cozens" ), CONTRIB_DEV, nullptr ) );
277  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dan Cross" ), CONTRIB_DEV, nullptr ) );
278 
279  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jonas Diemer" ), CONTRIB_DEV, nullptr ) );
280  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrew D'Addesio" ), CONTRIB_DEV, nullptr ) );
281  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin d'Allens" ), CONTRIB_DEV, nullptr ) );
282  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Camille Delbegue" ), CONTRIB_DEV, nullptr ) );
283  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Albin Dennevi" ), CONTRIB_DEV, nullptr ) );
284  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ruben De Smet" ), CONTRIB_DEV, nullptr ) );
285  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ben Dooks" ), CONTRIB_DEV, nullptr ) );
286  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrew Downing" ), CONTRIB_DEV, nullptr ) );
287  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jan Dubiec" ), CONTRIB_DEV, nullptr ) );
288 
289  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Gerd Egidy" ), CONTRIB_DEV, nullptr ) );
290  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jean Philippe Eimer" ), CONTRIB_DEV, nullptr ) );
291  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ben Ellis" ), CONTRIB_DEV, nullptr ) );
292  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Oleg Endo" ), CONTRIB_DEV, nullptr ) );
293  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Damien Espitallier" ), CONTRIB_DEV, nullptr ) );
294  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Paul Ewing" ), CONTRIB_DEV, nullptr ) );
295 
296  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrey Fedorushkov" ), CONTRIB_DEV, nullptr ) );
297  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Julian Fellinger" ), CONTRIB_DEV, nullptr ) );
298  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Joe Ferner" ), CONTRIB_DEV, nullptr ) );
299  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Thomas Figueroa" ), CONTRIB_DEV, nullptr ) );
300  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Drew Fustini" ), CONTRIB_DEV, nullptr ) );
301 
302  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ronnie Gaensli" ), CONTRIB_DEV, nullptr ) );
303  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Christian Gagneraud" ), CONTRIB_DEV, nullptr ) );
304  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ben Gamari" ), CONTRIB_DEV, nullptr ) );
305  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ashutosh Gangwar" ), CONTRIB_DEV, nullptr ) );
306  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alessandro Gatti" ), CONTRIB_DEV, nullptr ) );
307  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hal Gentz" ), CONTRIB_DEV, nullptr ) );
308  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michael Geselbracht" ), CONTRIB_DEV, nullptr ) );
309  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Giulio Girardi" ), CONTRIB_DEV, nullptr ) );
310  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jeff Glass" ), CONTRIB_DEV, nullptr ) );
311  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Golubev" ), CONTRIB_DEV, nullptr ) );
312  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Angus Gratton" ), CONTRIB_DEV, nullptr ) );
313  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Element Green" ), CONTRIB_DEV, nullptr ) );
314  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mathias Grimmberger" ), CONTRIB_DEV, nullptr ) );
315  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Johan Grip" ), CONTRIB_DEV, nullptr ) );
316  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hildo Guillardi Júnior" ), CONTRIB_DEV, nullptr ) );
317  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Niki Guldbrand" ), CONTRIB_DEV, nullptr ) );
318  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Guy" ), CONTRIB_DEV, nullptr ) );
319  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Zoltan Gyarmati" ), CONTRIB_DEV, nullptr ) );
320 
321  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jonathan Haas" ), CONTRIB_DEV, nullptr ) );
322  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mark Hämmerling" ), CONTRIB_DEV, nullptr ) );
323  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Stefan Hamminga" ), CONTRIB_DEV, nullptr ) );
324  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ben Harris" ), CONTRIB_DEV, nullptr ) );
325  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Lukas F. Hartmann" ), CONTRIB_DEV, nullptr ) );
326  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jakob Haufe" ), CONTRIB_DEV, nullptr ) );
327  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Aylons Hazzud" ), CONTRIB_DEV, nullptr ) );
328  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Stefan Helmert" ), CONTRIB_DEV, nullptr ) );
329  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hartmut Henkel" ), CONTRIB_DEV, nullptr ) );
330  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Brian Henning" ), CONTRIB_DEV, nullptr ) );
331  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Paulo Henrique Silva" ), CONTRIB_DEV, nullptr ) );
332  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hans Henry von Tresckow" ), CONTRIB_DEV, nullptr ) );
333  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Diego Herranz" ), CONTRIB_DEV, nullptr ) );
334  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Hess" ), CONTRIB_DEV, nullptr ) );
335  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mario Hros" ), CONTRIB_DEV, nullptr ) );
336  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Matt Huszagh" ), CONTRIB_DEV, nullptr ) );
337  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Torsten Hüter" ), CONTRIB_DEV, nullptr ) );
338 
339  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "José Ignacio Romero" ), CONTRIB_DEV, nullptr ) );
340  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Inacio" ), CONTRIB_DEV, nullptr ) );
341  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kinichiro Inoguchi" ), CONTRIB_DEV, nullptr ) );
342  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Fabián Inostroza" ), CONTRIB_DEV, nullptr ) );
343  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Vlad Ivanov" ), CONTRIB_DEV, nullptr ) );
344 
345  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "James Jackson" ), CONTRIB_DEV, nullptr ) );
346  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jerry Jacobs" ), CONTRIB_DEV, nullptr ) );
347  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Christian Jacobsen" ), CONTRIB_DEV, nullptr ) );
348  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michal Jahelka" ), CONTRIB_DEV, nullptr ) );
349  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin Janitschke" ), CONTRIB_DEV, nullptr ) );
350  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jonathan Jara-Almonte" ), CONTRIB_DEV, nullptr ) );
351  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Gilbert J.M. Forkel" ), CONTRIB_DEV, nullptr ) );
352  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "José Jorge Enríquez" ), CONTRIB_DEV, nullptr ) );
353  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Franck Jullien" ), CONTRIB_DEV, nullptr ) );
354 
355  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Eeli Kaikkonen" ), CONTRIB_DEV, nullptr ) );
356  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Lajos Kamocsay" ), CONTRIB_DEV, nullptr ) );
357  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Povilas Kanapickas" ), CONTRIB_DEV, nullptr ) );
358  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mikhail Karpenko" ), CONTRIB_DEV, nullptr ) );
359  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kerusey Karyu" ), CONTRIB_DEV, nullptr ) );
360  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michael Kavanagh" ), CONTRIB_DEV, nullptr ) );
361  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Graham Keeth" ), CONTRIB_DEV, nullptr ) );
362  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Yury Khalyavin" ), CONTRIB_DEV, nullptr ) );
363  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Eldar Khayrullin" ), CONTRIB_DEV, nullptr ) );
364  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ingo Kletti" ), CONTRIB_DEV, nullptr ) );
365  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Sylwester Kocjan" ), CONTRIB_DEV, nullptr ) );
366  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Clemens Koller" ), CONTRIB_DEV, nullptr ) );
367  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Asuki Kono" ), CONTRIB_DEV, nullptr ) );
368  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jakub Kozdon" ), CONTRIB_DEV, nullptr ) );
369  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hajo Nils Krabbenhöft" ), CONTRIB_DEV, nullptr ) );
370  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Simon Kueppers" ), CONTRIB_DEV, nullptr ) );
371  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martijn Kuipers" ), CONTRIB_DEV, nullptr ) );
372 
373  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Robbert Lagerweij" ), CONTRIB_DEV, nullptr ) );
374  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dimitris Lampridis" ), CONTRIB_DEV, nullptr ) );
375  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kevin Lannen" ), CONTRIB_DEV, nullptr ) );
376  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mika Laitio" ), CONTRIB_DEV, nullptr ) );
377  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Floris Lambrechts" ), CONTRIB_DEV, nullptr ) );
378  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "lê văn lập" ), CONTRIB_DEV, nullptr ) );
379  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Anton Lazarev" ), CONTRIB_DEV, nullptr ) );
380  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ludovic Léau-mercier" ), CONTRIB_DEV, nullptr ) );
381  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Paul LeoNerd Evens" ), CONTRIB_DEV, nullptr ) );
382  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jonatan Liljedahl" ), CONTRIB_DEV, nullptr ) );
383  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Lunev" ), CONTRIB_DEV, nullptr ) );
384  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrew Lutsenko" ), CONTRIB_DEV, nullptr ) );
385  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mario Luzeiro" ), CONTRIB_DEV, nullptr ) );
386 
387  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Johannes Maibaum" ), CONTRIB_DEV, nullptr ) );
388  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mateusz Majchrzycki" ), CONTRIB_DEV, nullptr ) );
389  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Daniel Majewski" ), CONTRIB_DEV, nullptr ) );
390  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Rachel Mant" ), CONTRIB_DEV, nullptr ) );
391  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Lorenzo Marcantonio" ), CONTRIB_DEV, nullptr ) );
392  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Mattila" ), CONTRIB_DEV, nullptr ) );
393  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Maui" ), CONTRIB_DEV, nullptr ) );
394  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kirill Mavreshko" ), CONTRIB_DEV, nullptr ) );
395  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Miles McCoo" ), CONTRIB_DEV, nullptr ) );
396  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Charles McDowell" ), CONTRIB_DEV, nullptr ) );
397  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Moses McKnight" ), CONTRIB_DEV, nullptr ) );
398  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin McNamara" ), CONTRIB_DEV, nullptr ) );
399  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Cameron McQuinn" ), CONTRIB_DEV, nullptr ) );
400  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ievgenii Meshcheriakov" ), CONTRIB_DEV, nullptr ) );
401  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ashley Mills" ), CONTRIB_DEV, nullptr ) );
402  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Christoph Moench-Tegeder" ), CONTRIB_DEV, nullptr ) );
403  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Peter Montgomery" ), CONTRIB_DEV, nullptr ) );
404  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alejandro García Montoro" ), CONTRIB_DEV, nullptr ) );
405  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Felix Morgner" ), CONTRIB_DEV, nullptr ) );
406  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jan Mrázek" ), CONTRIB_DEV, nullptr ) );
407 
408  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michael Narigon" ), CONTRIB_DEV, nullptr ) );
409  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jon Neal" ), CONTRIB_DEV, nullptr ) );
410  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Bastian Neumann" ), CONTRIB_DEV, nullptr ) );
411  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kristian Nielsen" ), CONTRIB_DEV, nullptr ) );
412  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Érico Nogueira" ), CONTRIB_DEV, nullptr ) );
413  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Allan Nordhøy" ), CONTRIB_DEV, nullptr ) );
414  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Henrik Nyberg" ), CONTRIB_DEV, nullptr ) );
415 
416  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kristoffer Ödmark" ), CONTRIB_DEV, nullptr ) );
417  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Russell Oliver" ), CONTRIB_DEV, nullptr ) );
418  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jason Oster" ), CONTRIB_DEV, nullptr ) );
419 
420  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "luz paz" ), CONTRIB_DEV, nullptr ) );
421  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Miguel Angel Ajo Pelayo" ), CONTRIB_DEV, nullptr ) );
422  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Patrick Pereira" ), CONTRIB_DEV, nullptr ) );
423  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jacobo Aragunde Perez" ), CONTRIB_DEV, nullptr ) );
424  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Matthew Petroff" ), CONTRIB_DEV, nullptr ) );
425  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Johannes Pfister" ), CONTRIB_DEV, nullptr ) );
426  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Christian Pfluger" ), CONTRIB_DEV, nullptr ) );
427  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Brian Piccioni" ), CONTRIB_DEV, nullptr ) );
428  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Nicolas Planel" ), CONTRIB_DEV, nullptr ) );
429  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Carl Poirier" ), CONTRIB_DEV, nullptr ) );
430  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Reece Pollack" ), CONTRIB_DEV, nullptr ) );
431  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alain Portal" ), CONTRIB_DEV, nullptr ) );
432  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrei Pozolotin" ), CONTRIB_DEV, nullptr ) );
433  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Antia Puentes" ), CONTRIB_DEV, nullptr ) );
434  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Heikki Pulkkinen" ), CONTRIB_DEV, nullptr ) );
435 
436  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Morgan Quigley" ), CONTRIB_DEV, nullptr ) );
437 
438  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Barabas Raffai" ), CONTRIB_DEV, nullptr ) );
439  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Urja Rannikko" ), CONTRIB_DEV, nullptr ) );
440  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Joshua Redstone" ), CONTRIB_DEV, nullptr ) );
441  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michele Renda" ), CONTRIB_DEV, nullptr ) );
442  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jean-Samuel Reynaud" ), CONTRIB_DEV, nullptr ) );
443  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dmitry Rezvanov" ), CONTRIB_DEV, nullptr ) );
444  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Simon Richter" ), CONTRIB_DEV, nullptr ) );
445  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Christoph Riehl" ), CONTRIB_DEV, nullptr ) );
446  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Thiadmer Riemersma" ), CONTRIB_DEV, nullptr ) );
447  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Gregor Riepl" ), CONTRIB_DEV, nullptr ) );
448  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "RigoLigoRLC" ), CONTRIB_DEV, nullptr ) );
449  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ola Rinta-Koski" ), CONTRIB_DEV, nullptr ) );
450  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Lubomir Rintel" ), CONTRIB_DEV, nullptr ) );
451  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Érico Rolim" ), CONTRIB_DEV, nullptr ) );
452  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marcus A. Romer" ), CONTRIB_DEV, nullptr ) );
453  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Heiko Rosemann" ), CONTRIB_DEV, nullptr ) );
454  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Fabio Rossi" ), CONTRIB_DEV, nullptr ) );
455  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ian Roth" ), CONTRIB_DEV, nullptr ) );
456 
457  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "J. Morio Sakaguchi" ), CONTRIB_DEV, nullptr ) );
458  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Simon Schaak" ), CONTRIB_DEV, nullptr ) );
459  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ross Schlaikjer" ), CONTRIB_DEV, nullptr ) );
460  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Julius Schmidt" ), CONTRIB_DEV, nullptr ) );
461  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marvin Schmidt" ), CONTRIB_DEV, nullptr ) );
462  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Carsten Schoenert" ), CONTRIB_DEV, nullptr ) );
463  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Simon Schubert" ), CONTRIB_DEV, nullptr ) );
464  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michal Schulz" ), CONTRIB_DEV, nullptr ) );
465  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Adrian Scripca" ), CONTRIB_DEV, nullptr ) );
466  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Pradeepa Senanayake" ), CONTRIB_DEV, nullptr ) );
467  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Serantoni" ), CONTRIB_DEV, nullptr ) );
468  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Frank Severinsen" ), CONTRIB_DEV, nullptr ) );
469  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Cheng Sheng" ), CONTRIB_DEV, nullptr ) );
470  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Shuklin" ), CONTRIB_DEV, nullptr ) );
471  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Slawomir Siudym" ), CONTRIB_DEV, nullptr ) );
472  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Serantoni" ), CONTRIB_DEV, nullptr ) );
473  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Guillaume Simard" ), CONTRIB_DEV, nullptr ) );
474  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin Sivak" ), CONTRIB_DEV, nullptr ) );
475  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mateusz Skowroński" ), CONTRIB_DEV, nullptr ) );
476  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dominik Sliwa" ), CONTRIB_DEV, nullptr ) );
477  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Blake Smith" ), CONTRIB_DEV, nullptr ) );
478  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Rafael Sokolowski" ), CONTRIB_DEV, nullptr ) );
479  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Vesa Solonen" ), CONTRIB_DEV, nullptr ) );
480  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Ronald Sousa" ), CONTRIB_DEV, nullptr ) );
481  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Craig Southeren" ), CONTRIB_DEV, nullptr ) );
482  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Thomas Spindler" ), CONTRIB_DEV, nullptr ) );
483  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Seppe Stas" ), CONTRIB_DEV, nullptr ) );
484  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Bernhard Stegmaier" ), CONTRIB_DEV, nullptr ) );
485  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Michael Steinberg" ), CONTRIB_DEV, nullptr ) );
486  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Marco Sterbik" ), CONTRIB_DEV, nullptr ) );
487  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Stock" ), CONTRIB_DEV, nullptr ) );
488  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Martin Stoilov" ), CONTRIB_DEV, nullptr ) );
489  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hiroki Suenaga" ), CONTRIB_DEV, nullptr ) );
490 
491  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Karl Thorén" ), CONTRIB_DEV, nullptr ) );
492  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Hiroshi Tokita" ), CONTRIB_DEV, nullptr ) );
493 
494  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Vladimir Ur" ), CONTRIB_DEV, nullptr ) );
495  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Matthias Urlichs" ), CONTRIB_DEV, nullptr ) );
496  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Vladimir Uryvaev" ), CONTRIB_DEV, nullptr ) );
497 
498  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Henri Valta" ), CONTRIB_DEV, nullptr ) );
499  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dave Vandenbout" ), CONTRIB_DEV, nullptr ) );
500  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Edwin van den Oetelaar" ), CONTRIB_DEV, nullptr ) );
501  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mark van Doesburg" ), CONTRIB_DEV, nullptr ) );
502  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Fabio Varesano" ), CONTRIB_DEV, nullptr ) );
503  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Benjamin Vernoux" ), CONTRIB_DEV, nullptr ) );
504  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Frank Villaro-Dixon" ), CONTRIB_DEV, nullptr ) );
505  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Forrest Voight" ), CONTRIB_DEV, nullptr ) );
506  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Tormod Volden" ), CONTRIB_DEV, nullptr ) );
507 
508  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Johannes Wågen" ), CONTRIB_DEV, nullptr ) );
509  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Oliver Walters" ), CONTRIB_DEV, nullptr ) );
510  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jonathan Warner" ), CONTRIB_DEV, nullptr ) );
511  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dan Weatherill" ), CONTRIB_DEV, nullptr ) );
512  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Stefan Weber" ), CONTRIB_DEV, nullptr ) );
513  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Simon Wells" ), CONTRIB_DEV, nullptr ) );
514  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Dominik Wernberger" ), CONTRIB_DEV, nullptr ) );
515  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mike Williams" ), CONTRIB_DEV, nullptr ) );
516  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Nick Winters" ), CONTRIB_DEV, nullptr ) );
517  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Adam Wolf" ), CONTRIB_DEV, nullptr ) );
518  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrzej Wolski" ), CONTRIB_DEV, nullptr ) );
519  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Damian Wrobel" ), CONTRIB_DEV, nullptr ) );
520  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrew Wygle" ), CONTRIB_DEV, nullptr ) );
521 
522  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Jiaxun Yang" ), CONTRIB_DEV, nullptr ) );
523  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Robert Yates" ), CONTRIB_DEV, nullptr ) );
524  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Yegor Yefremov" ), CONTRIB_DEV, nullptr ) );
525  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kenta Yonekura" ), CONTRIB_DEV, nullptr ) );
526 
527  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Alexander Zakamaldin" ), CONTRIB_DEV, nullptr ) );
528  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Henner Zeller" ), CONTRIB_DEV, nullptr ) );
529  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Andrew Zonenberg" ), CONTRIB_DEV, nullptr ) );
530  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Karl Zeilhofer" ), CONTRIB_DEV, nullptr ) );
531  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Kevin Zheng" ), CONTRIB_DEV, nullptr ) );
532 
533  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Nick Østergaard" ), CONTRIB_DEV, nullptr ) );
534 
535  // The document writers
536  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Jean-Pierre Charras" ) ) );
537  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Marco Ciampa" ) ) );
538  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Jon Evans" ) ) );
539  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Dick Hollenbeck" ) ) );
540  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Igor Plyatov" ) ) );
541  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Wayne Stambaugh" ) ) );
542  aInfo.AddDocWriter( new CONTRIBUTOR( wxT( "Fabrizio Tappero" ) ) );
543 
544  /* The translators
545  * As category the language to which the translation was done is used
546  */
547  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Martin Kratoška" ),
548  wxEmptyString,
549  wxEmptyString,
550  wxT( "Czech (CS)" ) ) );
551  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Radek Kuznik" ),
552  wxEmptyString,
553  wxEmptyString,
554  wxT( "Czech (CS)" ) ) );
555  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Roman Ondráček" ),
556  wxEmptyString,
557  wxEmptyString,
558  wxT( "Czech (CS)" ) ) );
559  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Jan Straka" ),
560  wxEmptyString,
561  wxEmptyString,
562  wxT( "Czech (CS)" ) ) );
563  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Jan Vykydal" ),
564  wxEmptyString,
565  wxEmptyString,
566  wxT( "Czech (CS)" ) ) );
567  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Jonathan Haas" ),
568  wxEmptyString,
569  wxEmptyString,
570  wxT( "German (DE)" ) ) );
571  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Mark Hämmerling" ),
572  wxEmptyString,
573  wxEmptyString,
574  wxT( "German (DE)" ) ) );
575  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Mathias Neumann" ),
576  wxEmptyString,
577  wxEmptyString,
578  wxT( "German (DE)" ) ) );
579  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Dominik Wernberger" ),
580  wxEmptyString,
581  wxEmptyString,
582  wxT( "German (DE)" ) ) );
583  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Manolis Stefanis" ),
584  wxEmptyString,
585  wxEmptyString,
586  wxT( "Greek (el_GR)" ) ) );
587  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Athanasios Vlastos" ),
588  wxEmptyString,
589  wxEmptyString,
590  wxT( "Greek (el_GR)" ) ) );
591  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Milonas Kostas" ),
592  wxEmptyString,
593  wxEmptyString,
594  wxT( "Greek (el_GR)" ) ) );
595  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Michail Misirlis" ),
596  wxEmptyString,
597  wxEmptyString,
598  wxT( "Greek (el_GR)" ) ) );
599  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Adolfo Jayme Barrientos" ),
600  wxEmptyString,
601  wxEmptyString,
602  wxT( "Spanish (ES)" ) ) );
603  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Roberto Fernandez Bautista" ),
604  wxEmptyString,
605  wxEmptyString,
606  wxT( "Spanish (ES)" ) ) );
607  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Augusto Fraga Giachero" ),
608  wxEmptyString,
609  wxEmptyString,
610  wxT( "Spanish (ES)" ) ) );
611  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Pedro Martin del Valle" ),
612  wxEmptyString,
613  wxEmptyString,
614  wxT( "Spanish (ES)" ) ) );
615  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Iñigo Figuero" ),
616  wxEmptyString,
617  wxEmptyString,
618  wxT( "Spanish (ES)" ) ) );
619  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Iñigo Zuluaga" ),
620  wxEmptyString,
621  wxEmptyString,
622  wxT( "Spanish (ES)" ) ) );
623  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Vesa Solonen" ),
624  wxEmptyString,
625  wxEmptyString,
626  wxT( "Finnish (FI)" ) ) );
627  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Alex Gellen" ),
628  wxEmptyString,
629  wxEmptyString,
630  wxT( "Finnish (FI)" ) ) );
631  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "J. Lavoie" ),
632  wxEmptyString,
633  wxEmptyString,
634  wxT( "Finnish (FI)" ) ) );
635  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Purkka Koodari" ),
636  wxEmptyString,
637  wxEmptyString,
638  wxT( "Finnish (FI)" ) ) );
639  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Ola Rinta-Koski" ),
640  wxEmptyString,
641  wxEmptyString,
642  wxT( "Finnish (FI)" ) ) );
643  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Riku Viitanen" ),
644  wxEmptyString,
645  wxEmptyString,
646  wxT( "Finnish (FI)" ) ) );
647  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Simo Mattila" ),
648  wxEmptyString,
649  wxEmptyString,
650  wxT( "Finnish (FI)" ) ) );
651  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Jean-Pierre Charras" ),
652  wxEmptyString,
653  wxEmptyString,
654  wxT( "French (FR)" ) ) );
655  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Marco Ciampa" ),
656  wxEmptyString,
657  wxEmptyString,
658  wxT( "Italian (IT)" ) ) );
659  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Hiroshi Tokita" ),
660  wxEmptyString,
661  wxEmptyString,
662  wxT( "Japanese (JA)" ) ) );
663  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Kenta Yonekura" ),
664  wxEmptyString,
665  wxEmptyString,
666  wxT( "Japanese (JA)" ) ) );
667  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Ji Yoon Choi" ),
668  wxEmptyString,
669  wxEmptyString,
670  wxT( "Japanese (JA)" ) ) );
671  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Hidemichi Gotou" ),
672  wxEmptyString,
673  wxEmptyString,
674  wxT( "Japanese (JA)" ) ) );
675  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Kaoru Zenyouji" ),
676  wxEmptyString,
677  wxEmptyString,
678  wxT( "Japanese (JA)" ) ) );
679  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Kinichiro Inoguchi" ),
680  wxEmptyString,
681  wxEmptyString,
682  wxT( "Japanese (JA)" ) ) );
683  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Norio Suzuki" ),
684  wxEmptyString,
685  wxEmptyString,
686  wxT( "Japanese (JA)" ) ) );
687  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "starfort-jp" ),
688  wxEmptyString,
689  wxEmptyString,
690  wxT( "Japanese (JA)" ) ) );
691  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "킴슨김랑기" ),
692  wxEmptyString,
693  wxEmptyString,
694  wxT( "Korean (KO)" ) ) );
695  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Ji Yoon Choi" ),
696  wxEmptyString,
697  wxEmptyString,
698  wxT( "Korean (KO)" ) ) );
699  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "jeongsuAn" ),
700  wxEmptyString,
701  wxEmptyString,
702  wxT( "Korean (KO)" ) ) );
703  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "이상수" ),
704  wxEmptyString,
705  wxEmptyString,
706  wxT( "Korean (KO)" ) ) );
707  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "jehunseo" ),
708  wxEmptyString,
709  wxEmptyString,
710  wxT( "Korean (KO)" ) ) );
711  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Uibeom Jung" ),
712  wxEmptyString,
713  wxEmptyString,
714  wxT( "Korean (KO)" ) ) );
715  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "박준언" ),
716  wxEmptyString,
717  wxEmptyString,
718  wxT( "Korean (KO)" ) ) );
719  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "방준영" ),
720  wxEmptyString,
721  wxEmptyString,
722  wxT( "Korean (KO)" ) ) );
723  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "박기정" ),
724  wxEmptyString,
725  wxEmptyString,
726  wxT( "Korean (KO)" ) ) );
727  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "hokim" ),
728  wxEmptyString,
729  wxEmptyString,
730  wxT( "Korean (KO)" ) ) );
731  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "강명구" ),
732  wxEmptyString,
733  wxEmptyString,
734  wxT( "Korean (KO)" ) ) );
735  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "서범기" ),
736  wxEmptyString,
737  wxEmptyString,
738  wxT( "Korean (KO)" ) ) );
739  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Arend-Jan van Hilten" ),
740  wxEmptyString,
741  wxEmptyString,
742  wxT( "Dutch (NL)" ) ) );
743  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "CJ van der Hoeven" ),
744  wxEmptyString,
745  wxEmptyString,
746  wxT( "Dutch (NL)" ) ) );
747  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Pim Jansen" ),
748  wxEmptyString,
749  wxEmptyString,
750  wxT( "Dutch (NL)" ) ) );
751  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Allan Nordhøy" ),
752  wxEmptyString,
753  wxEmptyString,
754  wxT( "Norwegian (NO)" ) ) );
755  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Mateusz Skowroński" ),
756  wxEmptyString,
757  wxEmptyString,
758  wxT( "Polish (PL)" ) ) );
759  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Kerusey Karyu" ),
760  wxEmptyString,
761  wxEmptyString,
762  wxT( "Polish (PL)" ) ) );
763  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Mark Roszko" ),
764  wxEmptyString,
765  wxEmptyString,
766  wxT( "Polish (PL)" ) ) );
767  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "ZbeeGin" ),
768  wxEmptyString,
769  wxEmptyString,
770  wxT( "Polish (PL)" ) ) );
771  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Augusto Fraga Giachero" ),
772  wxEmptyString,
773  wxEmptyString,
774  wxT( "Brazilian Portuguese (PT_BR)" ) ) );
775  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Wellington Terumi Uemura" ),
776  wxEmptyString,
777  wxEmptyString,
778  wxT( "Brazilian Portuguese (PT_BR)" ) ) );
779  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Augusto Fraga Giachero" ),
780  wxEmptyString,
781  wxEmptyString,
782  wxT( "Portuguese (PT)" ) ) );
783  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Renie Marquet" ),
784  wxEmptyString,
785  wxEmptyString,
786  wxT( "Portuguese (PT)" ) ) );
787  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Rafael Silva" ),
788  wxEmptyString,
789  wxEmptyString,
790  wxT( "Portuguese (PT)" ) ) );
791  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Igor Plyatov" ),
792  wxEmptyString,
793  wxEmptyString,
794  wxT( "Russian (RU)" ) ) );
795  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Дмитрий Дёмин" ),
796  wxEmptyString,
797  wxEmptyString,
798  wxT( "Russian (RU)" ) ) );
799  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Andrey Fedorushkov" ),
800  wxEmptyString,
801  wxEmptyString,
802  wxT( "Russian (RU)" ) ) );
803  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Eldar Khayrullin" ),
804  wxEmptyString,
805  wxEmptyString,
806  wxT( "Russian (RU)" ) ) );
807  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Konstantin Baranovskiy" ),
808  wxEmptyString,
809  wxEmptyString,
810  wxT( "Russian (RU)" ) ) );
811  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Axel Henriksson" ),
812  wxEmptyString,
813  wxEmptyString,
814  wxT( "Swedish (SV)" ) ) );
815  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Richard Jonsson" ),
816  wxEmptyString,
817  wxEmptyString,
818  wxT( "Swedish (SV)" ) ) );
819  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Allan Nordhøy" ),
820  wxEmptyString,
821  wxEmptyString,
822  wxT( "Swedish (SV)" ) ) );
823  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Boonchai Kingrungped" ),
824  wxEmptyString,
825  wxEmptyString,
826  wxT( "Thai (TH)" ) ) );
827  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Liu Guang" ),
828  wxEmptyString,
829  wxEmptyString,
830  wxT( "Simplified Chinese (zh_CN)" ) ) );
831  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Taotieren" ),
832  wxEmptyString,
833  wxEmptyString,
834  wxT( "Simplified Chinese (zh_CN)" ) ) );
835  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Dingzhong Chen" ),
836  wxEmptyString,
837  wxEmptyString,
838  wxT( "Simplified Chinese (zh_CN)" ) ) );
839  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "David Chen" ),
840  wxEmptyString,
841  wxEmptyString,
842  wxT( "Simplified Chinese (zh_CN)" ) ) );
843  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Rigo Ligo" ),
844  wxEmptyString,
845  wxEmptyString,
846  wxT( "Simplified Chinese (zh_CN)" ) ) );
847  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Tian Yunhao" ),
848  wxEmptyString,
849  wxEmptyString,
850  wxT( "Simplified Chinese (zh_CN)" ) ) );
851  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "David Chen" ),
852  wxEmptyString,
853  wxEmptyString,
854  wxT( "Traditional Chinese (zh_TW)" ) ) );
855  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "kai chiao chuang" ),
856  wxEmptyString,
857  wxEmptyString,
858  wxT( "Traditional Chinese (zh_TW)" ) ) );
859  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Taotieren" ),
860  wxEmptyString,
861  wxEmptyString,
862  wxT( "Traditional Chinese (zh_TW)" ) ) );
863 
864  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Remy Halvick" ),
865  wxEmptyString,
866  wxEmptyString,
867  wxT( "Other" ) ) );
868 
869  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "David J S Briscoe" ),
870  wxEmptyString,
871  wxEmptyString,
872  wxT( "Other" ) ) );
873 
874  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Dominique Laigle" ),
875  wxEmptyString,
876  wxEmptyString,
877  wxT( "Other" ) ) );
878 
879  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Paul Burke" ),
880  wxEmptyString,
881  wxEmptyString,
882  wxT( "Other" ) ) );
883 
884 
885  // Program credits for 3d models
886  #define LIBRARIANS _( "KiCad Librarian Team" )
887  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Christian Schlüter"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
888  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Rene Poeschl"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
889  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Antonio Vázquez Blanco "), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
890  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "cpresser"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
891  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Daniel Giesbrecht"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
892  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Otavio Augusto Gomes"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
893  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "herostrat"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
894  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Diego Herranz"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
895  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Joel Guittet"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
896  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Aristeidis Kimirtzis"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
897  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Chris Morgan"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
898  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Thomas Pointhuber"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
899  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Evan Shultz"), LIBRARIANS, aInfo.CreateKiBitmap( BITMAPS::library ) ) );
900 
901  #define MODELS_3D_CONTRIBUTION _( "3D models by" )
902  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Scripts by Maui" ),
903  wxT( "https://github.com/easyw" ),
904  wxT( "https://gitlab.com/kicad/libraries/kicad-packages3D-generator" ),
906  aInfo.CreateKiBitmap( BITMAPS::three_d ) ) );
907  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "GitLab contributors" ),
908  wxEmptyString,
909  wxT( "https://gitlab.com/kicad/libraries/kicad-packages3D/-/graphs/master" ),
911  aInfo.CreateKiBitmap( BITMAPS::three_d ) ) );
912 
913  #define SYMBOL_LIB_CONTRIBUTION _( "Symbols by" )
914  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "GitLab contributors" ),
915  wxEmptyString,
916  wxT( "https://gitlab.com/kicad/libraries/kicad-symbols/-/graphs/master" ),
919 
920  #define FOOTPRINT_LIB_CONTRIBUTION _( "Footprints by" )
921  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "Scripts by Thomas Pointhuber" ),
922  wxEmptyString,
923  wxT( "https://gitlab.com/kicad/libraries/kicad-footprint-generator" ),
925  aInfo.CreateKiBitmap( BITMAPS::module ) ) );
926  aInfo.AddLibrarian( new CONTRIBUTOR( wxT( "GitLab contributors" ),
927  wxEmptyString,
928  wxT( "https://gitlab.com/kicad/libraries/kicad-footprints/-/graphs/master" ),
930  aInfo.CreateKiBitmap( BITMAPS::module ) ) );
931 
932  // Program credits for icons
933  #define ICON_CONTRIBUTION _( "Icons by" )
934  aInfo.AddArtist( new CONTRIBUTOR( wxT( "Aleksandr Zyrianov" ),
935  wxEmptyString,
936  wxEmptyString,
937  ICON_CONTRIBUTION ) );
938  aInfo.AddArtist( new CONTRIBUTOR( wxT( "Iñigo Zuluaga" ),
939  wxEmptyString,
940  wxEmptyString,
941  ICON_CONTRIBUTION ) );
942  aInfo.AddArtist( new CONTRIBUTOR( wxT( "Fabrizio Tappero" ),
943  wxEmptyString,
944  wxEmptyString,
945  ICON_CONTRIBUTION ) );
946 
947  // Program credits for package developers.
948  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Steven Falco" ) ) );
949  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Jean-Samuel Reynaud" ) ) );
950  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Bernhard Stegmaier" ) ) );
951  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Adam Wolf" ) ) );
952  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Nick Østergaard" ) ) );
953 }
954 
955 
957 {
959  buildKicadAboutBanner( aParent, info );
960 
961  DIALOG_ABOUT dlg( aParent, info );
962  dlg.ShowModal();
963 }
964 
965 
969 
979 static wxString HtmlHyperlink( const wxString& aUrl, const wxString& aDescription )
980 {
981  wxString hyperlink = wxEmptyString;
982 
983  if( aDescription.IsEmpty() )
984  hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aUrl << wxT( "</a>" );
985  else
986  hyperlink << wxT( "<a href='" ) << aUrl << wxT( "'>" ) << aDescription << wxT( "</a>" );
987 
988  return hyperlink;
989 }
990 
991 
999 static wxString HtmlNewline( const unsigned int aCount )
1000 {
1001  wxString newlineTags = wxEmptyString;
1002 
1003  for( size_t i = 0; i<aCount; ++i )
1004  newlineTags << wxT( "<br>" );
1005 
1006  return newlineTags;
1007 }
bool IsOperatingSystemUnsupported()
Checks if the Operating System is explicitly unsupported and we want to prevent users from sending bu...
Definition: gtk/app.cpp:51
void SetCopyright(const wxString &text)
Definition: aboutinfo.h:99
#define ICON_CONTRIBUTION
#define LIBRARIANS
void AddTranslator(const CONTRIBUTOR *translator)
Definition: aboutinfo.h:74
void AddDocWriter(const CONTRIBUTOR *docwriter)
Definition: aboutinfo.h:56
static wxString HtmlNewline(const unsigned int amount=1)
Create an HTML newline character sequence of aCount.
void SetAppIcon(const wxIcon &aIcon)
Definition: aboutinfo.h:114
An object of this class is meant to be used to store application specific information like who has co...
Definition: aboutinfo.h:44
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106
static void buildKicadAboutBanner(EDA_BASE_FRAME *aParent, ABOUT_APP_INFO &aInfo)
Initializes the ABOUT_APP_INFO object with application specific information.
#define SYMBOL_LIB_CONTRIBUTION
void ShowAboutDialog(EDA_BASE_FRAME *aParent)
#define CONTRIB_DEV
void SetBuildVersion(const wxString &version)
Definition: aboutinfo.h:105
void SetDescription(const wxString &text)
Definition: aboutinfo.h:93
wxString GetBuildVersion()
Get the full KiCad version string.
void SetLibVersion(const wxString &version)
Definition: aboutinfo.h:111
#define MODELS_3D_CONTRIBUTION
Base window classes and related definitions.
#define _(s)
#define LEAD_DEV
void AddArtist(const CONTRIBUTOR *artist)
Definition: aboutinfo.h:68
void SetLicense(const wxString &text)
Definition: aboutinfo.h:96
static wxString HtmlHyperlink(const wxString &url, const wxString &description=wxEmptyString)
Helper functions.
wxString GetBuildDate()
Get the build date as a string.
see class PGM_BASE
void SetBuildDate(const wxString &date)
Definition: aboutinfo.h:108
A contributor, a person which was involved in the development of the application or which has contrib...
Definition: aboutinfo.h:160
The base frame for deriving all KiCad main window classes.
wxBitmap * CreateKiBitmap(BITMAPS aBitmap)
Definition: aboutinfo.h:118
void AddPackager(const CONTRIBUTOR *packager)
Definition: aboutinfo.h:80
The common library.
void AddDeveloper(const CONTRIBUTOR *developer)
Definition: aboutinfo.h:50
void AddLibrarian(const CONTRIBUTOR *aLibrarian)
Definition: aboutinfo.h:62
#define FOOTPRINT_LIB_CONTRIBUTION
About dialog to show application specific information.
Definition: dialog_about.h:53
void SetAppName(const wxString &name)
Definition: aboutinfo.h:102
#define FORMER_DEV