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 <Rafael.Sokolowski@web.de>
5  * Copyright (C) 2010-2018 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  * lang_xx_xpm; // Icons of various national flags
33  * show_3d_xpm; // 3D icon
34  * edit_module_xpm;
35  * icon_kicad_xpm; // Icon of the application
36  */
37 #include <bitmaps.h>
38 #include <build_version.h>
39 #include <common.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-2019 KiCad Developers Team" );
68 
69  /* KiCad build version */
70  wxString version;
71  version << GetBuildVersion()
72 #ifdef DEBUG
73  << ", debug"
74 #else
75  << ", release"
76 #endif
77  << " build";
78 
79  aInfo.SetBuildVersion( version );
80  aInfo.SetBuildDate( GetBuildDate() );
81 
82  /* wxWidgets version */
83  wxString libVersion;
84  libVersion << wxGetLibraryVersionInfo().GetVersionString();
85 
86  /* Unicode or ANSI version */
87 #if wxUSE_UNICODE
88  libVersion << wxT( " Unicode " );
89 #else
90  libVersion << wxT( " ANSI " );
91 #endif
92 
93  // Just in case someone builds KiCad with the platform native of Boost instead of
94  // the version included with the KiCad source.
95  libVersion << "and Boost " << ( BOOST_VERSION / 100000 ) << "."
96  << ( BOOST_VERSION / 100 % 1000 ) << "." << ( BOOST_VERSION % 100 )
97  << "\n";
98 
99  // Operating System Information
100 
101  wxPlatformInfo platformInfo;
102 
103  libVersion << "Platform: " << wxGetOsDescription() << ", " << platformInfo.GetArchName();
104 
105  aInfo.SetLibVersion( libVersion );
106 
107 
108  /* info/description part HTML formatted */
109 
110  wxString description;
111 
112  /* short description */
113  description << "<p>";
114  description << "<b><u>"
115  << _( "Description" )
116  << "</u></b>"; // bold & underlined font for caption
117 
118  description << "<p>"
119  << _( "The KiCad EDA Suite is a set of open source applications for the "
120  "creation of electronic schematics and printed circuit boards." )
121  << "</p>";
122 
123  description << "</p>";
124 
125  /* websites */
126  description << "<p><b><u>"
127  << _( "KiCad on the web" )
128  << "</u></b>"; // bold & underlined font for caption
129 
130  // bullet-ed list with some http links
131  description << "<ul>";
132  description << "<li>"
133  << _( "The official KiCad website - " )
134  << HtmlHyperlink( "http://www.kicad-pcb.org" )
135  << "</li>";
136  description << "<li>"
137  << _( "Developer website on Launchpad - " )
138  << HtmlHyperlink( "https://launchpad.net/kicad" )
139  << "</li>";
140 
141  description << "<li>"
142  << _("Official KiCad library repositories - " )
143  << HtmlHyperlink( "https://kicad.github.io" )
144  << "</li>";
145 
146  description << "</ul></p>";
147 
148  description << "<p><b><u>"
149  << _( "Bug tracker" )
150  << "</u></b>"; // bold & underlined font caption
151 
152  // bullet-ed list with some http links
153  description << "<ul>";
154  description << "<li>"
155  << _( "Report or examine bugs - " )
156  << HtmlHyperlink( "https://bugs.launchpad.net/kicad/+bugs?orderby=-id&start=0",
157  "https://bugs.launchpad.net/kicad" )
158  << "</li>";
159  description << "</ul></p>";
160 
161  description << "<p><b><u>"
162  << _( "KiCad user's groups and community" )
163  << "</u></b>"; // bold & underlined font caption
164 
165  description << "<ul>";
166  description << "<li>"
167  << _( "KiCad forum - " )
168  << HtmlHyperlink( "https://forum.kicad.info" )
169  << "</li>";
170 
171  description << "</ul></p>";
172 
173  aInfo.SetDescription( description );
174 
175 
176  // License information also HTML formatted:
177  wxString license;
178  license
179  << "<div align='center'>"
180  << HtmlNewline( 4 )
181  << _( "The complete KiCad EDA Suite is released under the" ) << HtmlNewline( 2 )
182  << HtmlHyperlink( "http://www.gnu.org/licenses",
183  _( "GNU Affero General Public License (AGPL) version 3 or any later version" ) )
184  << "</div>";
185 
186  aInfo.SetLicense( license );
187 
188 
189  /* A contributor consists of the following information:
190  * Mandatory:
191  * - Name
192  * Optional:
193  * - EMail address
194  * - Category
195  * - Category specific icon
196  *
197  * All contributors of the same category will be enumerated under this category
198  * which should be represented by the same icon.
199  */
200 
201  // The core developers
202  aInfo.AddDeveloper( new CONTRIBUTOR( "Jean-Pierre Charras" ) );
203  aInfo.AddDeveloper( new CONTRIBUTOR( "Dick Hollenbeck" ) );
204  aInfo.AddDeveloper( new CONTRIBUTOR( "Wayne Stambaugh" ) );
205 
206  // alphabetically by last name after main 3 above:
207  aInfo.AddDeveloper( new CONTRIBUTOR( "Frank Bennett" ) );
208  aInfo.AddDeveloper( new CONTRIBUTOR( "Cirilo Bernardo" ) );
209  aInfo.AddDeveloper( new CONTRIBUTOR( "Kevin Cozens" ) );
210  aInfo.AddDeveloper( new CONTRIBUTOR( "Jonas Diemer" ) );
211  aInfo.AddDeveloper( new CONTRIBUTOR( "Jon Evans" ) );
212  aInfo.AddDeveloper( new CONTRIBUTOR( "Seth Hillbrand" ) );
213  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Torsten Hüter" ) ) );
214  aInfo.AddDeveloper( new CONTRIBUTOR( "Jerry Jacobs" ) );
215  aInfo.AddDeveloper( new CONTRIBUTOR( "Mario Luzeiro" ) );
216  aInfo.AddDeveloper( new CONTRIBUTOR( "Daniel Majewski" ) );
217  aInfo.AddDeveloper( new CONTRIBUTOR( "Lorenzo Marcantonio" ) );
218  aInfo.AddDeveloper( new CONTRIBUTOR( "Marco Mattila" ) );
219  aInfo.AddDeveloper( new CONTRIBUTOR( "Ian McInerney" ) );
220  aInfo.AddDeveloper( new CONTRIBUTOR( "Russell Oliver" ) );
221  aInfo.AddDeveloper( new CONTRIBUTOR( "Alexis Lockwood" ) );
222  aInfo.AddDeveloper( new CONTRIBUTOR( "Miguel Angel Ajo Pelayo" ) );
223  aInfo.AddDeveloper( new CONTRIBUTOR( "Jacobo Aragunde Perez" ) );
224  aInfo.AddDeveloper( new CONTRIBUTOR( "Simon Richter" ) );
225  aInfo.AddDeveloper( new CONTRIBUTOR( "Mark Roszko" ) );
226  aInfo.AddDeveloper( new CONTRIBUTOR( "Marco Serantoni" ) );
227  aInfo.AddDeveloper( new CONTRIBUTOR( "Brian Sidebotham" ) );
228  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Mateusz Skowroński" ) ) );
229  aInfo.AddDeveloper( new CONTRIBUTOR( "Rafael Sokolowski" ) );
230  aInfo.AddDeveloper( new CONTRIBUTOR( "Vesa Solonen" ) );
231  aInfo.AddDeveloper( new CONTRIBUTOR( "Bernhard Stegmaier" ) );
232  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Orson (Maciej Sumiński)" ) ) );
233  aInfo.AddDeveloper( new CONTRIBUTOR( "Oliver Walters" ) );
234  aInfo.AddDeveloper( new CONTRIBUTOR( "Tomasz Wlostowski" ) );
235  aInfo.AddDeveloper( new CONTRIBUTOR( "Adam Wolf" ) );
236  aInfo.AddDeveloper( new CONTRIBUTOR( "Jeff Young" ) );
237  aInfo.AddDeveloper( new CONTRIBUTOR( "Alexander Zakamaldin" ) );
238  aInfo.AddDeveloper( new CONTRIBUTOR( "Henner Zeller" ) );
239  aInfo.AddDeveloper( new CONTRIBUTOR( "Andrew Zonenberg" ) );
240  aInfo.AddDeveloper( new CONTRIBUTOR( wxT( "Nick Østergaard" ) ) );
241 
242  // The document writers
243  aInfo.AddDocWriter( new CONTRIBUTOR( "Jean-Pierre Charras" ) );
244  aInfo.AddDocWriter( new CONTRIBUTOR( "Marco Ciampa" ) );
245  aInfo.AddDocWriter( new CONTRIBUTOR( "Dick Hollenbeck" ) );
246  aInfo.AddDocWriter( new CONTRIBUTOR( "Igor Plyatov" ) );
247  aInfo.AddDocWriter( new CONTRIBUTOR( "Wayne Stambaugh" ) );
248  aInfo.AddDocWriter( new CONTRIBUTOR( "Fabrizio Tappero" ) );
249 
250  /* The translators
251  * As category the language to which the translation was done is used
252  * and as icon the national flag of the corresponding country.
253  */
254  aInfo.AddTranslator( new CONTRIBUTOR( "Robert Buj",
255  wxEmptyString,
256  wxEmptyString,
257  "Catalan (CA)",
258  aInfo.CreateKiBitmap( lang_ca_xpm ) ) );
259  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Martin Kratoška" ),
260  wxEmptyString,
261  wxEmptyString,
262  "Czech (CZ)",
263  aInfo.CreateKiBitmap( lang_cs_xpm ) ) );
264  aInfo.AddTranslator( new CONTRIBUTOR( "Jerry Jacobs",
265  wxEmptyString,
266  wxEmptyString,
267  "Dutch (NL)",
268  aInfo.CreateKiBitmap( lang_nl_xpm ) ) );
269  aInfo.AddTranslator( new CONTRIBUTOR( "Vesa Solonen",
270  wxEmptyString,
271  wxEmptyString,
272  "Finnish (FI)",
273  aInfo.CreateKiBitmap( lang_fi_xpm ) ) );
274  aInfo.AddTranslator( new CONTRIBUTOR( "Jean-Pierre Charras",
275  wxEmptyString,
276  wxEmptyString,
277  "French (FR)",
278  aInfo.CreateKiBitmap( lang_fr_xpm ) ) );
279  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Mateusz Skowroński" ),
280  wxEmptyString,
281  wxEmptyString,
282  "Polish (PL)",
283  aInfo.CreateKiBitmap( lang_pl_xpm ) ) );
284  aInfo.AddTranslator( new CONTRIBUTOR( "Kerusey Karyu",
285  wxEmptyString,
286  wxEmptyString,
287  "Polish (PL)",
288  aInfo.CreateKiBitmap( lang_pl_xpm ) ) );
289  aInfo.AddTranslator( new CONTRIBUTOR( "Renie Marquet",
290  wxEmptyString,
291  wxEmptyString,
292  "Portuguese (PT)",
293  aInfo.CreateKiBitmap( lang_pt_xpm ) ) );
294  aInfo.AddTranslator( new CONTRIBUTOR( "Igor Plyatov",
295  wxEmptyString,
296  wxEmptyString,
297  "Russian (RU)",
298  aInfo.CreateKiBitmap( lang_ru_xpm ) ) );
299  aInfo.AddTranslator( new CONTRIBUTOR( "Andrey Fedorushkov",
300  wxEmptyString,
301  wxEmptyString,
302  "Russian (RU)",
303  aInfo.CreateKiBitmap( lang_ru_xpm ) ) );
304  aInfo.AddTranslator( new CONTRIBUTOR( "Eldar Khayrullin",
305  wxEmptyString,
306  wxEmptyString,
307  "Russian (RU)",
308  aInfo.CreateKiBitmap( lang_ru_xpm ) ) );
309  aInfo.AddTranslator( new CONTRIBUTOR( "Pedro Martin del Valle",
310  wxEmptyString,
311  wxEmptyString,
312  "Spanish (ES)",
313  aInfo.CreateKiBitmap( lang_es_xpm ) ) );
314  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Iñigo Zuluaga" ),
315  wxEmptyString,
316  wxEmptyString,
317  "Spanish (ES)",
318  aInfo.CreateKiBitmap( lang_es_xpm ) ) );
319  aInfo.AddTranslator( new CONTRIBUTOR( wxT( "Iñigo Figuero" ),
320  wxEmptyString,
321  wxEmptyString,
322  "Spanish (ES)",
323  aInfo.CreateKiBitmap( lang_es_xpm ) ) );
324  aInfo.AddTranslator( new CONTRIBUTOR( "Rafael Sokolowski",
325  wxEmptyString,
326  wxEmptyString,
327  "German (DE)",
328  aInfo.CreateKiBitmap( lang_de_xpm ) ) );
329  aInfo.AddTranslator( new CONTRIBUTOR( "Kenta Yonekura",
330  wxEmptyString,
331  wxEmptyString,
332  "Japanese (JA)",
333  aInfo.CreateKiBitmap( lang_jp_xpm ) ) );
334  aInfo.AddTranslator( new CONTRIBUTOR( "Manolis Stefanis",
335  wxEmptyString,
336  wxEmptyString,
337  "Greek (el_GR)",
338  aInfo.CreateKiBitmap( lang_gr_xpm ) ) );
339  aInfo.AddTranslator( new CONTRIBUTOR( "Athanasios Vlastos",
340  wxEmptyString,
341  wxEmptyString,
342  "Greek (el_GR)",
343  aInfo.CreateKiBitmap( lang_gr_xpm ) ) );
344  aInfo.AddTranslator( new CONTRIBUTOR( "Milonas Kostas",
345  wxEmptyString,
346  wxEmptyString,
347  "Greek (el_GR)",
348  aInfo.CreateKiBitmap( lang_gr_xpm ) ) );
349  aInfo.AddTranslator( new CONTRIBUTOR( "Michail Misirlis",
350  wxEmptyString,
351  wxEmptyString,
352  "Greek (el_GR)",
353  aInfo.CreateKiBitmap( lang_gr_xpm ) ) );
354  aInfo.AddTranslator( new CONTRIBUTOR( "Massimo Cioce",
355  wxEmptyString,
356  wxEmptyString,
357  "Italian (IT)",
358  aInfo.CreateKiBitmap( lang_it_xpm ) ) );
359  aInfo.AddTranslator( new CONTRIBUTOR( "Marco Ciampa",
360  wxEmptyString,
361  wxEmptyString,
362  "Italian (IT)",
363  aInfo.CreateKiBitmap( lang_it_xpm ) ) );
364  aInfo.AddTranslator( new CONTRIBUTOR( "Evgeniy Ivanov",
365  wxEmptyString,
366  wxEmptyString,
367  "Bulgarian (BG)",
368  aInfo.CreateKiBitmap( lang_bg_xpm ) ) );
369  aInfo.AddTranslator( new CONTRIBUTOR( "Liu Guang",
370  wxEmptyString,
371  wxEmptyString,
372  "Simplified Chinese (zh_CN)",
373  aInfo.CreateKiBitmap( lang_zh_xpm ) ) );
374  aInfo.AddTranslator( new CONTRIBUTOR( "Taotieren",
375  wxEmptyString,
376  wxEmptyString,
377  "Simplified Chinese (zh_CN)",
378  aInfo.CreateKiBitmap( lang_zh_xpm ) ) );
379 
380  // Maintainer who helper in translations, but not in a specific translation
381  #define OTHERS_IN_TRANSLATION _( "Others" )
382  aInfo.AddTranslator( new CONTRIBUTOR( "Remy Halvick",
383  wxEmptyString,
384  wxEmptyString,
386  aInfo.AddTranslator( new CONTRIBUTOR( "David Briscoe",
387  wxEmptyString,
388  wxEmptyString,
390  aInfo.AddTranslator( new CONTRIBUTOR( "Dominique Laigle",
391  wxEmptyString,
392  wxEmptyString,
394  aInfo.AddTranslator( new CONTRIBUTOR( "Paul Burke",
395  wxEmptyString,
396  wxEmptyString,
398 
399  // Program credits for icons
400  #define ICON_CONTRIBUTION _( "Icons by" )
401  aInfo.AddArtist( new CONTRIBUTOR( wxT( "Iñigo Zuluaga" ),
402  wxEmptyString,
403  wxEmptyString,
405  aInfo.CreateKiBitmap( svg_file_xpm ) ) );
406  aInfo.AddArtist( new CONTRIBUTOR( "Konstantin Baranovskiy",
407  wxEmptyString,
408  wxEmptyString,
410  aInfo.CreateKiBitmap( svg_file_xpm ) ) );
411  aInfo.AddArtist( new CONTRIBUTOR( "Fabrizio Tappero",
412  wxEmptyString,
413  wxEmptyString,
415  aInfo.CreateKiBitmap( svg_file_xpm ) ) );
416 
417  // Program credits for 3d models
418  #define MODELS_3D_CONTRIBUTION _( "3D models by" )
419  aInfo.AddArtist( new CONTRIBUTOR( "GitHub contributors",
420  wxEmptyString,
421  "https://github.com/KiCad/kicad-packages3D/graphs/contributors",
423  aInfo.CreateKiBitmap( three_d_xpm ) ) );
424  aInfo.AddArtist( new CONTRIBUTOR( "Christophe Boschat",
425  wxEmptyString,
426  wxEmptyString,
428  aInfo.CreateKiBitmap( three_d_xpm ) ) );
429  aInfo.AddArtist( new CONTRIBUTOR( "Renie Marquet",
430  wxEmptyString,
431  wxEmptyString,
433  aInfo.CreateKiBitmap( three_d_xpm ) ) );
434 
435  #define SYMBOL_LIB_CONTRIBUTION _( "Symbols by" )
436  aInfo.AddArtist( new CONTRIBUTOR( "GitHub contributors",
437  wxEmptyString,
438  "https://github.com/KiCad/kicad-symbols/graphs/contributors",
440  aInfo.CreateKiBitmap( new_component_xpm ) ) );
441 
442  #define FOOTPRINT_LIB_CONTRIBUTION _( "Footprints by" )
443  aInfo.AddArtist( new CONTRIBUTOR( "GitHub contributors",
444  wxEmptyString,
445  "https://github.com/KiCad/kicad-footprints/graphs/contributors",
447  aInfo.CreateKiBitmap( edit_module_xpm ) ) );
448 
449  // Program credits for package developers.
450  aInfo.AddPackager( new CONTRIBUTOR( "Jean-Samuel Reynaud" ) );
451  aInfo.AddPackager( new CONTRIBUTOR( "Bernhard Stegmaier" ) );
452  aInfo.AddPackager( new CONTRIBUTOR( "Adam Wolf" ) );
453  aInfo.AddPackager( new CONTRIBUTOR( wxT( "Nick Østergaard" ) ) );
454 }
455 
456 
458 {
459  ABOUT_APP_INFO info;
460  buildKicadAboutBanner( aParent, info );
461 
462  DIALOG_ABOUT dlg( aParent, info );
463  dlg.ShowModal();
464 }
465 
466 
470 
480 static wxString HtmlHyperlink( const wxString& aUrl, const wxString& aDescription )
481 {
482  wxString hyperlink = wxEmptyString;
483 
484  if( aDescription.IsEmpty() )
485  hyperlink << "<a href='" << aUrl << "'>" << aUrl << "</a>";
486  else
487  hyperlink << "<a href='" << aUrl << "'>" << aDescription << "</a>";
488 
489  return hyperlink;
490 }
491 
492 
500 static wxString HtmlNewline( const unsigned int aCount )
501 {
502  wxString newlineTags = wxEmptyString;
503 
504  for( size_t i = 0; i<aCount; ++i )
505  newlineTags << "<br>";
506 
507  return newlineTags;
508 }
void SetCopyright(const wxString &text)
Definition: aboutinfo.h:92
#define ICON_CONTRIBUTION
void AddTranslator(const CONTRIBUTOR *translator)
Definition: aboutinfo.h:68
#define OTHERS_IN_TRANSLATION
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.
PGM_BASE & Pgm()
The global Program "get" accessor.
Definition: kicad.cpp:65
void SetAppIcon(const wxIcon &aIcon)
Definition: aboutinfo.h:107
An object of this class is meant to be used to store application specific information like who has co...
Definition: aboutinfo.h:44
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
wxBitmap * CreateKiBitmap(BITMAP_DEF aBitmap)
Wrapper to manage memory allocation for bitmaps
Definition: aboutinfo.h:111
void ShowAboutDialog(EDA_BASE_FRAME *aParent)
void SetBuildVersion(const wxString &version)
Definition: aboutinfo.h:98
void SetDescription(const wxString &text)
Definition: aboutinfo.h:86
wxString GetBuildVersion()
Function GetBuildVersion Return the build version string.
void SetLibVersion(const wxString &version)
Definition: aboutinfo.h:104
#define MODELS_3D_CONTRIBUTION
Base window classes and related definitions.
#define _(s)
void AddArtist(const CONTRIBUTOR *artist)
Definition: aboutinfo.h:62
void SetLicense(const wxString &text)
Definition: aboutinfo.h:89
static wxString HtmlHyperlink(const wxString &url, const wxString &description=wxEmptyString)
Helper functions.
wxString GetBuildDate()
Function GetBuildDate.
see class PGM_BASE
void SetBuildDate(const wxString &date)
Definition: aboutinfo.h:101
A contributor, a person which was involved in the development of the application or which has contrib...
Definition: aboutinfo.h:152
The base frame for deriving all KiCad main window classes.
size_t i
Definition: json11.cpp:649
void AddPackager(const CONTRIBUTOR *packager)
Definition: aboutinfo.h:74
The common library.
void AddDeveloper(const CONTRIBUTOR *developer)
Definition: aboutinfo.h:50
#define FOOTPRINT_LIB_CONTRIBUTION
About dialog to show application specific information.
Definition: dialog_about.h:40
void SetAppName(const wxString &name)
Definition: aboutinfo.h:95