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