Audacity  2.2.2
AboutDialog.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  AboutDialog.cpp
6 
7  Dominic Mazzoni
8  Vaughan Johnson
9  James Crook
10 
11 ********************************************************************//*****************************************************************//********************************************************************/
26 
27 
28 #include "Audacity.h"
29 
30 #include <wx/dialog.h>
31 #include <wx/html/htmlwin.h>
32 #include <wx/button.h>
33 #include <wx/dcclient.h>
34 #include <wx/sizer.h>
35 #include <wx/statbmp.h>
36 #include <wx/intl.h>
37 
38 #include "AboutDialog.h"
39 #include "FileNames.h"
40 #include "Internat.h"
41 #include "ShuttleGui.h"
43 
44 #include "Theme.h"
45 #include "AllThemeResources.h"
46 
47 // DA: Logo for About box.
48 #ifdef EXPERIMENTAL_DA
49 #include "../images/DarkAudacityLogoWithName.xpm"
50 #else
51 #include "../images/AudacityLogoWithName.xpm"
52 #endif
53 #include "RevisionIdent.h"
54 
55 // RevisionIdent.h may contain #defines like these ones:
56 //#define REV_LONG "28864acb238cb3ca71dda190a2d93242591dd80e"
57 //#define REV_TIME "Sun Apr 12 12:40:22 2015 +0100"
58 
59 
60 #ifndef REV_TIME
61 #define REV_TIME "unknown date and time"
62 #endif
63 
64 #ifdef REV_LONG
65 #define REV_IDENT wxString( "[[https://github.com/audacity/audacity/commit/" )+ REV_LONG + "|" + wxString( REV_LONG ).Left(6) + "]] of " + REV_TIME
66 #else
67 #define REV_IDENT wxT("No revision identifier was provided")
68 #endif
69 
70 extern wxString FormatHtmlText( const wxString & Text );
71 
72 // Function to give the xtra arguments to put on the version check string.
73 const wxString VerCheckArgs(){
74  wxString result = wxString("from_ver=") + AUDACITY_VERSION_STRING;
75 #ifdef REV_LONG
76  result += wxString("&CommitId=")+wxString(REV_LONG).Left(6);
77 #endif
78  result += wxString("&Time=") + wxString( __DATE__ ) + wxString( __TIME__ );
79  result.Replace(" ","");
80  return result;
81 }
82 
83 // Url with Version check args attached.
84 const wxString VerCheckUrl(){
85  //The version we intend to use for live Audacity.
86 #define VER_CHECK_URL "https://www.audacityteam.org/download/?"
87 //For testing of our scriptlet.
88 //#define VER_CHECK_URL "http://www.audacityteam.org/slug/?"
89 //For testing locally
90 //#define VER_CHECK_URL "http://localhost:63342/WorkingDocs/demos/download.html?"
91 
92  return wxString( wxT(VER_CHECK_URL)) +VerCheckArgs();
93 }
94 
95 // Text of htperlink to check versions.
96 const wxString VerCheckHtml(){
97 
98  wxString result = "<center>[[";
99  result += VerCheckUrl() + "|" + _("Check Online");
100  result += "]]</center>\n";
101  return result;
102 }
103 
104 
106 {
107  // The Audacity Team: developers and support
108  AddCredit(wxString(wxT("Arturo \"Buanzo\" Busleiman, ")) + _("system administration"), roleTeamMember);
109  AddCredit(wxString(wxT("James Crook, ")) + _("developer"), roleTeamMember);
110  AddCredit(wxString(wxT("Roger Dannenberg, ")) + _("co-founder and developer"), roleTeamMember);
111  AddCredit(wxString(wxT("Steve Daulton")), roleTeamMember);
112  AddCredit(wxString(wxT("Vaughan Johnson, ")) + _("developer"), roleTeamMember);
113  AddCredit(wxString(wxT("Greg Kozikowski, ")) + _("documentation and support"), roleTeamMember);
114  AddCredit(wxString(wxT("Paul Licameli, ")) + _("developer"), roleTeamMember);
115  AddCredit(wxString(wxT("Peter Sampson")), roleTeamMember);
116  AddCredit(wxString(wxT("Bill Wharrie, ")) + _("documentation and support"), roleTeamMember);
117 
118  // Emeritus: people who were "lead developers" or made an
119  // otherwise distinguished contribution, but who are no
120  // longer active.
121  AddCredit(wxString(wxT("[[https://wiki.audacityteam.org/wiki/User:Galeandrews|Gale Andrews]], ")) + _("quality assurance"), roleEmeritusTeam);
122  AddCredit(wxString(wxT("Richard Ash, ")) + _("developer"), roleEmeritusTeam);
123  AddCredit(wxString(wxT("Christian Brochec, ")) + _("documentation and support, French"), roleEmeritusTeam);
124  AddCredit(wxString(wxT("Matt Brubeck, ")) + _("developer"), roleEmeritusTeam);
125  AddCredit(wxString(wxT("Michael Chinen, ")) + _("developer"), roleEmeritusTeam);
126  AddCredit(wxString(wxT("Al Dimond, ")) + _("developer"), roleEmeritusTeam);
127  AddCredit(wxString(wxT("Benjamin Drung, ")) + _("developer"), roleEmeritusTeam);
128  AddCredit(wxString(wxT("Joshua Haberman, ")) + _("developer"), roleEmeritusTeam);
129  AddCredit(wxString(wxT("Ruslan Ijbulatov, ")) + _("developer"), roleEmeritusTeam);
130  AddCredit(wxString(wxT("Leland Lucius, ")) + _("developer"), roleEmeritusTeam);
131  AddCredit(wxString(wxT("Dominic Mazzoni, "))+_("co-founder and developer"), roleEmeritusTeam);
132  AddCredit(wxString(wxT("Markus Meyer, ")) + _("developer"), roleEmeritusTeam);
133  AddCredit(wxString(wxT("Monty Montgomery, ")) + _("developer"), roleEmeritusTeam);
134  AddCredit(wxString(wxT("Shane Mueller, ")) + _("developer"), roleEmeritusTeam);
135  AddCredit(wxString(wxT("Tony Oetzmann, ")) + _("documentation and support"), roleEmeritusTeam);
136  AddCredit(wxString(wxT("Alexandre Prokoudine, ")) + _("documentation and support"), roleEmeritusTeam);
137  AddCredit(wxString(wxT("Martyn Shaw, ")) + _("developer"), roleEmeritusTeam);
138 
139  // Contributors
140  AddCredit(wxString(wxT("Lynn Allan, ")) + _("developer"), roleContributor);
141  AddCredit(wxString(wxT("Brian Armstrong, ")) + _("developer"), roleContributor);
142  AddCredit(wxString(wxT("David Avery, ")) + _("developer"), roleContributor);
143  AddCredit(wxString(wxT("David Bailes, ")) + _("accessibility advisor"), roleContributor);
144  AddCredit(wxString(wxT("William Bland, ")) + _("developer"), roleContributor);
145  AddCredit(wxString(wxT("Sami Boukortt, ")) + _("developer"), roleContributor);
146  AddCredit(wxString(wxT("Jeremy R. Brown, ")) + _("developer"), roleContributor);
147  AddCredit(wxString(wxT("Alex S. Brown, ")) + _("developer"), roleContributor);
148  AddCredit(wxString(wxT("Chris Cannam, ")) + _("developer"), roleContributor);
149  AddCredit(wxString(wxT("Cory Cook, ")) + _("developer"), roleContributor);
150  AddCredit(wxString(wxT("Craig DeForest, ")) + _("developer"), roleContributor);
151  AddCredit(wxString(wxT("Edgar Franke (Edgar-RFT), ")) + _("developer"), roleContributor);
152  AddCredit(wxString(wxT("Mitch Golden, ")) + _("developer"), roleContributor);
153  AddCredit(wxString(wxT("Brian Gunlogson, ")) + _("developer"), roleContributor);
154  AddCredit(wxString(wxT("Andrew Hallendorff, ")) + _("developer"), roleContributor);
155  AddCredit(wxString(wxT("Robert H\u00E4nggi, ")) + _("developer"), roleContributor);
156  AddCredit(wxString(wxT("Daniel Horgan, ")) + _("developer"), roleContributor);
157  AddCredit(wxString(wxT("David Hostetler, ")) + _("developer"), roleContributor);
158  AddCredit(wxString(wxT("Steve Jolly, ")) + _("developer"), roleContributor);
159  AddCredit(wxString(wxT("Steven Jones, ")) + _("developer"), roleContributor);
160  AddCredit(wxString(wxT("Henric Jungheim, ")) + _("developer"), roleContributor);
161  AddCredit(wxString(wxT("Arun Kishore, ")) + _("developer"), roleContributor);
162  AddCredit(wxString(wxT("Paul Livesey, ")) + _("developer"), roleContributor);
163  AddCredit(wxString(wxT("Harvey Lubin, ")) + _("graphic artist"), roleContributor);
164  AddCredit(wxString(wxT("Greg Mekkes, ")) + _("developer"), roleContributor);
165  AddCredit(wxString(wxT("Abe Milde, ")) + _("developer"), roleContributor);
166  AddCredit(wxString(wxT("Paul Nasca, ")) + _("developer"), roleContributor);
167  AddCredit(wxString(wxT("Clayton Otey, ")) + _("developer"), roleContributor);
168  AddCredit(wxString(wxT("Mark Phillips, ")) + _("developer"), roleContributor);
169  AddCredit(wxString(wxT("Andr\u00E9 Pinto, ")) + _("developer"), roleContributor);
170  AddCredit(wxString(wxT("Jean Claude Risset, ")) + _("composer"), roleContributor);
171  AddCredit(wxString(wxT("Augustus Saunders, ")) + _("developer"), roleContributor);
172  AddCredit(wxString(wxT("Benjamin Schwartz, ")) + _("developer"), roleContributor);
173  AddCredit(wxString(wxT("Cliff Scott, ")) + _("tester"), roleContributor);
174  AddCredit(wxString(wxT("David R. Sky, ")) + _("Nyquist plug-ins"), roleContributor);
175  AddCredit(wxString(wxT("Rob Sykes, ")) + _("developer"), roleContributor);
176  AddCredit(wxString(wxT("Mike Underwood, ")) + _("developer"), roleContributor);
177  AddCredit(wxString(wxT("Philip Van Baren, ")) + _("developer"), roleContributor);
178  AddCredit(wxString(wxT("Salvo Ventura, ")) + _("developer"), roleContributor);
179  AddCredit(wxString(wxT("Darrell Walisser, ")) + _("developer"), roleContributor);
180  AddCredit(wxString(wxT("Jun Wan, ")) + _("developer"), roleContributor);
181  AddCredit(wxString(wxT("Daniel Winzen, ")) + _("developer"), roleContributor);
182  AddCredit(wxString(wxT("Tom Woodhams, ")) + _("developer"), roleContributor);
183  AddCredit(wxString(wxT("Mark Young, ")) + _("developer"), roleContributor);
184  AddCredit(wxString(wxT("Wing Yu, ")) + _("developer"), roleContributor);
185 
186  // Libraries
187 
188  AddCredit(wxT("[[https://libexpat.github.io/|expat]]"), roleLibrary);
189  AddCredit(wxT("[[https://xiph.org/flac/|FLAC]]"), roleLibrary);
190  AddCredit(wxT("[[http://lame.sourceforge.net/|LAME]]"), roleLibrary);
191  AddCredit(wxT("[[https://www.underbit.com/products/mad/|libmad]]"), roleLibrary);
192  AddCredit(wxT("[[http://www.mega-nerd.com/libsndfile/|libsndfile]]"), roleLibrary);
193  AddCredit(wxT("[[https://sourceforge.net/p/soxr/wiki/Home/|libsoxr]]"), roleLibrary);
194  AddCredit(wxT("[[http://lv2plug.in/|lv2]] (") + _("incorporating") + wxT(" lilv, msinttypes, serd, sord and sratom)"), roleLibrary);
195  AddCredit(wxT("[[https://www.cs.cmu.edu/~music/nyquist/|Nyquist]]"), roleLibrary);
196  AddCredit(wxT("[[https://xiph.org/vorbis/|Ogg Vorbis]]"), roleLibrary);
197  AddCredit(wxT("[[http://www.portaudio.com/|PortAudio]]"), roleLibrary);
198  AddCredit(wxT("[[http://www.portmedia.sourceforge.net/portmidi/|PortMidi]]"), roleLibrary);
199  AddCredit(wxT("[[https://sourceforge.net/p/portmedia/wiki/portsmf/|portsmf]]"), roleLibrary);
200  AddCredit(wxT("[[http://sbsms.sourceforge.net/|sbsms]]"), roleLibrary);
201  AddCredit(wxT("[[https://www.surina.net/soundtouch/|SoundTouch]]"), roleLibrary);
202  AddCredit(wxT("[[http://www.twolame.org/|TwoLAME]]"), roleLibrary);
203  AddCredit(wxT("[[http://www.vamp-plugins.org/|Vamp]]"), roleLibrary);
204  AddCredit(wxT("[[https://wxwidgets.org/|wxWidgets]]"), roleLibrary);
205 
206  // Thanks
207 
208  AddCredit(wxT("Dave Beydler"), roleThanks);
209  AddCredit(wxT("Brian Cameron"), roleThanks);
210  AddCredit(wxT("Jason Cohen"), roleThanks);
211  AddCredit(wxT("Dave Fancella"), roleThanks);
212  AddCredit(wxT("Steve Harris"), roleThanks);
213  AddCredit(wxT("Daniel James"), roleThanks);
214  AddCredit(wxT("Daniil Kolpakov"), roleThanks);
215  AddCredit(wxT("Robert Leidle"), roleThanks);
216  AddCredit(wxT("Logan Lewis"), roleThanks);
217  AddCredit(wxT("David Luff"), roleThanks);
218  AddCredit(wxT("Jason Pepas"), roleThanks);
219  AddCredit(wxT("Jonathan Ryshpan"), roleThanks);
220  AddCredit(wxT("Michael Schwendt"), roleThanks);
221  AddCredit(wxT("Patrick Shirkey"), roleThanks);
222  AddCredit(wxT("Tuomas Suutari"), roleThanks);
223  AddCredit(wxT("Mark Tomlinson"), roleThanks);
224  AddCredit(wxT("David Topper"), roleThanks);
225  AddCredit(wxT("Rudy Trubitt"), roleThanks);
226  AddCredit(wxT("StreetIQ.com"), roleThanks);
227  AddCredit(wxT("UmixIt Technologies, LLC"), roleThanks);
228  AddCredit(wxT("Verilogix, Inc."), roleThanks);
229 }
230 
231 // ----------------------------------------------------------------------------
232 
233 BEGIN_EVENT_TABLE(AboutDialog, wxDialogWrapper)
234  EVT_BUTTON(wxID_OK, AboutDialog::OnOK)
236 
238 
239 namespace {
240  AboutDialog *sActiveInstance{};
241 }
242 
244 {
245  return sActiveInstance;
246 }
247 
248 AboutDialog::AboutDialog(wxWindow * parent)
249  : wxDialogWrapper(parent, -1, _("About Audacity"),
250  wxDefaultPosition, wxDefaultSize,
251  wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
252 {
253  wxASSERT(!sActiveInstance);
254  sActiveInstance = this;
255 
256  SetName(GetTitle());
257  this->SetBackgroundColour(theTheme.Colour( clrAboutBoxBackground ));
258  //this->SetBackgroundColour(theTheme.Colour( clrMedium ));
259  icon = NULL;
260  ShuttleGui S( this, eIsCreating );
261  S.StartNotebook();
262  {
265  PopulateLicensePage( S );
266  }
267  S.EndNotebook();
268  wxButton *ok = safenew wxButton(S.GetParent(), wxID_OK, _("OK"));
269  ok->SetDefault();
270  S.Prop(0).AddWindow( ok );
271 
272  Fit();
273  this->Centre();
274 }
275 
276 #define ABOUT_DIALOG_WIDTH 506
277 
279 {
281 
282  wxString par1Str =
283 // DA: Says that it is a customised version.
284 #ifdef EXPERIMENTAL_DA
285  wxT(
286 "Audacity, which this is a customised version of, is a free program written by a worldwide team of [[https://www.audacityteam.org/about/credits|volunteers]]. \
287 Audacity is [[https://www.audacityteam.org/download|available]] for Windows, Mac, and GNU/Linux (and other Unix-like systems).");
288 #else
289  _(
290 "Audacity is a free program written by a worldwide team of [[https://www.audacityteam.org/about/credits|volunteers]]. \
291 Audacity is [[https://www.audacityteam.org/download|available]] for Windows, Mac, and GNU/Linux (and other Unix-like systems).");
292 #endif
293 
294  // This trick here means that the English language version won't mention using
295  // English, whereas all translated versions will.
296  wxString par2StrUntranslated = wxT(
297 "If you find a bug or have a suggestion for us, please write, in English, to our [[https://forum.audacityteam.org/|forum]]. \
298 For help, view the tips and tricks on our [[https://wiki.audacityteam.org/|wiki]] or \
299 visit our [[https://forum.audacityteam.org/|forum]].");
300  wxString par2Str = _(
301 "If you find a bug or have a suggestion for us, please write, in English, to our [[https://forum.audacityteam.org/|forum]]. \
302 For help, view the tips and tricks on our [[https://wiki.audacityteam.org/|wiki]] or \
303 visit our [[https://forum.audacityteam.org/|forum]].");
304 
305  if( par2Str == par2StrUntranslated )
306  par2Str.Replace( wxT(", in English,"), wxT("") );
307 
308  wxString translatorCredits;
309  /* i18n-hint: The translation of "translator_credits" will appear
310  * in the credits in the About Audacity window. Use this to add
311  * your own name(s) to the credits.
312  *
313  * For example: "English translation by Dominic Mazzoni." */
314  if (_("translator_credits") != wxString(wxT("translator_credits")))
315  {
316  translatorCredits = _("translator_credits") + wxT("<br>");
317  }
318 
319  wxString creditStr = FormatHtmlText(
320  wxString( wxT("<center>") ) +
321 // DA: Description and provenance in About box
322 #ifdef EXPERIMENTAL_DA
323  #undef _
324  #define _(s) wxGetTranslation((s))
325  wxT("<h3>DarkAudacity ") + wxString(AUDACITY_VERSION_STRING) + wxT("</center></h3>") +
326  wxT("Customised version of the Audacity free, open source, cross-platform software " ) +
327  wxT("for recording and editing sounds.") +
328  wxT("<p><br>&nbsp; &nbsp; <b>Audacity<sup>&reg;</sup></b> software is copyright &copy; 1999-2018 Audacity Team.<br>") +
329  wxT("&nbsp; &nbsp; The name <b>Audacity</b> is a registered trademark of Dominic Mazzoni.<br><br>") +
330 
331 #else
332  _("<h3>Audacity ") + wxString(AUDACITY_VERSION_STRING) + wxT("</center></h3>") +
333  _("Audacity the free, open source, cross-platform software for recording and editing sounds.") +
334 #endif
335 
336  //wxT("<p><br>") + par1Str +
337  //wxT("<p>") + par2Str +
338  wxT("<h3>") + _("Credits") + wxT("</h3>") + wxT("<p>") +
339 
340 // DA: Customisation credit
341 #ifdef EXPERIMENTAL_DA
342  wxT("<p><b>") + wxString::Format(_("DarkAudacity Customisation")) + wxT("</b><br>") +
343  wxT("James Crook, art, coding &amp; design<br>") +
344 #endif
345 
346  wxT("<p><b>") + _("Audacity Team Members") + wxT("</b><br>") +
348 
349  wxT("<p><b> ") + _("Emeritus:") + wxT("</b><br>") +
350  _("Distinguished Audacity Team members, not currently active") + wxT("<br><br>") +
352 
353  wxT("<p><b>") + _("Contributors") + wxT("</b><br>") +
355 
356  (translatorCredits.empty()
357  ? wxT("")
358  : (wxT("<p><b>") + _("Translators") + wxT("</b><br>") +
359  translatorCredits)) +
360 
361  wxT("<p><b>") + _("Libraries") + wxT("</b><br>") +
362  _("Audacity includes code from the following projects:") + wxT("<br><br>") +
364 
365  wxT("<p><b>") + _("Special thanks:") + wxT("</b><br>") +
367 
368  wxT("<p><br>") + _("Audacity website: ") + wxT("[[https://www.audacityteam.org/|https://www.audacityteam.org/]]") +
369 
370 // DA: Link for DA url too
371 #ifdef EXPERIMENTAL_DA
372  wxT("<br>DarkAudacity website: [[http://www.darkaudacity.com/|https://www.darkaudacity.com/]]") +
373 #else
374  _("<p><br>&nbsp; &nbsp; <b>Audacity<sup>&reg;</sup></b> software is copyright &copy; 1999-2018 Audacity Team.<br>")
375 
376  +
377 
378  _("&nbsp; &nbsp; The name <b>Audacity</b> is a registered trademark of Dominic Mazzoni.<br><br>") +
379 #endif
380 
381  wxT("</center>")
382  );
383 
384  auto pPage = S.StartNotebookPage( _("Audacity") );
385  S.StartVerticalLay(1);
386  {
387  //v For now, change to AudacityLogoWithName via old-fashioned way, not Theme.
388  wxBitmap logo(AudacityLogoWithName_xpm); //v
389 
390  // JKC: Resize to 50% of size. Later we may use a smaller xpm as
391  // our source, but this allows us to tweak the size - if we want to.
392  // It also makes it easier to revert to full size if we decide to.
393  const float fScale = 0.5f;// smaller size.
394  wxImage RescaledImage(logo.ConvertToImage());
395  wxColour MainColour(
396  RescaledImage.GetRed(1,1),
397  RescaledImage.GetGreen(1,1),
398  RescaledImage.GetBlue(1,1));
399  pPage->SetBackgroundColour(MainColour);
400  // wxIMAGE_QUALITY_HIGH not supported by wxWidgets 2.6.1, or we would use it here.
401  RescaledImage.Rescale((int)(LOGOWITHNAME_WIDTH * fScale), (int)(LOGOWITHNAME_HEIGHT *fScale));
402  wxBitmap RescaledBitmap(RescaledImage);
403 
404  icon =
405  safenew wxStaticBitmap(S.GetParent(), -1,
406  //*logo, //v
407  //v theTheme.Bitmap(bmpAudacityLogo), wxPoint(93, 10), wxSize(215, 190));
408  //v theTheme.Bitmap(bmpAudacityLogoWithName),
409  RescaledBitmap,
410  wxDefaultPosition,
411  wxSize((int)(LOGOWITHNAME_WIDTH*fScale), (int)(LOGOWITHNAME_HEIGHT*fScale)));
412  }
413  S.Prop(0).AddWindow( icon );
414 
416  wxDefaultPosition,
417  wxSize(ABOUT_DIALOG_WIDTH, 359),
418  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
419  html->SetFocus();
420  html->SetPage(creditStr);
421 
422  /* locate the html renderer where it fits in the dialogue */
423  S.Prop(1).AddWindow( html, wxEXPAND );
424 
425  S.EndVerticalLay();
426  S.EndNotebookPage();
427 }
428 
435 {
436  wxString informationStr; // string to build up list of information in
437  S.StartNotebookPage( _("Build Information") ); // start the tab
438  S.StartVerticalLay(2); // create the window
439  HtmlWindow *html = safenew LinkingHtmlWindow(S.GetParent(), -1, wxDefaultPosition,
440  wxSize(ABOUT_DIALOG_WIDTH, 264),
441  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
442  // create a html pane in it to put the content in.
443  wxString enabled = _("Enabled");
444  wxString disabled = _("Disabled");
445  wxString blank = wxT("");
446 
447  /* this builds up the list of information to go in the window in the string
448  * informationStr */
449  informationStr = wxT("<h2><center>");
450  informationStr += _("Build Information");
451  informationStr += wxT("</center></h2>\n");
452  informationStr += VerCheckHtml();
453  // top level heading
454  informationStr += wxT("<h3>");
455  informationStr += _("File Format Support");
456  informationStr += wxT("</h3>\n<p>");
457  // 2nd level headings to split things up a bit
458 
459 
460  informationStr += wxT("<table>"); // start table of libraries
461 
462 
463  #ifdef USE_LIBMAD
464  /* i18n-hint: This is what the library (libmad) does - imports MP3 files */
465  AddBuildinfoRow(&informationStr, wxT("libmad"), _("MP3 Importing"), enabled);
466  #else
467  AddBuildinfoRow(&informationStr, wxT("libmad"), _("MP3 Importing"), disabled);
468  #endif
469 
470  /* i18n-hint: Ogg is the container format. Vorbis is the compression codec.
471  * Both are proper nouns and shouldn't be translated */
472  #ifdef USE_LIBVORBIS
473  AddBuildinfoRow(&informationStr, wxT("libvorbis"),
474  _("Ogg Vorbis Import and Export"), enabled);
475  #else
476  AddBuildinfoRow(&informationStr, wxT("libvorbis"),
477  _("Ogg Vorbis Import and Export"), disabled);
478  #endif
479 
480  #ifdef USE_LIBID3TAG
481  AddBuildinfoRow(&informationStr, wxT("libid3tag"), _("ID3 tag support"),
482  enabled);
483  #else
484  AddBuildinfoRow(&informationStr, wxT("libid3tag"), _("ID3 tag support"),
485  disabled);
486  #endif
487 
488  /* i18n-hint: FLAC stands for Free Lossless Audio Codec, but is effectively
489  * a proper noun and so shouldn't be translated */
490  # if USE_LIBFLAC
491  AddBuildinfoRow(&informationStr, wxT("libflac"), _("FLAC import and export"),
492  enabled);
493  # else
494  AddBuildinfoRow(&informationStr, wxT("libflac"), _("FLAC import and export"),
495  disabled);
496  # endif
497 
498  # if USE_LIBTWOLAME
499  AddBuildinfoRow(&informationStr, wxT("libtwolame"), _("MP2 export"),
500  enabled);
501  # else
502  AddBuildinfoRow(&informationStr, wxT("libtwolame"), _("MP2 export"),
503  disabled);
504  # endif
505 
506  # if USE_QUICKTIME
507  AddBuildinfoRow(&informationStr, wxT("QuickTime"), _("Import via QuickTime"),
508  enabled);
509  # else
510  AddBuildinfoRow(&informationStr, wxT("QuickTime"), _("Import via QuickTime"),
511  disabled);
512  # endif
513 
514  #ifdef USE_FFMPEG
515  AddBuildinfoRow(&informationStr, wxT("ffmpeg"), _("FFmpeg Import/Export"), enabled);
516  #else
517  AddBuildinfoRow(&informationStr, wxT("ffmpeg"), _("FFmpeg Import/Export"), disabled);
518  #endif
519 
520  #ifdef USE_GSTREAMER
521  AddBuildinfoRow(&informationStr, wxT("gstreamer"), _("Import via GStreamer"), enabled);
522  #else
523  AddBuildinfoRow(&informationStr, wxT("gstreamer"), _("Import via GStreamer"), disabled);
524  #endif
525 
526  informationStr += wxT("</table>\n"); //end table of file format libraries
527  informationStr += wxT("<h3>");
528  /* i18n-hint: Libraries that are essential to audacity */
529  informationStr += _("Core Libraries");
530  informationStr += wxT("</h3>\n<table>"); // start table of features
531 
532  AddBuildinfoRow(&informationStr, wxT("libsoxr"),
533  _("Sample rate conversion"), enabled);
534 
535  AddBuildinfoRow(&informationStr, wxT("PortAudio"),
536  _("Audio playback and recording"), wxString(wxT("v19")));
537 
538  AddBuildinfoRow(&informationStr, wxT("wxWidgets"),
539  _("Cross-platform GUI library"), wxVERSION_NUM_DOT_STRING_T);
540 
541  informationStr += wxT("</table>\n"); //end table of libraries
542  informationStr += wxT("<h3>");
543  informationStr += _("Features");
544  informationStr += wxT("</h3>\n<table>"); // start table of features
545 
546 #ifdef EXPERIMENTAL_DA
547  AddBuildinfoRow(&informationStr, wxT("Theme"), _("Dark Theme Extras"), enabled);
548 #else
549  AddBuildinfoRow(&informationStr, wxT("Theme"), _("Dark Theme Extras"), disabled);
550 #endif
551 
552  # if USE_NYQUIST
553  AddBuildinfoRow(&informationStr, wxT("Nyquist"), _("Plug-in support"),
554  enabled);
555  # else
556  AddBuildinfoRow(&informationStr, wxT("Nyquist"), _("Plug-in support"),
557  disabled);
558  # endif
559 
560  # if USE_LADSPA
561  AddBuildinfoRow(&informationStr, wxT("LADSPA"), _("Plug-in support"),
562  enabled);
563  # else
564  AddBuildinfoRow(&informationStr, wxT("LADSPA"), _("Plug-in support"),
565  disabled);
566  # endif
567 
568  # if USE_VAMP
569  AddBuildinfoRow(&informationStr, wxT("Vamp"), _("Plug-in support"),
570  enabled);
571  # else
572  AddBuildinfoRow(&informationStr, wxT("Vamp"), _("Plug-in support"),
573  disabled);
574  # endif
575 
576  # if USE_AUDIO_UNITS
577  AddBuildinfoRow(&informationStr, wxT("Audio Units"), _("Plug-in support"),
578  enabled);
579  # else
580  AddBuildinfoRow(&informationStr, wxT("Audio Units"), _("Plug-in support"),
581  disabled);
582  # endif
583 
584  # if USE_VST
585  AddBuildinfoRow(&informationStr, wxT("VST"), _("Plug-in support"),
586  enabled);
587  # else
588  AddBuildinfoRow(&informationStr, wxT("VST"), _("Plug-in support"),
589  disabled);
590  # endif
591 
592  # if USE_LV2
593  AddBuildinfoRow(&informationStr, wxT("LV2"), _("Plug-in support"),
594  enabled);
595  # else
596  AddBuildinfoRow(&informationStr, wxT("LV2"), _("Plug-in support"),
597  disabled);
598  # endif
599 
600  # if USE_PORTMIXER
601  AddBuildinfoRow(&informationStr, wxT("PortMixer"), _("Sound card mixer support"),
602  enabled);
603  # else
604  AddBuildinfoRow(&informationStr, wxT("PortMixer"), _("Sound card mixer support"),
605  disabled);
606  # endif
607 
608  # if USE_SOUNDTOUCH
609  AddBuildinfoRow(&informationStr, wxT("SoundTouch"), _("Pitch and Tempo Change support"),
610  enabled);
611  # else
612  AddBuildinfoRow(&informationStr, wxT("SoundTouch"), _("Pitch and Tempo Change support"),
613  disabled);
614  # endif
615 
616  # if USE_SBSMS
617  AddBuildinfoRow(&informationStr, wxT("SBSMS"), _("Extreme Pitch and Tempo Change support"),
618  enabled);
619  # else
620  AddBuildinfoRow(&informationStr, wxT("SBSMS"), _("Extreme Pitch and Tempo Change support"),
621  disabled);
622  # endif
623 
624  informationStr += wxT("</table>\n"); // end of table of features
625 
626  informationStr += wxT("<h3>");
627  /* i18n-hint: Information about when audacity was compiled */
628  informationStr += _("Build Information");
629  informationStr += wxT("</h3>\n<table>");
630 
631  // Current date
632  AddBuildinfoRow(&informationStr, _("Program build date: "), __TDATE__);
633  AddBuildinfoRow(&informationStr, _("Commit Id:"), REV_IDENT );
634 #ifdef __WXDEBUG__
635  AddBuildinfoRow(&informationStr, _("Build type:"), _("Debug build"));
636 #else
637  AddBuildinfoRow(&informationStr, _("Build type:"), _("Release build"));
638 #endif
639 
640 #ifdef _MSC_FULL_VER
641  AddBuildinfoRow(&informationStr, _("Compiler:"),
642  wxString::Format(wxT("MSVC %02d.%02d.%05d.%02d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000, _MSC_BUILD));
643 #endif
644 
645 #ifdef __GNUC_PATCHLEVEL__
646 #ifdef __MINGW32__
647  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("MinGW ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
648 #else
649  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("GCC ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
650 #endif
651 #endif
652 
653 #ifdef __clang_version__
654  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("clang ") __clang_version__);
655 #endif
656 
657  // Install prefix
658  /* i18n-hint: The directory audacity is installed into (on *nix systems) */
659 #ifdef __WXGTK__
660  AddBuildinfoRow(&informationStr, _("Installation Prefix: "), \
661  wxT(INSTALL_PREFIX));
662 #endif
663 
664  // Location of settings
665  AddBuildinfoRow(&informationStr,_("Settings folder: "), \
667  // end of table
668  informationStr += wxT("</table>\n");
669 
670  informationStr = FormatHtmlText( informationStr );
671 
672  html->SetPage(informationStr); // push the page into the html renderer
673  S.Prop(2).AddWindow( html, wxEXPAND ); // make it fill the page
674  // I think the 2 here goes with the StartVerticalLay() call above?
675  S.EndVerticalLay(); // end window
676  S.EndNotebookPage(); // end the tab
677 }
678 
679 
681 {
682  S.StartNotebookPage( _("GPL License") );
683  S.StartVerticalLay(1);
685  wxDefaultPosition,
686  wxSize(ABOUT_DIALOG_WIDTH, 264),
687  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
688 
689 // I tried using <pre> here to get a monospaced font,
690 // as is normally used for the GPL.
691 // However can't reduce the font size in that case. It looks
692 // better proportionally spaced.
693 //
694 // The GPL is not to be translated....
695  wxString PageText= FormatHtmlText(
696 wxT(" <center>GNU GENERAL PUBLIC LICENSE\n</center>")
697 wxT(" <center>Version 2, June 1991\n</center>")
698 wxT("<p><p>")
699 wxT(" Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n")
700 wxT(" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n")
701 wxT(" Everyone is permitted to copy and distribute verbatim copies\n")
702 wxT(" of this license document, but changing it is not allowed.\n")
703 wxT("\n")
704 wxT(" <center>Preamble\n</center>")
705 wxT("<p><p>\n")
706 wxT(" The licenses for most software are designed to take away your\n")
707 wxT("freedom to share and change it. By contrast, the GNU General Public\n")
708 wxT("License is intended to guarantee your freedom to share and change free\n")
709 wxT("software--to make sure the software is free for all its users. This\n")
710 wxT("General Public License applies to most of the Free Software\n")
711 wxT("Foundation's software and to any other program whose authors commit to\n")
712 wxT("using it. (Some other Free Software Foundation software is covered by\n")
713 wxT("the GNU Library General Public License instead.) You can apply it to\n")
714 wxT("your programs, too.\n")
715 wxT("<p><p>\n")
716 wxT(" When we speak of free software, we are referring to freedom, not\n")
717 wxT("price. Our General Public Licenses are designed to make sure that you\n")
718 wxT("have the freedom to distribute copies of free software (and charge for\n")
719 wxT("this service if you wish), that you receive source code or can get it\n")
720 wxT("if you want it, that you can change the software or use pieces of it\n")
721 wxT("in new free programs; and that you know you can do these things.\n")
722 wxT("<p><p>\n")
723 wxT(" To protect your rights, we need to make restrictions that forbid\n")
724 wxT("anyone to deny you these rights or to ask you to surrender the rights.\n")
725 wxT("These restrictions translate to certain responsibilities for you if you\n")
726 wxT("distribute copies of the software, or if you modify it.\n")
727 wxT("<p><p>\n")
728 wxT(" For example, if you distribute copies of such a program, whether\n")
729 wxT("gratis or for a fee, you must give the recipients all the rights that\n")
730 wxT("you have. You must make sure that they, too, receive or can get the\n")
731 wxT("source code. And you must show them these terms so they know their\n")
732 wxT("rights.\n")
733 wxT("<p><p>\n")
734 wxT(" We protect your rights with two steps: (1) copyright the software, and\n")
735 wxT("(2) offer you this license which gives you legal permission to copy,\n")
736 wxT("distribute and/or modify the software.\n")
737 wxT("<p><p>\n")
738 wxT(" Also, for each author's protection and ours, we want to make certain\n")
739 wxT("that everyone understands that there is no warranty for this free\n")
740 wxT("software. If the software is modified by someone else and passed on, we\n")
741 wxT("want its recipients to know that what they have is not the original, so\n")
742 wxT("that any problems introduced by others will not reflect on the original\n")
743 wxT("authors' reputations.\n")
744 wxT("<p><p>\n")
745 wxT(" Finally, any free program is threatened constantly by software\n")
746 wxT("patents. We wish to avoid the danger that redistributors of a free\n")
747 wxT("program will individually obtain patent licenses, in effect making the\n")
748 wxT("program proprietary. To prevent this, we have made it clear that any\n")
749 wxT("patent must be licensed for everyone's free use or not licensed at all.\n")
750 wxT("<p><p>\n")
751 wxT(" The precise terms and conditions for copying, distribution and\n")
752 wxT("modification follow.\n")
753 wxT("<p><p>\n")
754 wxT(" <center>GNU GENERAL PUBLIC LICENSE\n</center>")
755 wxT(" <center>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n</center>")
756 wxT("<p><p>\n")
757 wxT(" 0. This License applies to any program or other work which contains\n")
758 wxT("a notice placed by the copyright holder saying it may be distributed\n")
759 wxT("under the terms of this General Public License. The \"Program\", below,\n")
760 wxT("refers to any such program or work, and a \"work based on the Program\"\n")
761 wxT("means either the Program or any derivative work under copyright law:\n")
762 wxT("that is to say, a work containing the Program or a portion of it,\n")
763 wxT("either verbatim or with modifications and/or translated into another\n")
764 wxT("language. (Hereinafter, translation is included without limitation in\n")
765 wxT("the term \"modification\".) Each licensee is addressed as \"you\".\n")
766 wxT("<p><p>\n")
767 wxT("Activities other than copying, distribution and modification are not\n")
768 wxT("covered by this License; they are outside its scope. The act of\n")
769 wxT("running the Program is not restricted, and the output from the Program\n")
770 wxT("is covered only if its contents constitute a work based on the\n")
771 wxT("Program (independent of having been made by running the Program).\n")
772 wxT("Whether that is true depends on what the Program does.\n")
773 wxT("<p><p>\n")
774 wxT(" 1. You may copy and distribute verbatim copies of the Program's\n")
775 wxT("source code as you receive it, in any medium, provided that you\n")
776 wxT("conspicuously and appropriately publish on each copy an appropriate\n")
777 wxT("copyright notice and disclaimer of warranty; keep intact all the\n")
778 wxT("notices that refer to this License and to the absence of any warranty;\n")
779 wxT("and give any other recipients of the Program a copy of this License\n")
780 wxT("along with the Program.\n")
781 wxT("<p><p>\n")
782 wxT("You may charge a fee for the physical act of transferring a copy, and\n")
783 wxT("you may at your option offer warranty protection in exchange for a fee.\n")
784 wxT("<p><p>\n")
785 wxT(" 2. You may modify your copy or copies of the Program or any portion\n")
786 wxT("of it, thus forming a work based on the Program, and copy and\n")
787 wxT("distribute such modifications or work under the terms of Section 1\n")
788 wxT("above, provided that you also meet all of these conditions:\n")
789 wxT("<p><p>\n")
790 wxT("<blockquote>")
791 wxT(" a) You must cause the modified files to carry prominent notices\n")
792 wxT(" stating that you changed the files and the date of any change.\n")
793 wxT("<p><p>\n")
794 wxT(" b) You must cause any work that you distribute or publish, that in\n")
795 wxT(" whole or in part contains or is derived from the Program or any\n")
796 wxT(" part thereof, to be licensed as a whole at no charge to all third\n")
797 wxT(" parties under the terms of this License.\n")
798 wxT("<p><p>\n")
799 wxT(" c) If the modified program normally reads commands interactively\n")
800 wxT(" when run, you must cause it, when started running for such\n")
801 wxT(" interactive use in the most ordinary way, to print or display an\n")
802 wxT(" announcement including an appropriate copyright notice and a\n")
803 wxT(" notice that there is no warranty (or else, saying that you provide\n")
804 wxT(" a warranty) and that users may redistribute the program under\n")
805 wxT(" these conditions, and telling the user how to view a copy of this\n")
806 wxT(" License. (Exception: if the Program itself is interactive but\n")
807 wxT(" does not normally print such an announcement, your work based on\n")
808 wxT(" the Program is not required to print an announcement.)\n")
809 wxT("</blockquote>")
810 wxT("<p><p>\n")
811 wxT("These requirements apply to the modified work as a whole. If\n")
812 wxT("identifiable sections of that work are not derived from the Program,\n")
813 wxT("and can be reasonably considered independent and separate works in\n")
814 wxT("themselves, then this License, and its terms, do not apply to those\n")
815 wxT("sections when you distribute them as separate works. But when you\n")
816 wxT("distribute the same sections as part of a whole which is a work based\n")
817 wxT("on the Program, the distribution of the whole must be on the terms of\n")
818 wxT("this License, whose permissions for other licensees extend to the\n")
819 wxT("entire whole, and thus to each and every part regardless of who wrote it.\n")
820 wxT("<p><p>\n")
821 wxT("Thus, it is not the intent of this section to claim rights or contest\n")
822 wxT("your rights to work written entirely by you; rather, the intent is to\n")
823 wxT("exercise the right to control the distribution of derivative or\n")
824 wxT("collective works based on the Program.\n")
825 wxT("<p><p>\n")
826 wxT("In addition, mere aggregation of another work not based on the Program\n")
827 wxT("with the Program (or with a work based on the Program) on a volume of\n")
828 wxT("a storage or distribution medium does not bring the other work under\n")
829 wxT("the scope of this License.\n")
830 wxT("<p><p>\n")
831 wxT(" 3. You may copy and distribute the Program (or a work based on it,\n")
832 wxT("under Section 2) in object code or executable form under the terms of\n")
833 wxT("Sections 1 and 2 above provided that you also do one of the following:\n")
834 wxT("<p><p>\n")
835 wxT("<blockquote>")
836 wxT(" a) Accompany it with the complete corresponding machine-readable\n")
837 wxT(" source code, which must be distributed under the terms of Sections\n")
838 wxT(" 1 and 2 above on a medium customarily used for software interchange; or,\n")
839 wxT("<p><p>\n")
840 wxT(" b) Accompany it with a written offer, valid for at least three\n")
841 wxT(" years, to give any third party, for a charge no more than your\n")
842 wxT(" cost of physically performing source distribution, a complete\n")
843 wxT(" machine-readable copy of the corresponding source code, to be\n")
844 wxT(" distributed under the terms of Sections 1 and 2 above on a medium\n")
845 wxT(" customarily used for software interchange; or,\n")
846 wxT("<p><p>\n")
847 wxT(" c) Accompany it with the information you received as to the offer\n")
848 wxT(" to distribute corresponding source code. (This alternative is\n")
849 wxT(" allowed only for noncommercial distribution and only if you\n")
850 wxT(" received the program in object code or executable form with such\n")
851 wxT(" an offer, in accord with Subsection b above.)\n")
852 wxT("</blockquote>")
853 wxT("<p><p>\n")
854 wxT("The source code for a work means the preferred form of the work for\n")
855 wxT("making modifications to it. For an executable work, complete source\n")
856 wxT("code means all the source code for all modules it contains, plus any\n")
857 wxT("associated interface definition files, plus the scripts used to\n")
858 wxT("control compilation and installation of the executable. However, as a\n")
859 wxT("special exception, the source code distributed need not include\n")
860 wxT("anything that is normally distributed (in either source or binary\n")
861 wxT("form) with the major components (compiler, kernel, and so on) of the\n")
862 wxT("operating system on which the executable runs, unless that component\n")
863 wxT("itself accompanies the executable.\n")
864 wxT("<p><p>\n")
865 wxT("If distribution of executable or object code is made by offering\n")
866 wxT("access to copy from a designated place, then offering equivalent\n")
867 wxT("access to copy the source code from the same place counts as\n")
868 wxT("distribution of the source code, even though third parties are not\n")
869 wxT("compelled to copy the source along with the object code.\n")
870 wxT("<p><p>\n")
871 wxT(" 4. You may not copy, modify, sublicense, or distribute the Program\n")
872 wxT("except as expressly provided under this License. Any attempt\n")
873 wxT("otherwise to copy, modify, sublicense or distribute the Program is\n")
874 wxT("void, and will automatically terminate your rights under this License.\n")
875 wxT("However, parties who have received copies, or rights, from you under\n")
876 wxT("this License will not have their licenses terminated so long as such\n")
877 wxT("parties remain in full compliance.\n")
878 wxT("<p><p>\n")
879 wxT(" 5. You are not required to accept this License, since you have not\n")
880 wxT("signed it. However, nothing else grants you permission to modify or\n")
881 wxT("distribute the Program or its derivative works. These actions are\n")
882 wxT("prohibited by law if you do not accept this License. Therefore, by\n")
883 wxT("modifying or distributing the Program (or any work based on the\n")
884 wxT("Program), you indicate your acceptance of this License to do so, and\n")
885 wxT("all its terms and conditions for copying, distributing or modifying\n")
886 wxT("the Program or works based on it.\n")
887 wxT("<p><p>\n")
888 wxT(" 6. Each time you redistribute the Program (or any work based on the\n")
889 wxT("Program), the recipient automatically receives a license from the\n")
890 wxT("original licensor to copy, distribute or modify the Program subject to\n")
891 wxT("these terms and conditions. You may not impose any further\n")
892 wxT("restrictions on the recipients' exercise of the rights granted herein.\n")
893 wxT("You are not responsible for enforcing compliance by third parties to\n")
894 wxT("this License.\n")
895 wxT("<p><p>\n")
896 wxT(" 7. If, as a consequence of a court judgment or allegation of patent\n")
897 wxT("infringement or for any other reason (not limited to patent issues),\n")
898 wxT("conditions are imposed on you (whether by court order, agreement or\n")
899 wxT("otherwise) that contradict the conditions of this License, they do not\n")
900 wxT("excuse you from the conditions of this License. If you cannot\n")
901 wxT("distribute so as to satisfy simultaneously your obligations under this\n")
902 wxT("License and any other pertinent obligations, then as a consequence you\n")
903 wxT("may not distribute the Program at all. For example, if a patent\n")
904 wxT("license would not permit royalty-free redistribution of the Program by\n")
905 wxT("all those who receive copies directly or indirectly through you, then\n")
906 wxT("the only way you could satisfy both it and this License would be to\n")
907 wxT("refrain entirely from distribution of the Program.\n")
908 wxT("<p><p>\n")
909 wxT("If any portion of this section is held invalid or unenforceable under\n")
910 wxT("any particular circumstance, the balance of the section is intended to\n")
911 wxT("apply and the section as a whole is intended to apply in other\n")
912 wxT("circumstances.\n")
913 wxT("<p><p>\n")
914 wxT("It is not the purpose of this section to induce you to infringe any\n")
915 wxT("patents or other property right claims or to contest validity of any\n")
916 wxT("such claims; this section has the sole purpose of protecting the\n")
917 wxT("integrity of the free software distribution system, which is\n")
918 wxT("implemented by public license practices. Many people have made\n")
919 wxT("generous contributions to the wide range of software distributed\n")
920 wxT("through that system in reliance on consistent application of that\n")
921 wxT("system; it is up to the author/donor to decide if he or she is willing\n")
922 wxT("to distribute software through any other system and a licensee cannot\n")
923 wxT("impose that choice.\n")
924 wxT("<p><p>\n")
925 wxT("This section is intended to make thoroughly clear what is believed to\n")
926 wxT("be a consequence of the rest of this License.\n")
927 wxT("<p><p>\n")
928 wxT(" 8. If the distribution and/or use of the Program is restricted in\n")
929 wxT("certain countries either by patents or by copyrighted interfaces, the\n")
930 wxT("original copyright holder who places the Program under this License\n")
931 wxT("may add an explicit geographical distribution limitation excluding\n")
932 wxT("those countries, so that distribution is permitted only in or among\n")
933 wxT("countries not thus excluded. In such case, this License incorporates\n")
934 wxT("the limitation as if written in the body of this License.\n")
935 wxT("<p><p>\n")
936 wxT(" 9. The Free Software Foundation may publish revised and/or new versions\n")
937 wxT("of the General Public License from time to time. Such new versions will\n")
938 wxT("be similar in spirit to the present version, but may differ in detail to\n")
939 wxT("address new problems or concerns.\n")
940 wxT("<p><p>\n")
941 wxT("Each version is given a distinguishing version number. If the Program\n")
942 wxT("specifies a version number of this License which applies to it and \"any\n")
943 wxT("later version\", you have the option of following the terms and conditions\n")
944 wxT("either of that version or of any later version published by the Free\n")
945 wxT("Software Foundation. If the Program does not specify a version number of\n")
946 wxT("this License, you may choose any version ever published by the Free Software\n")
947 wxT("Foundation.\n")
948 wxT("<p><p>\n")
949 wxT(" 10. If you wish to incorporate parts of the Program into other free\n")
950 wxT("programs whose distribution conditions are different, write to the author\n")
951 wxT("to ask for permission. For software which is copyrighted by the Free\n")
952 wxT("Software Foundation, write to the Free Software Foundation; we sometimes\n")
953 wxT("make exceptions for this. Our decision will be guided by the two goals\n")
954 wxT("of preserving the free status of all derivatives of our free software and\n")
955 wxT("of promoting the sharing and reuse of software generally.\n")
956 wxT("<p><p>\n")
957 wxT(" <center>NO WARRANTY\n</center>")
958 wxT("<p><p>\n")
959 wxT(" 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n")
960 wxT("FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n")
961 wxT("OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n")
962 wxT("PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n")
963 wxT("OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n")
964 wxT("MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n")
965 wxT("TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n")
966 wxT("PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n")
967 wxT("REPAIR OR CORRECTION.\n")
968 wxT("<p><p>\n")
969 wxT(" 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n")
970 wxT("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n")
971 wxT("REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n")
972 wxT("INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n")
973 wxT("OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n")
974 wxT("TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n")
975 wxT("YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n")
976 wxT("PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n")
977 wxT("POSSIBILITY OF SUCH DAMAGES.\n"));
978 
979  html->SetPage( PageText );
980 
981  S.Prop(1).AddWindow( html, wxEXPAND );
982 
983  S.EndVerticalLay();
984  S.EndNotebookPage();
985 }
986 
987 void AboutDialog::AddCredit(wxString &&description, Role role)
988 {
989  creditItems.emplace_back(std::move(description), role);
990 }
991 
993 {
994  wxString s;
995 
996  for (const auto &item : creditItems)
997  {
998  if (item.role == role)
999  {
1000  s += item.description;
1001  s += wxT("<br>");
1002  }
1003  }
1004 
1005  // Strip last <br>, if any
1006  if (s.Right(4) == wxT("<br>"))
1007  s = s.Left(s.Length() - 4);
1008 
1009  return s;
1010 }
1011 
1016 void AboutDialog::AddBuildinfoRow( wxString* htmlstring, const wxChar * libname, const wxChar * libdesc, const wxString &status)
1017 {
1018  *htmlstring += wxT("<tr><td>");
1019  *htmlstring += libname;
1020  *htmlstring += wxT("</td><td>(");
1021  *htmlstring += libdesc;
1022  *htmlstring += wxT(")</td><td>");
1023  *htmlstring += status;
1024  *htmlstring += wxT("</td></tr>");
1025 }
1026 
1031 void AboutDialog::AddBuildinfoRow( wxString* htmlstring, const wxChar * libname, const wxChar * libdesc)
1032 {
1033  *htmlstring += wxT("<tr><td>");
1034  *htmlstring += libname;
1035  *htmlstring += wxT("</td><td>");
1036  *htmlstring += libdesc;
1037  *htmlstring += wxT("</td></tr>");
1038 }
1039 
1041 {
1042  sActiveInstance = {};
1043 }
1044 
1045 void AboutDialog::OnOK(wxCommandEvent & WXUNUSED(event))
1046 {
1047 #ifdef __WXMAC__
1048  Destroy();
1049 #else
1050  EndModal(wxID_OK);
1051 #endif
1052 }
static AboutDialog * ActiveIntance()
void PopulateLicensePage(ShuttleGui &S)
#define AUDACITY_VERSION_STRING
Definition: Audacity.h:81
AUDACITY_DLL_API Theme theTheme
Definition: Theme.cpp:209
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI...
Definition: ShuttleGui.h:409
wxWindow * AddWindow(wxWindow *pWindow, int Flags=wxALIGN_CENTRE|wxALL)
Definition: ShuttleGui.cpp:288
void EndNotebook()
Definition: ShuttleGui.cpp:897
void CreateCreditsList()
void EndNotebookPage()
Definition: ShuttleGui.cpp:948
#define VER_CHECK_URL
const wxString VerCheckUrl()
Definition: AboutDialog.cpp:84
void OnOK(wxCommandEvent &event)
void AddCredit(wxString &&description, Role role)
const wxString VerCheckHtml()
Definition: AboutDialog.cpp:96
#define safenew
Definition: Audacity.h:230
#define REV_IDENT
Definition: AboutDialog.cpp:67
void AddBuildinfoRow(wxString *htmlstring, const wxChar *libname, const wxChar *libdesc, const wxString &status)
Add a table row saying if a library is used or not.
void EndVerticalLay()
#define LOGOWITHNAME_WIDTH
void PopulateAudacityPage(ShuttleGui &S)
virtual ~AboutDialog()
wxString FormatHtmlText(const wxString &Text)
Definition: HelpText.cpp:318
The AboutDialog shows the program version and developer credits.
Definition: AboutDialog.h:51
wxWindow * GetParent()
Definition: ShuttleGui.h:294
HtmlWindow Class.
Definition: HtmlWindow.h:39
wxStaticBitmap * icon
Definition: AboutDialog.h:62
EVT_BUTTON(wxID_NO, DependencyDialog::OnNo) EVT_BUTTON(wxID_YES
AboutDialogCreditItemsList creditItems
Definition: AboutDialog.h:76
void PopulateInformationPage(ShuttleGui &S)
: Fills out the "Information" tab of the preferences dialogue
IMPLEMENT_CLASS(ControlToolBar, ToolBar)
_("Move Track &Down")+wxT("\t")+(GetActiveProject() -> GetCommandManager() ->GetKeyFromName(wxT("TrackMoveDown")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveTopID, _("Move Track to &Top")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveTop")).Raw()), OnMoveTrack) POPUP_MENU_ITEM(OnMoveBottomID, _("Move Track to &Bottom")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveBottom")).Raw()), OnMoveTrack)#define SET_TRACK_NAME_PLUGIN_SYMBOLclass SetTrackNameCommand:public AudacityCommand
static wxString DataDir()
Audacity user data directory.
Definition: FileNames.cpp:130
ShuttleGui & Prop(int iProp)
Definition: ShuttleGui.h:418
#define LOGOWITHNAME_HEIGHT
wxNotebook * StartNotebook()
Definition: ShuttleGui.cpp:883
wxColour & Colour(int iIndex)
Definition: Theme.cpp:1225
#define ABOUT_DIALOG_WIDTH
END_EVENT_TABLE()
wxNotebookPage * StartNotebookPage(const wxString &Name)
Definition: ShuttleGui.cpp:904
const wxString VerCheckArgs()
Definition: AboutDialog.cpp:73
wxString GetCreditsByRole(AboutDialog::Role role)
AboutDialog(wxWindow *parent)
void StartVerticalLay(int iProp=1)