KiCad PCB EDA Suite
dialog_about.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) 2017 KiCad Developers, see CHANGELOG.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 
26 #include <config.h>
27 
28 // kicad_curl.h must be included before wx headers, to avoid
29 // conflicts for some defines, at least on Windows
30 #ifdef BUILD_GITHUB_PLUGIN
31 #include <curl/curlver.h>
32 #include <kicad_curl/kicad_curl.h>
33 #endif
34 
35 #include <boost/version.hpp>
36 #include <wx/clipbrd.h>
37 #include <wx/msgdlg.h>
38 
39 /* All KiCad icons are linked into shared library 'libbitmaps.a'.
40  * Icons:
41  * preference_xpm; // Icon for 'Developers' tab
42  * editor_xpm; // Icon for 'Doc Writers' tab
43  * palette_xpm; // Icon for 'Artists' tab
44  * language_xpm; // Icon for 'Translators' tab
45  * right_xpm; // Right arrow icon for list items
46  * info_xpm; // Bulb for description tab
47  * tools_xpm; // Sheet of paper icon for license info tab
48  */
49 #include <bitmaps.h>
50 #include <build_version.h>
51 #include <html_messagebox.h>
52 
53 #include "dialog_about.h"
54 
55 
56 /*
57  * Class DIALOG_ABOUT methods
58  */
59 
61  : DIALOG_ABOUT_BASE( aParent ), m_info( aAppInfo )
62 {
63  m_picInformation = KiBitmap( info_xpm );
64  m_picDevelopers = KiBitmap( preference_xpm );
65  m_picDocWriters = KiBitmap( editor_xpm );
66  m_picArtists = KiBitmap( palette_xpm );
67  m_picTranslators = KiBitmap( language_xpm );
68  m_picLicense = KiBitmap( tools_xpm );
69  m_picPackagers = KiBitmap( zip_xpm );
70 
71  if( m_info.GetAppIcon().IsOk() )
72  {
73  SetIcon( m_info.GetAppIcon() );
74  m_bitmapApp->SetBitmap( m_info.GetAppIcon() );
75  }
76  else
77  {
78  wxIcon icon;
79  icon.CopyFromBitmap( KiBitmap( icon_kicad_xpm ) );
80  SetIcon( icon );
81  m_bitmapApp->SetBitmap( icon );
82  }
83 
84  m_staticTextAppTitle->SetLabel( m_info.GetAppName() );
86  m_staticTextBuildVersion->SetLabel( "Version: " + m_info.GetBuildVersion() );
88 
90 
91  GetSizer()->SetSizeHints( this );
92  m_auiNotebook->Update();
93  SetFocus();
94  Centre();
95 }
96 
97 
99 {
100 }
101 
102 
104 {
105  // three columns with vertical and horizontal extra space of two pixels
106  wxFlexGridSizer* fgSizer = new wxFlexGridSizer( 3, 2, 2 );
107  fgSizer->SetFlexibleDirection( wxHORIZONTAL );
108  fgSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
109 
110  return fgSizer;
111 }
112 
113 
115 {
118 
121 
126  m_info.GetPackagers() );
127 
129 }
130 
131 void DIALOG_ABOUT::createNotebookPage( wxAuiNotebook* aParent, const wxString& aCaption,
132  const wxBitmap& aIcon, const CONTRIBUTORS& aContributors )
133 {
134  wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
135 
136  wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( aParent, wxID_ANY,
137  wxDefaultPosition,
138  wxDefaultSize,
139  wxHSCROLL|wxVSCROLL );
140  m_scrolledWindow1->SetScrollRate( 5, 5 );
141 
142  /* Panel for additional space at the left,
143  * but can also be used to show an additional bitmap.
144  */
145  wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
146 
147  wxFlexGridSizer* fgSizer1 = createFlexGridSizer();
148 
149  for( size_t i=0; i<aContributors.GetCount(); ++i )
150  {
151  CONTRIBUTOR* contributor = &aContributors.Item( i );
152 
153  // Icon at first column
154  wxStaticBitmap* m_bitmap1 = createStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
155  fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
156 
157  // Name of contributor at second column
158  if ( contributor->GetName() != wxEmptyString )
159  {
160  wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
161  contributor->GetName(),
162  wxDefaultPosition, wxDefaultSize, 0 );
163  m_staticText1->Wrap( -1 );
164  fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
165  }
166  else
167  {
168  fgSizer1->AddSpacer( 5 );
169  }
170 
171  // Email address of contributor at third column
172  if ( contributor->GetEMail() != wxEmptyString )
173  {
174  wxStaticText* hyperlink = wxStaticTextMail( m_scrolledWindow1,
175  contributor->GetEMail() );
176  fgSizer1->Add( hyperlink, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
177  }
178  else
179  {
180  fgSizer1->AddSpacer( 5 );
181  }
182  }
183 
184  bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
185  bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
186  m_scrolledWindow1->SetSizer( bSizer );
187  m_scrolledWindow1->Layout();
188  bSizer->Fit( m_scrolledWindow1 );
189  aParent->AddPage( m_scrolledWindow1, aCaption, false, aIcon );
190 }
191 
192 
193 void DIALOG_ABOUT::createNotebookPageByCategory(wxAuiNotebook* aParent, const wxString& aCaption,
194  const wxBitmap& aIcon,
195  const CONTRIBUTORS& aContributors)
196 {
197  wxBoxSizer* bSizer = new wxBoxSizer( wxHORIZONTAL );
198 
199  wxScrolledWindow* m_scrolledWindow1 = new wxScrolledWindow( aParent, wxID_ANY,
200  wxDefaultPosition,
201  wxDefaultSize,
202  wxHSCROLL|wxVSCROLL );
203  m_scrolledWindow1->SetScrollRate( 5, 5 );
204 
205  /* Panel for additional space at the left,
206  * but can also be used to show an additional bitmap.
207  */
208  wxPanel* panel1 = new wxPanel( m_scrolledWindow1 );
209 
210  wxFlexGridSizer* fgSizer1 = createFlexGridSizer();
211 
212  for( size_t i=0; i < aContributors.GetCount(); ++i )
213  {
214  CONTRIBUTOR* contributor = &aContributors.Item( i );
215 
216  wxBitmap* icon = contributor->GetIcon();
217  wxString category = contributor->GetCategory();
218 
219  /* to construct the next row we expect to have
220  * a category and a contributor that was not considered up to now
221  */
222  if( ( category != wxEmptyString ) && !( contributor->IsChecked() ) )
223  {
224  // Icon at first column
225  wxStaticBitmap* m_bitmap1 = createStaticBitmap( m_scrolledWindow1, icon );
226  fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
227 
228  // Category name at second column
229  wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
230  contributor->GetCategory() + wxT( ":" ),
231  wxDefaultPosition, wxDefaultSize, 0 );
232  m_staticText1->SetFont( wxFont( -1, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false,
233  wxEmptyString ) ); // bold font
234  m_staticText1->Wrap( -1 );
235  fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
236 
237  // Nothing at third column
238  fgSizer1->AddSpacer( 5 );
239 
240  // Now, all contributors of the same category will follow
241  for( size_t j=0; j < aContributors.GetCount(); ++j )
242  {
243  CONTRIBUTOR* sub_contributor = &aContributors.Item( j );
244 
245  if ( sub_contributor->GetCategory() == category )
246  {
247  // First column is empty
248  fgSizer1->AddSpacer(5);
249 
250  // Name of contributor at second column
251  wxStaticText* m_staticText2 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
252  wxT(" • ") + sub_contributor->GetName(),
253  wxDefaultPosition,
254  wxDefaultSize, 0 );
255  m_staticText1->Wrap( -1 );
256  fgSizer1->Add( m_staticText2, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
257 
258  // Email address of contributor at third column
259  if( sub_contributor->GetEMail() != wxEmptyString )
260  {
261  wxStaticText* mail = wxStaticTextMail( m_scrolledWindow1,
262  sub_contributor->GetEMail() );
263  fgSizer1->Add( mail, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
264  }
265  else
266  {
267  fgSizer1->AddSpacer( 5 );
268  }
269 
270  /* this contributor was added to the GUI,
271  * thus can be ignored next time
272  */
273  sub_contributor->SetChecked( true );
274  }
275  }
276  }
277  else
278  {
279  continue;
280  }
281  }
282 
283  /* Now, lets list the remaining contributors that have not been considered
284  * because they were not assigned to any category.
285  */
286  for ( size_t k=0; k < aContributors.GetCount(); ++k )
287  {
288  CONTRIBUTOR* contributor = &aContributors.Item( k );
289 
290  if ( contributor->IsChecked() )
291  continue;
292 
293  // Icon at first column
294  wxStaticBitmap* m_bitmap1 = createStaticBitmap( m_scrolledWindow1, contributor->GetIcon() );
295  fgSizer1->Add( m_bitmap1, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, 5 );
296 
297  // Name of contributor at second column
298  if( contributor->GetName() != wxEmptyString )
299  {
300  wxStaticText* m_staticText1 = new wxStaticText( m_scrolledWindow1, wxID_ANY,
301  contributor->GetName(),
302  wxDefaultPosition, wxDefaultSize, 0 );
303  m_staticText1->Wrap( -1 );
304  fgSizer1->Add( m_staticText1, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
305  }
306  else
307  {
308  fgSizer1->AddSpacer( 5 );
309  }
310 
311  // Email address of contributor at third column
312  if ( contributor->GetEMail() != wxEmptyString )
313  {
314  wxStaticText* mail = wxStaticTextMail( m_scrolledWindow1,
315  contributor->GetEMail() );
316  fgSizer1->Add( mail, 0, wxALIGN_LEFT|wxBOTTOM, 2 );
317  }
318  else
319  {
320  fgSizer1->AddSpacer( 5 );
321  }
322  }
323 
324  bSizer->Add( panel1, 1, wxEXPAND|wxALL, 10 );
325  bSizer->Add( fgSizer1, 7, wxEXPAND|wxALL, 10 ); // adjust width of panel with first int value
326  m_scrolledWindow1->SetSizer( bSizer );
327  m_scrolledWindow1->Layout();
328  bSizer->Fit( m_scrolledWindow1 );
329  aParent->AddPage( m_scrolledWindow1, aCaption, false, aIcon );
330 }
331 
332 
333 void DIALOG_ABOUT::createNotebookHtmlPage( wxAuiNotebook* aParent, const wxString& aCaption,
334  const wxBitmap& aIcon, const wxString& html )
335 {
336  wxPanel* panel = new wxPanel( aParent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
337  wxTAB_TRAVERSAL );
338 
339  wxBoxSizer* bSizer = new wxBoxSizer( wxVERTICAL );
340 
341  wxString htmlPage = wxEmptyString, htmlContent = html;
342 
343  // to have a unique look background color for HTML pages is set to the default as it is
344  // used for all the other widgets
345  wxString htmlColor = ( this->GetBackgroundColour() ).GetAsString( wxC2S_HTML_SYNTAX );
346 
347  // beginning of HTML structure
348  htmlPage.Append( wxT( "<html><body bgcolor='" ) + htmlColor + wxT( "'>" ) );
349 
350  htmlPage.Append( htmlContent );
351 
352  // end of HTML structure indicated by closing tags
353  htmlPage.Append( wxT( "</body></html>" ) );
354 
355  // the HTML page is going to be created with previously created HTML content
356  wxHtmlWindow* htmlWindow = new wxHtmlWindow( panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
357  wxHW_SCROLLBAR_AUTO|wxHW_NO_SELECTION );
358 
359  // HTML font set to font properties as they are used for widgets to have an unique look
360  // under different platforms with HTML
361  wxFont font = this->GetFont();
362  htmlWindow->SetStandardFonts( font.GetPointSize(), font.GetFaceName(), font.GetFaceName() );
363  htmlWindow->SetPage( htmlPage );
364 
365  // the HTML window shall not be used to open external links, thus this task is delegated
366  // to users default browser
367  htmlWindow->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED,
368  wxHtmlLinkEventHandler( DIALOG_ABOUT::onHtmlLinkClicked ), NULL, this );
369 
370  // no additional space around the HTML window as it is also the case by the other notebook pages
371  bSizer->Add( htmlWindow, 1, wxALL|wxEXPAND, 0 );
372  panel->SetSizer( bSizer );
373  panel->Layout();
374  bSizer->Fit( panel );
375  aParent->AddPage( panel, aCaption, false, aIcon );
376 }
377 
378 
379 wxStaticText* DIALOG_ABOUT::wxStaticTextMail(wxScrolledWindow* aParent, const wxString& aEmail)
380 {
381  wxStaticText* text = new wxStaticText( aParent, wxID_ANY,
382  wxT( "<" ) + aEmail + wxT( ">" ) );
383 
384  return text;
385 }
386 
387 
388 wxStaticBitmap* DIALOG_ABOUT::createStaticBitmap(wxScrolledWindow* aParent, wxBitmap* aIcon)
389 {
390  wxStaticBitmap* bitmap = new wxStaticBitmap( aParent, wxID_ANY, wxNullBitmap,
391  wxDefaultPosition, wxDefaultSize, 0 );
392 
393  if( aIcon )
394  {
395  bitmap->SetBitmap( *aIcon );
396  }
397  else
398  {
399  bitmap->SetBitmap( KiBitmap( right_xpm ) );
400  }
401 
402  return bitmap;
403 }
404 
405 
406 void DIALOG_ABOUT::onHtmlLinkClicked( wxHtmlLinkEvent& event )
407 {
408  ::wxLaunchDefaultBrowser( event.GetLinkInfo().GetHref() );
409 }
410 
411 
412 void DIALOG_ABOUT::buildVersionInfoData( wxString& aMsg, bool aFormatHtml )
413 {
414  // DO NOT translate information in the msg_version string
415 
416  wxString eol = aFormatHtml ? "<br>" : "\n";
417  wxString indent4 = aFormatHtml ? "&nbsp;&nbsp;&nbsp;&nbsp;" : " ";
418 
419  #define ON "ON" << eol
420  #define OFF "OFF" << eol
421 
422  wxPlatformInfo platform;
423  aMsg << "Application: " << m_info.GetAppName() << eol;
424  aMsg << "Version: " << m_info.GetBuildVersion() << eol;
425  aMsg << "Libraries:" << eol;
426  aMsg << indent4 << wxGetLibraryVersionInfo().GetVersionString() << eol;
427 #ifdef BUILD_GITHUB_PLUGIN
428  aMsg << indent4 << KICAD_CURL::GetVersion() << eol;
429 #endif
430  aMsg << "Platform: " << wxGetOsDescription() << ", "
431  << platform.GetArchName() << ", "
432  << platform.GetEndiannessName() << ", "
433  << platform.GetPortIdName() << eol;
434 
435  aMsg << "Build Info:" << eol;
436  aMsg << indent4 << "wxWidgets: " << wxVERSION_NUM_DOT_STRING << " (";
437  aMsg << __WX_BO_UNICODE __WX_BO_STL __WX_BO_WXWIN_COMPAT_2_8 ")" << eol;
438 
439  aMsg << indent4 << "Boost: " << ( BOOST_VERSION / 100000 ) << wxT( "." )
440  << ( BOOST_VERSION / 100 % 1000 ) << wxT( "." )
441  << ( BOOST_VERSION % 100 ) << eol;
442 
443 #ifdef BUILD_GITHUB_PLUGIN
444  aMsg << indent4 << "Curl: " << LIBCURL_VERSION << eol;
445 #endif
446 
447  aMsg << indent4 << "KiCad compiler: ";
448 #if defined(__clang__)
449  aMsg << "Clang " << __clang_major__ << "." << __clang_minor__ << "." << __clang_patchlevel__;
450 #elif defined(__GNUG__)
451  aMsg << "GCC " << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__;
452 #elif defined(_MSC_VER)
453  aMsg << "Visual C++ " << _MSC_VER;
454 #elif defined(__INTEL_COMPILER)
455  aMsg << "Intel C++ " << __INTEL_COMPILER;
456 #else
457  aMsg << "Other Compiler ";
458 #endif
459 
460 #if defined(__GXX_ABI_VERSION)
461  aMsg << " with C++ ABI " << __GXX_ABI_VERSION << eol;
462 #else
463  aMsg << " without C++ ABI\n";
464 #endif
465 
466  // Add build settings config (build options):
467 
468  aMsg << "Build settings:" << eol;
469 
470  aMsg << indent4 << "USE_WX_GRAPHICS_CONTEXT=";
471 #ifdef USE_WX_GRAPHICS_CONTEXT
472  aMsg << ON;
473 #else
474  aMsg << OFF;
475 #endif
476 
477  aMsg << indent4 << "USE_WX_OVERLAY=";
478 #ifdef USE_WX_OVERLAY
479  aMsg << ON;
480 #else
481  aMsg << OFF;
482 #endif
483 
484  aMsg << indent4 << "KICAD_SCRIPTING=";
485 #ifdef KICAD_SCRIPTING
486  aMsg << ON;
487 #else
488  aMsg << OFF;
489 #endif
490 
491  aMsg << indent4 << "KICAD_SCRIPTING_MODULES=";
492 #ifdef KICAD_SCRIPTING_MODULES
493  aMsg << ON;
494 #else
495  aMsg << OFF;
496 #endif
497 
498  aMsg << indent4 << "KICAD_SCRIPTING_WXPYTHON=";
499 #ifdef KICAD_SCRIPTING_WXPYTHON
500  aMsg << ON;
501 #else
502  aMsg << OFF;
503 #endif
504 
505  aMsg << indent4 << "KICAD_SCRIPTING_ACTION_MENU=";
506 #ifdef KICAD_SCRIPTING_ACTION_MENU
507  aMsg << ON;
508 #else
509  aMsg << OFF;
510 #endif
511 
512  aMsg << indent4 << "BUILD_GITHUB_PLUGIN=";
513 #ifdef BUILD_GITHUB_PLUGIN
514  aMsg << ON;
515 #else
516  aMsg << OFF;
517 #endif
518 
519  aMsg << indent4 << "KICAD_USE_OCE=";
520 #ifdef KICAD_USE_OCE
521  aMsg << ON;
522 #else
523  aMsg << OFF;
524 #endif
525 }
526 
527 
528 void DIALOG_ABOUT::onShowVersionInfo( wxCommandEvent& event )
529 {
530  wxString msg_version;
531  buildVersionInfoData( msg_version, true );
532 
533  HTML_MESSAGE_BOX dlg( this, _( "Version Info" ), wxDefaultPosition,
534  wxSize( 550, 500 ) );
535 
536  dlg.AddHTML_Text( msg_version );
537  dlg.ShowModal();
538 }
539 
540 
541 void DIALOG_ABOUT::onCopyVersionInfo( wxCommandEvent& event )
542 {
543  if( !wxTheClipboard->Open() )
544  {
545  wxMessageBox( _( "Could not open clipboard to write version information." ),
546  _( "Clipboard Error" ), wxOK | wxICON_EXCLAMATION, this );
547  return;
548  }
549 
550  wxString msg_version;
551  buildVersionInfoData( msg_version, false );
552 
553  wxTheClipboard->SetData( new wxTextDataObject( msg_version ) );
554  wxTheClipboard->Close();
555  m_btCopyVersionInfo->SetLabel( _( "Copied..." ) );
556 }
wxFlexGridSizer * createFlexGridSizer()
wxAuiNotebook * m_auiNotebook
wxBitmap m_picDevelopers
Definition: dialog_about.h:46
CONTRIBUTORS GetTranslators()
Definition: aboutinfo.h:81
ABOUT_APP_INFO m_info
Definition: dialog_about.h:53
wxString & GetLibVersion()
Definition: aboutinfo.h:100
DIALOG_ABOUT(EDA_BASE_FRAME *aParent, ABOUT_APP_INFO &aAppInfo)
wxStaticText * m_staticTextAppTitle
void SetChecked(bool status)
Definition: aboutinfo.h:157
wxString & GetCategory()
Definition: aboutinfo.h:155
wxString & GetName()
Definition: aboutinfo.h:153
void createNotebookPageByCategory(wxAuiNotebook *aParent, const wxString &aCaption, const wxBitmap &aIcon, const CONTRIBUTORS &aContributors)
wxBitmap m_picPackagers
Definition: dialog_about.h:50
#define OFF
void createNotebooks()
wxString & GetBuildVersion()
Definition: aboutinfo.h:97
wxStaticText * m_staticTextLibVersion
wxIcon & GetAppIcon()
Definition: aboutinfo.h:103
An object of this class is meant to be used to store application specific information like who has co...
Definition: aboutinfo.h:42
wxStaticBitmap * m_bitmapApp
wxString & GetLicense()
Definition: aboutinfo.h:88
void buildVersionInfoData(wxString &aMsg, bool aFormatHtml)
build the version info message
wxStaticText * wxStaticTextMail(wxScrolledWindow *aParent, const wxString &email)
wxBitmap m_picDocWriters
Definition: dialog_about.h:47
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Function KiBitmap constructs a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:36
wxBitmap m_picArtists
Definition: dialog_about.h:48
CONTRIBUTORS GetDocWriters()
Definition: aboutinfo.h:79
wxStaticText * m_staticTextBuildVersion
virtual void onCopyVersionInfo(wxCommandEvent &event) override
wxString & GetAppName()
Definition: aboutinfo.h:94
void onHtmlLinkClicked(wxHtmlLinkEvent &event)
CONTRIBUTORS GetArtists()
Definition: aboutinfo.h:80
wxBitmap m_picTranslators
Definition: dialog_about.h:49
Subclass of DIALOG_DISPLAY_HTML_TEXT_BASE, which is generated by wxFormBuilder.
void createNotebookHtmlPage(wxAuiNotebook *aParent, const wxString &aCaption, const wxBitmap &aIcon, const wxString &aHtmlMessage)
wxString GetCopyright()
Definition: aboutinfo.h:91
wxStaticText * m_staticTextCopyright
wxBitmap m_picInformation
Definition: dialog_about.h:45
Class HTML_MESSAGE_BOX.
wxBitmap m_picLicense
Definition: dialog_about.h:51
wxString & GetEMail()
Definition: aboutinfo.h:154
wxStaticBitmap * createStaticBitmap(wxScrolledWindow *aParent, wxBitmap *icon)
CONTRIBUTORS GetPackagers()
Definition: aboutinfo.h:82
static const char * GetVersion()
Function GetVersion wrapper for curl_version().
Definition: kicad_curl.h:93
wxBitmap * GetIcon()
Definition: aboutinfo.h:156
CONTRIBUTORS GetDevelopers()
Definition: aboutinfo.h:78
Class DIALOG_ABOUT_BASE.
void AddHTML_Text(const wxString &message)
Function AddHTML_Text adds html text (without any change) to message list.
A contributor, a person which was involved in the development of the application or which has contrib...
Definition: aboutinfo.h:136
Class EDA_BASE_FRAME is the base frame for deriving all KiCad main window classes.
Definition: wxstruct.h:113
virtual void onShowVersionInfo(wxCommandEvent &event) override
wxString & GetDescription()
Definition: aboutinfo.h:85
wxButton * m_btCopyVersionInfo
#define ON
bool IsChecked()
Definition: aboutinfo.h:158
void createNotebookPage(wxAuiNotebook *aParent, const wxString &aCaption, const wxBitmap &aIcon, const CONTRIBUTORS &aContributors)