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