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: [[https://www.darkaudacity.com/|https://www.darkaudacity.com/]]") +
373 #else
374  []{
375  // Will this post-translation substitution work in all locales?
376  // As of 2.2.2, yes for all of the up-to-date languages.
377  auto str =
378  _("<p><br>&nbsp; &nbsp; <b>Audacity<sup>&reg;</sup></b> software is copyright &copy; 1999-2017 Audacity Team.<br>");
379  str.Replace( wxT("2017"), wxT("2018") );
380  return str;
381  }() +
382 
383  _("&nbsp; &nbsp; The name <b>Audacity</b> is a registered trademark of Dominic Mazzoni.<br><br>") +
384 #endif
385 
386  wxT("</center>")
387  );
388 
389  auto pPage = S.StartNotebookPage( _("Audacity") );
390  S.StartVerticalLay(1);
391  {
392  //v For now, change to AudacityLogoWithName via old-fashioned way, not Theme.
393  wxBitmap logo(AudacityLogoWithName_xpm); //v
394 
395  // JKC: Resize to 50% of size. Later we may use a smaller xpm as
396  // our source, but this allows us to tweak the size - if we want to.
397  // It also makes it easier to revert to full size if we decide to.
398  const float fScale = 0.5f;// smaller size.
399  wxImage RescaledImage(logo.ConvertToImage());
400  wxColour MainColour(
401  RescaledImage.GetRed(1,1),
402  RescaledImage.GetGreen(1,1),
403  RescaledImage.GetBlue(1,1));
404  pPage->SetBackgroundColour(MainColour);
405  // wxIMAGE_QUALITY_HIGH not supported by wxWidgets 2.6.1, or we would use it here.
406  RescaledImage.Rescale((int)(LOGOWITHNAME_WIDTH * fScale), (int)(LOGOWITHNAME_HEIGHT *fScale));
407  wxBitmap RescaledBitmap(RescaledImage);
408 
409  icon =
410  safenew wxStaticBitmap(S.GetParent(), -1,
411  //*logo, //v
412  //v theTheme.Bitmap(bmpAudacityLogo), wxPoint(93, 10), wxSize(215, 190));
413  //v theTheme.Bitmap(bmpAudacityLogoWithName),
414  RescaledBitmap,
415  wxDefaultPosition,
416  wxSize((int)(LOGOWITHNAME_WIDTH*fScale), (int)(LOGOWITHNAME_HEIGHT*fScale)));
417  }
418  S.Prop(0).AddWindow( icon );
419 
421  wxDefaultPosition,
422  wxSize(ABOUT_DIALOG_WIDTH, 359),
423  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
424  html->SetFocus();
425  html->SetPage(creditStr);
426 
427  /* locate the html renderer where it fits in the dialogue */
428  S.Prop(1).AddWindow( html, wxEXPAND );
429 
430  S.EndVerticalLay();
431  S.EndNotebookPage();
432 }
433 
440 {
441  wxString informationStr; // string to build up list of information in
442  S.StartNotebookPage( _("Build Information") ); // start the tab
443  S.StartVerticalLay(2); // create the window
444  HtmlWindow *html = safenew LinkingHtmlWindow(S.GetParent(), -1, wxDefaultPosition,
445  wxSize(ABOUT_DIALOG_WIDTH, 264),
446  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
447  // create a html pane in it to put the content in.
448  wxString enabled = _("Enabled");
449  wxString disabled = _("Disabled");
450  wxString blank = wxT("");
451 
452  /* this builds up the list of information to go in the window in the string
453  * informationStr */
454  informationStr = wxT("<h2><center>");
455  informationStr += _("Build Information");
456  informationStr += wxT("</center></h2>\n");
457  informationStr += VerCheckHtml();
458  // top level heading
459  informationStr += wxT("<h3>");
460  informationStr += _("File Format Support");
461  informationStr += wxT("</h3>\n<p>");
462  // 2nd level headings to split things up a bit
463 
464 
465  informationStr += wxT("<table>"); // start table of libraries
466 
467 
468  #ifdef USE_LIBMAD
469  /* i18n-hint: This is what the library (libmad) does - imports MP3 files */
470  AddBuildinfoRow(&informationStr, wxT("libmad"), _("MP3 Importing"), enabled);
471  #else
472  AddBuildinfoRow(&informationStr, wxT("libmad"), _("MP3 Importing"), disabled);
473  #endif
474 
475  /* i18n-hint: Ogg is the container format. Vorbis is the compression codec.
476  * Both are proper nouns and shouldn't be translated */
477  #ifdef USE_LIBVORBIS
478  AddBuildinfoRow(&informationStr, wxT("libvorbis"),
479  _("Ogg Vorbis Import and Export"), enabled);
480  #else
481  AddBuildinfoRow(&informationStr, wxT("libvorbis"),
482  _("Ogg Vorbis Import and Export"), disabled);
483  #endif
484 
485  #ifdef USE_LIBID3TAG
486  AddBuildinfoRow(&informationStr, wxT("libid3tag"), _("ID3 tag support"),
487  enabled);
488  #else
489  AddBuildinfoRow(&informationStr, wxT("libid3tag"), _("ID3 tag support"),
490  disabled);
491  #endif
492 
493  /* i18n-hint: FLAC stands for Free Lossless Audio Codec, but is effectively
494  * a proper noun and so shouldn't be translated */
495  # if USE_LIBFLAC
496  AddBuildinfoRow(&informationStr, wxT("libflac"), _("FLAC import and export"),
497  enabled);
498  # else
499  AddBuildinfoRow(&informationStr, wxT("libflac"), _("FLAC import and export"),
500  disabled);
501  # endif
502 
503  # if USE_LIBTWOLAME
504  AddBuildinfoRow(&informationStr, wxT("libtwolame"), _("MP2 export"),
505  enabled);
506  # else
507  AddBuildinfoRow(&informationStr, wxT("libtwolame"), _("MP2 export"),
508  disabled);
509  # endif
510 
511  # if USE_QUICKTIME
512  AddBuildinfoRow(&informationStr, wxT("QuickTime"), _("Import via QuickTime"),
513  enabled);
514  # else
515  AddBuildinfoRow(&informationStr, wxT("QuickTime"), _("Import via QuickTime"),
516  disabled);
517  # endif
518 
519  #ifdef USE_FFMPEG
520  AddBuildinfoRow(&informationStr, wxT("ffmpeg"), _("FFmpeg Import/Export"), enabled);
521  #else
522  AddBuildinfoRow(&informationStr, wxT("ffmpeg"), _("FFmpeg Import/Export"), disabled);
523  #endif
524 
525  #ifdef USE_GSTREAMER
526  AddBuildinfoRow(&informationStr, wxT("gstreamer"), _("Import via GStreamer"), enabled);
527  #else
528  AddBuildinfoRow(&informationStr, wxT("gstreamer"), _("Import via GStreamer"), disabled);
529  #endif
530 
531  informationStr += wxT("</table>\n"); //end table of file format libraries
532  informationStr += wxT("<h3>");
533  /* i18n-hint: Libraries that are essential to audacity */
534  informationStr += _("Core Libraries");
535  informationStr += wxT("</h3>\n<table>"); // start table of features
536 
537  AddBuildinfoRow(&informationStr, wxT("libsoxr"),
538  _("Sample rate conversion"), enabled);
539 
540  AddBuildinfoRow(&informationStr, wxT("PortAudio"),
541  _("Audio playback and recording"), wxString(wxT("v19")));
542 
543  AddBuildinfoRow(&informationStr, wxT("wxWidgets"),
544  _("Cross-platform GUI library"), wxVERSION_NUM_DOT_STRING_T);
545 
546  informationStr += wxT("</table>\n"); //end table of libraries
547  informationStr += wxT("<h3>");
548  informationStr += _("Features");
549  informationStr += wxT("</h3>\n<table>"); // start table of features
550 
551 #ifdef EXPERIMENTAL_DA
552  AddBuildinfoRow(&informationStr, wxT("Theme"), _("Dark Theme Extras"), enabled);
553 #else
554  AddBuildinfoRow(&informationStr, wxT("Theme"), _("Dark Theme Extras"), disabled);
555 #endif
556 
557  # if USE_NYQUIST
558  AddBuildinfoRow(&informationStr, wxT("Nyquist"), _("Plug-in support"),
559  enabled);
560  # else
561  AddBuildinfoRow(&informationStr, wxT("Nyquist"), _("Plug-in support"),
562  disabled);
563  # endif
564 
565  # if USE_LADSPA
566  AddBuildinfoRow(&informationStr, wxT("LADSPA"), _("Plug-in support"),
567  enabled);
568  # else
569  AddBuildinfoRow(&informationStr, wxT("LADSPA"), _("Plug-in support"),
570  disabled);
571  # endif
572 
573  # if USE_VAMP
574  AddBuildinfoRow(&informationStr, wxT("Vamp"), _("Plug-in support"),
575  enabled);
576  # else
577  AddBuildinfoRow(&informationStr, wxT("Vamp"), _("Plug-in support"),
578  disabled);
579  # endif
580 
581  # if USE_AUDIO_UNITS
582  AddBuildinfoRow(&informationStr, wxT("Audio Units"), _("Plug-in support"),
583  enabled);
584  # else
585  AddBuildinfoRow(&informationStr, wxT("Audio Units"), _("Plug-in support"),
586  disabled);
587  # endif
588 
589  # if USE_VST
590  AddBuildinfoRow(&informationStr, wxT("VST"), _("Plug-in support"),
591  enabled);
592  # else
593  AddBuildinfoRow(&informationStr, wxT("VST"), _("Plug-in support"),
594  disabled);
595  # endif
596 
597  # if USE_LV2
598  AddBuildinfoRow(&informationStr, wxT("LV2"), _("Plug-in support"),
599  enabled);
600  # else
601  AddBuildinfoRow(&informationStr, wxT("LV2"), _("Plug-in support"),
602  disabled);
603  # endif
604 
605  # if USE_PORTMIXER
606  AddBuildinfoRow(&informationStr, wxT("PortMixer"), _("Sound card mixer support"),
607  enabled);
608  # else
609  AddBuildinfoRow(&informationStr, wxT("PortMixer"), _("Sound card mixer support"),
610  disabled);
611  # endif
612 
613  # if USE_SOUNDTOUCH
614  AddBuildinfoRow(&informationStr, wxT("SoundTouch"), _("Pitch and Tempo Change support"),
615  enabled);
616  # else
617  AddBuildinfoRow(&informationStr, wxT("SoundTouch"), _("Pitch and Tempo Change support"),
618  disabled);
619  # endif
620 
621  # if USE_SBSMS
622  AddBuildinfoRow(&informationStr, wxT("SBSMS"), _("Extreme Pitch and Tempo Change support"),
623  enabled);
624  # else
625  AddBuildinfoRow(&informationStr, wxT("SBSMS"), _("Extreme Pitch and Tempo Change support"),
626  disabled);
627  # endif
628 
629  informationStr += wxT("</table>\n"); // end of table of features
630 
631  informationStr += wxT("<h3>");
632  /* i18n-hint: Information about when audacity was compiled */
633  informationStr += _("Build Information");
634  informationStr += wxT("</h3>\n<table>");
635 
636  // Current date
637  AddBuildinfoRow(&informationStr, _("Program build date: "), __TDATE__);
638  AddBuildinfoRow(&informationStr, _("Commit Id:"), REV_IDENT );
639 #ifdef __WXDEBUG__
640  AddBuildinfoRow(&informationStr, _("Build type:"), _("Debug build"));
641 #else
642  AddBuildinfoRow(&informationStr, _("Build type:"), _("Release build"));
643 #endif
644 
645 #ifdef _MSC_FULL_VER
646  AddBuildinfoRow(&informationStr, _("Compiler:"),
647  wxString::Format(wxT("MSVC %02d.%02d.%05d.%02d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000, _MSC_BUILD));
648 #endif
649 
650 #ifdef __GNUC_PATCHLEVEL__
651 #ifdef __MINGW32__
652  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("MinGW ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
653 #else
654  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("GCC ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
655 #endif
656 #endif
657 
658 #ifdef __clang_version__
659  AddBuildinfoRow(&informationStr, _("Compiler:"), wxT("clang ") __clang_version__);
660 #endif
661 
662  // Install prefix
663  /* i18n-hint: The directory audacity is installed into (on *nix systems) */
664 #ifdef __WXGTK__
665  AddBuildinfoRow(&informationStr, _("Installation Prefix: "), \
666  wxT(INSTALL_PREFIX));
667 #endif
668 
669  // Location of settings
670  AddBuildinfoRow(&informationStr,_("Settings folder: "), \
672  // end of table
673  informationStr += wxT("</table>\n");
674 
675  informationStr = FormatHtmlText( informationStr );
676 
677  html->SetPage(informationStr); // push the page into the html renderer
678  S.Prop(2).AddWindow( html, wxEXPAND ); // make it fill the page
679  // I think the 2 here goes with the StartVerticalLay() call above?
680  S.EndVerticalLay(); // end window
681  S.EndNotebookPage(); // end the tab
682 }
683 
684 
686 {
687  S.StartNotebookPage( _("GPL License") );
688  S.StartVerticalLay(1);
690  wxDefaultPosition,
691  wxSize(ABOUT_DIALOG_WIDTH, 264),
692  wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
693 
694 // I tried using <pre> here to get a monospaced font,
695 // as is normally used for the GPL.
696 // However can't reduce the font size in that case. It looks
697 // better proportionally spaced.
698 //
699 // The GPL is not to be translated....
700  wxString PageText= FormatHtmlText(
701 wxT(" <center>GNU GENERAL PUBLIC LICENSE\n</center>")
702 wxT(" <center>Version 2, June 1991\n</center>")
703 wxT("<p><p>")
704 wxT(" Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n")
705 wxT(" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n")
706 wxT(" Everyone is permitted to copy and distribute verbatim copies\n")
707 wxT(" of this license document, but changing it is not allowed.\n")
708 wxT("\n")
709 wxT(" <center>Preamble\n</center>")
710 wxT("<p><p>\n")
711 wxT(" The licenses for most software are designed to take away your\n")
712 wxT("freedom to share and change it. By contrast, the GNU General Public\n")
713 wxT("License is intended to guarantee your freedom to share and change free\n")
714 wxT("software--to make sure the software is free for all its users. This\n")
715 wxT("General Public License applies to most of the Free Software\n")
716 wxT("Foundation's software and to any other program whose authors commit to\n")
717 wxT("using it. (Some other Free Software Foundation software is covered by\n")
718 wxT("the GNU Library General Public License instead.) You can apply it to\n")
719 wxT("your programs, too.\n")
720 wxT("<p><p>\n")
721 wxT(" When we speak of free software, we are referring to freedom, not\n")
722 wxT("price. Our General Public Licenses are designed to make sure that you\n")
723 wxT("have the freedom to distribute copies of free software (and charge for\n")
724 wxT("this service if you wish), that you receive source code or can get it\n")
725 wxT("if you want it, that you can change the software or use pieces of it\n")
726 wxT("in new free programs; and that you know you can do these things.\n")
727 wxT("<p><p>\n")
728 wxT(" To protect your rights, we need to make restrictions that forbid\n")
729 wxT("anyone to deny you these rights or to ask you to surrender the rights.\n")
730 wxT("These restrictions translate to certain responsibilities for you if you\n")
731 wxT("distribute copies of the software, or if you modify it.\n")
732 wxT("<p><p>\n")
733 wxT(" For example, if you distribute copies of such a program, whether\n")
734 wxT("gratis or for a fee, you must give the recipients all the rights that\n")
735 wxT("you have. You must make sure that they, too, receive or can get the\n")
736 wxT("source code. And you must show them these terms so they know their\n")
737 wxT("rights.\n")
738 wxT("<p><p>\n")
739 wxT(" We protect your rights with two steps: (1) copyright the software, and\n")
740 wxT("(2) offer you this license which gives you legal permission to copy,\n")
741 wxT("distribute and/or modify the software.\n")
742 wxT("<p><p>\n")
743 wxT(" Also, for each author's protection and ours, we want to make certain\n")
744 wxT("that everyone understands that there is no warranty for this free\n")
745 wxT("software. If the software is modified by someone else and passed on, we\n")
746 wxT("want its recipients to know that what they have is not the original, so\n")
747 wxT("that any problems introduced by others will not reflect on the original\n")
748 wxT("authors' reputations.\n")
749 wxT("<p><p>\n")
750 wxT(" Finally, any free program is threatened constantly by software\n")
751 wxT("patents. We wish to avoid the danger that redistributors of a free\n")
752 wxT("program will individually obtain patent licenses, in effect making the\n")
753 wxT("program proprietary. To prevent this, we have made it clear that any\n")
754 wxT("patent must be licensed for everyone's free use or not licensed at all.\n")
755 wxT("<p><p>\n")
756 wxT(" The precise terms and conditions for copying, distribution and\n")
757 wxT("modification follow.\n")
758 wxT("<p><p>\n")
759 wxT(" <center>GNU GENERAL PUBLIC LICENSE\n</center>")
760 wxT(" <center>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n</center>")
761 wxT("<p><p>\n")
762 wxT(" 0. This License applies to any program or other work which contains\n")
763 wxT("a notice placed by the copyright holder saying it may be distributed\n")
764 wxT("under the terms of this General Public License. The \"Program\", below,\n")
765 wxT("refers to any such program or work, and a \"work based on the Program\"\n")
766 wxT("means either the Program or any derivative work under copyright law:\n")
767 wxT("that is to say, a work containing the Program or a portion of it,\n")
768 wxT("either verbatim or with modifications and/or translated into another\n")
769 wxT("language. (Hereinafter, translation is included without limitation in\n")
770 wxT("the term \"modification\".) Each licensee is addressed as \"you\".\n")
771 wxT("<p><p>\n")
772 wxT("Activities other than copying, distribution and modification are not\n")
773 wxT("covered by this License; they are outside its scope. The act of\n")
774 wxT("running the Program is not restricted, and the output from the Program\n")
775 wxT("is covered only if its contents constitute a work based on the\n")
776 wxT("Program (independent of having been made by running the Program).\n")
777 wxT("Whether that is true depends on what the Program does.\n")
778 wxT("<p><p>\n")
779 wxT(" 1. You may copy and distribute verbatim copies of the Program's\n")
780 wxT("source code as you receive it, in any medium, provided that you\n")
781 wxT("conspicuously and appropriately publish on each copy an appropriate\n")
782 wxT("copyright notice and disclaimer of warranty; keep intact all the\n")
783 wxT("notices that refer to this License and to the absence of any warranty;\n")
784 wxT("and give any other recipients of the Program a copy of this License\n")
785 wxT("along with the Program.\n")
786 wxT("<p><p>\n")
787 wxT("You may charge a fee for the physical act of transferring a copy, and\n")
788 wxT("you may at your option offer warranty protection in exchange for a fee.\n")
789 wxT("<p><p>\n")
790 wxT(" 2. You may modify your copy or copies of the Program or any portion\n")
791 wxT("of it, thus forming a work based on the Program, and copy and\n")
792 wxT("distribute such modifications or work under the terms of Section 1\n")
793 wxT("above, provided that you also meet all of these conditions:\n")
794 wxT("<p><p>\n")
795 wxT("<blockquote>")
796 wxT(" a) You must cause the modified files to carry prominent notices\n")
797 wxT(" stating that you changed the files and the date of any change.\n")
798 wxT("<p><p>\n")
799 wxT(" b) You must cause any work that you distribute or publish, that in\n")
800 wxT(" whole or in part contains or is derived from the Program or any\n")
801 wxT(" part thereof, to be licensed as a whole at no charge to all third\n")
802 wxT(" parties under the terms of this License.\n")
803 wxT("<p><p>\n")
804 wxT(" c) If the modified program normally reads commands interactively\n")
805 wxT(" when run, you must cause it, when started running for such\n")
806 wxT(" interactive use in the most ordinary way, to print or display an\n")
807 wxT(" announcement including an appropriate copyright notice and a\n")
808 wxT(" notice that there is no warranty (or else, saying that you provide\n")
809 wxT(" a warranty) and that users may redistribute the program under\n")
810 wxT(" these conditions, and telling the user how to view a copy of this\n")
811 wxT(" License. (Exception: if the Program itself is interactive but\n")
812 wxT(" does not normally print such an announcement, your work based on\n")
813 wxT(" the Program is not required to print an announcement.)\n")
814 wxT("</blockquote>")
815 wxT("<p><p>\n")
816 wxT("These requirements apply to the modified work as a whole. If\n")
817 wxT("identifiable sections of that work are not derived from the Program,\n")
818 wxT("and can be reasonably considered independent and separate works in\n")
819 wxT("themselves, then this License, and its terms, do not apply to those\n")
820 wxT("sections when you distribute them as separate works. But when you\n")
821 wxT("distribute the same sections as part of a whole which is a work based\n")
822 wxT("on the Program, the distribution of the whole must be on the terms of\n")
823 wxT("this License, whose permissions for other licensees extend to the\n")
824 wxT("entire whole, and thus to each and every part regardless of who wrote it.\n")
825 wxT("<p><p>\n")
826 wxT("Thus, it is not the intent of this section to claim rights or contest\n")
827 wxT("your rights to work written entirely by you; rather, the intent is to\n")
828 wxT("exercise the right to control the distribution of derivative or\n")
829 wxT("collective works based on the Program.\n")
830 wxT("<p><p>\n")
831 wxT("In addition, mere aggregation of another work not based on the Program\n")
832 wxT("with the Program (or with a work based on the Program) on a volume of\n")
833 wxT("a storage or distribution medium does not bring the other work under\n")
834 wxT("the scope of this License.\n")
835 wxT("<p><p>\n")
836 wxT(" 3. You may copy and distribute the Program (or a work based on it,\n")
837 wxT("under Section 2) in object code or executable form under the terms of\n")
838 wxT("Sections 1 and 2 above provided that you also do one of the following:\n")
839 wxT("<p><p>\n")
840 wxT("<blockquote>")
841 wxT(" a) Accompany it with the complete corresponding machine-readable\n")
842 wxT(" source code, which must be distributed under the terms of Sections\n")
843 wxT(" 1 and 2 above on a medium customarily used for software interchange; or,\n")
844 wxT("<p><p>\n")
845 wxT(" b) Accompany it with a written offer, valid for at least three\n")
846 wxT(" years, to give any third party, for a charge no more than your\n")
847 wxT(" cost of physically performing source distribution, a complete\n")
848 wxT(" machine-readable copy of the corresponding source code, to be\n")
849 wxT(" distributed under the terms of Sections 1 and 2 above on a medium\n")
850 wxT(" customarily used for software interchange; or,\n")
851 wxT("<p><p>\n")
852 wxT(" c) Accompany it with the information you received as to the offer\n")
853 wxT(" to distribute corresponding source code. (This alternative is\n")
854 wxT(" allowed only for noncommercial distribution and only if you\n")
855 wxT(" received the program in object code or executable form with such\n")
856 wxT(" an offer, in accord with Subsection b above.)\n")
857 wxT("</blockquote>")
858 wxT("<p><p>\n")
859 wxT("The source code for a work means the preferred form of the work for\n")
860 wxT("making modifications to it. For an executable work, complete source\n")
861 wxT("code means all the source code for all modules it contains, plus any\n")
862 wxT("associated interface definition files, plus the scripts used to\n")
863 wxT("control compilation and installation of the executable. However, as a\n")
864 wxT("special exception, the source code distributed need not include\n")
865 wxT("anything that is normally distributed (in either source or binary\n")
866 wxT("form) with the major components (compiler, kernel, and so on) of the\n")
867 wxT("operating system on which the executable runs, unless that component\n")
868 wxT("itself accompanies the executable.\n")
869 wxT("<p><p>\n")
870 wxT("If distribution of executable or object code is made by offering\n")
871 wxT("access to copy from a designated place, then offering equivalent\n")
872 wxT("access to copy the source code from the same place counts as\n")
873 wxT("distribution of the source code, even though third parties are not\n")
874 wxT("compelled to copy the source along with the object code.\n")
875 wxT("<p><p>\n")
876 wxT(" 4. You may not copy, modify, sublicense, or distribute the Program\n")
877 wxT("except as expressly provided under this License. Any attempt\n")
878 wxT("otherwise to copy, modify, sublicense or distribute the Program is\n")
879 wxT("void, and will automatically terminate your rights under this License.\n")
880 wxT("However, parties who have received copies, or rights, from you under\n")
881 wxT("this License will not have their licenses terminated so long as such\n")
882 wxT("parties remain in full compliance.\n")
883 wxT("<p><p>\n")
884 wxT(" 5. You are not required to accept this License, since you have not\n")
885 wxT("signed it. However, nothing else grants you permission to modify or\n")
886 wxT("distribute the Program or its derivative works. These actions are\n")
887 wxT("prohibited by law if you do not accept this License. Therefore, by\n")
888 wxT("modifying or distributing the Program (or any work based on the\n")
889 wxT("Program), you indicate your acceptance of this License to do so, and\n")
890 wxT("all its terms and conditions for copying, distributing or modifying\n")
891 wxT("the Program or works based on it.\n")
892 wxT("<p><p>\n")
893 wxT(" 6. Each time you redistribute the Program (or any work based on the\n")
894 wxT("Program), the recipient automatically receives a license from the\n")
895 wxT("original licensor to copy, distribute or modify the Program subject to\n")
896 wxT("these terms and conditions. You may not impose any further\n")
897 wxT("restrictions on the recipients' exercise of the rights granted herein.\n")
898 wxT("You are not responsible for enforcing compliance by third parties to\n")
899 wxT("this License.\n")
900 wxT("<p><p>\n")
901 wxT(" 7. If, as a consequence of a court judgment or allegation of patent\n")
902 wxT("infringement or for any other reason (not limited to patent issues),\n")
903 wxT("conditions are imposed on you (whether by court order, agreement or\n")
904 wxT("otherwise) that contradict the conditions of this License, they do not\n")
905 wxT("excuse you from the conditions of this License. If you cannot\n")
906 wxT("distribute so as to satisfy simultaneously your obligations under this\n")
907 wxT("License and any other pertinent obligations, then as a consequence you\n")
908 wxT("may not distribute the Program at all. For example, if a patent\n")
909 wxT("license would not permit royalty-free redistribution of the Program by\n")
910 wxT("all those who receive copies directly or indirectly through you, then\n")
911 wxT("the only way you could satisfy both it and this License would be to\n")
912 wxT("refrain entirely from distribution of the Program.\n")
913 wxT("<p><p>\n")
914 wxT("If any portion of this section is held invalid or unenforceable under\n")
915 wxT("any particular circumstance, the balance of the section is intended to\n")
916 wxT("apply and the section as a whole is intended to apply in other\n")
917 wxT("circumstances.\n")
918 wxT("<p><p>\n")
919 wxT("It is not the purpose of this section to induce you to infringe any\n")
920 wxT("patents or other property right claims or to contest validity of any\n")
921 wxT("such claims; this section has the sole purpose of protecting the\n")
922 wxT("integrity of the free software distribution system, which is\n")
923 wxT("implemented by public license practices. Many people have made\n")
924 wxT("generous contributions to the wide range of software distributed\n")
925 wxT("through that system in reliance on consistent application of that\n")
926 wxT("system; it is up to the author/donor to decide if he or she is willing\n")
927 wxT("to distribute software through any other system and a licensee cannot\n")
928 wxT("impose that choice.\n")
929 wxT("<p><p>\n")
930 wxT("This section is intended to make thoroughly clear what is believed to\n")
931 wxT("be a consequence of the rest of this License.\n")
932 wxT("<p><p>\n")
933 wxT(" 8. If the distribution and/or use of the Program is restricted in\n")
934 wxT("certain countries either by patents or by copyrighted interfaces, the\n")
935 wxT("original copyright holder who places the Program under this License\n")
936 wxT("may add an explicit geographical distribution limitation excluding\n")
937 wxT("those countries, so that distribution is permitted only in or among\n")
938 wxT("countries not thus excluded. In such case, this License incorporates\n")
939 wxT("the limitation as if written in the body of this License.\n")
940 wxT("<p><p>\n")
941 wxT(" 9. The Free Software Foundation may publish revised and/or new versions\n")
942 wxT("of the General Public License from time to time. Such new versions will\n")
943 wxT("be similar in spirit to the present version, but may differ in detail to\n")
944 wxT("address new problems or concerns.\n")
945 wxT("<p><p>\n")
946 wxT("Each version is given a distinguishing version number. If the Program\n")
947 wxT("specifies a version number of this License which applies to it and \"any\n")
948 wxT("later version\", you have the option of following the terms and conditions\n")
949 wxT("either of that version or of any later version published by the Free\n")
950 wxT("Software Foundation. If the Program does not specify a version number of\n")
951 wxT("this License, you may choose any version ever published by the Free Software\n")
952 wxT("Foundation.\n")
953 wxT("<p><p>\n")
954 wxT(" 10. If you wish to incorporate parts of the Program into other free\n")
955 wxT("programs whose distribution conditions are different, write to the author\n")
956 wxT("to ask for permission. For software which is copyrighted by the Free\n")
957 wxT("Software Foundation, write to the Free Software Foundation; we sometimes\n")
958 wxT("make exceptions for this. Our decision will be guided by the two goals\n")
959 wxT("of preserving the free status of all derivatives of our free software and\n")
960 wxT("of promoting the sharing and reuse of software generally.\n")
961 wxT("<p><p>\n")
962 wxT(" <center>NO WARRANTY\n</center>")
963 wxT("<p><p>\n")
964 wxT(" 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n")
965 wxT("FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n")
966 wxT("OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n")
967 wxT("PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n")
968 wxT("OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n")
969 wxT("MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n")
970 wxT("TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n")
971 wxT("PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n")
972 wxT("REPAIR OR CORRECTION.\n")
973 wxT("<p><p>\n")
974 wxT(" 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n")
975 wxT("WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n")
976 wxT("REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n")
977 wxT("INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n")
978 wxT("OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n")
979 wxT("TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n")
980 wxT("YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n")
981 wxT("PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n")
982 wxT("POSSIBILITY OF SUCH DAMAGES.\n"));
983 
984  html->SetPage( PageText );
985 
986  S.Prop(1).AddWindow( html, wxEXPAND );
987 
988  S.EndVerticalLay();
989  S.EndNotebookPage();
990 }
991 
992 void AboutDialog::AddCredit(wxString &&description, Role role)
993 {
994 #ifdef __AUDACITY_OLD_STD__
995  creditItems.push_back(AboutDialogCreditItem{ std::move(description), role });
996 #else
997  creditItems.emplace_back(std::move(description), role);
998 #endif
999 }
1000 
1002 {
1003  wxString s;
1004 
1005  for (const auto &item : creditItems)
1006  {
1007  if (item.role == role)
1008  {
1009  s += item.description;
1010  s += wxT("<br>");
1011  }
1012  }
1013 
1014  // Strip last <br>, if any
1015  if (s.Right(4) == wxT("<br>"))
1016  s = s.Left(s.Length() - 4);
1017 
1018  return s;
1019 }
1020 
1025 void AboutDialog::AddBuildinfoRow( wxString* htmlstring, const wxChar * libname, const wxChar * libdesc, const wxString &status)
1026 {
1027  *htmlstring += wxT("<tr><td>");
1028  *htmlstring += libname;
1029  *htmlstring += wxT("</td><td>(");
1030  *htmlstring += libdesc;
1031  *htmlstring += wxT(")</td><td>");
1032  *htmlstring += status;
1033  *htmlstring += wxT("</td></tr>");
1034 }
1035 
1040 void AboutDialog::AddBuildinfoRow( wxString* htmlstring, const wxChar * libname, const wxChar * libdesc)
1041 {
1042  *htmlstring += wxT("<tr><td>");
1043  *htmlstring += libname;
1044  *htmlstring += wxT("</td><td>");
1045  *htmlstring += libdesc;
1046  *htmlstring += wxT("</td></tr>");
1047 }
1048 
1050 {
1051  sActiveInstance = {};
1052 }
1053 
1054 void AboutDialog::OnOK(wxCommandEvent & WXUNUSED(event))
1055 {
1056 #ifdef __WXMAC__
1057  Destroy();
1058 #else
1059  EndModal(wxID_OK);
1060 #endif
1061 }
static AboutDialog * ActiveIntance()
void PopulateLicensePage(ShuttleGui &S)
#define AUDACITY_VERSION_STRING
Definition: Audacity.h:81
AUDACITY_DLL_API Theme theTheme
Definition: Theme.cpp:215
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI...
Definition: ShuttleGui.h:366
wxWindow * AddWindow(wxWindow *pWindow, int Flags=wxALIGN_CENTRE|wxALL)
Definition: ShuttleGui.cpp:257
void EndNotebook()
Definition: ShuttleGui.cpp:839
void CreateCreditsList()
AboutDialogCreditItem is a structure used by the AboutDialog to hold information about one contributo...
Definition: AboutDialog.h:27
void EndNotebookPage()
Definition: ShuttleGui.cpp:890
#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:223
#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()
Definition: ShuttleGui.cpp:991
#define LOGOWITHNAME_WIDTH
void PopulateAudacityPage(ShuttleGui &S)
virtual ~AboutDialog()
wxString FormatHtmlText(const wxString &Text)
Definition: HelpText.cpp:341
The AboutDialog shows the program version and developer credits.
Definition: AboutDialog.h:56
wxWindow * GetParent()
Definition: ShuttleGui.h:259
HtmlWindow Class.
Definition: HtmlWindow.h:35
wxStaticBitmap * icon
Definition: AboutDialog.h:67
EVT_BUTTON(wxID_NO, DependencyDialog::OnNo) EVT_BUTTON(wxID_YES
AboutDialogCreditItemsList creditItems
Definition: AboutDialog.h:81
void PopulateInformationPage(ShuttleGui &S)
: Fills out the "Information" tab of the preferences dialogue
_("Move Track &Down")+wxT("\t")+(GetActiveProject() -> GetCommandManager() ->GetKeyFromName(wxT("TrackMoveDown"))), OnMoveTrack) POPUP_MENU_ITEM(OnMoveTopID, _("Move Track to &Top")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveTop"))), OnMoveTrack) POPUP_MENU_ITEM(OnMoveBottomID, _("Move Track to &Bottom")+wxT("\t")+(GetActiveProject() ->GetCommandManager() ->GetKeyFromName(wxT("TrackMoveBottom"))), OnMoveTrack) void TrackMenuTable::OnSetName(wxCommandEvent &)
IMPLEMENT_CLASS(ControlToolBar, ToolBar)
static wxString DataDir()
Audacity user data directory.
Definition: FileNames.cpp:130
ShuttleGui & Prop(int iProp)
Definition: ShuttleGui.h:374
#define LOGOWITHNAME_HEIGHT
wxNotebook * StartNotebook()
Definition: ShuttleGui.cpp:825
wxColour & Colour(int iIndex)
Definition: Theme.cpp:1214
#define ABOUT_DIALOG_WIDTH
END_EVENT_TABLE()
wxNotebookPage * StartNotebookPage(const wxString &Name)
Definition: ShuttleGui.cpp:846
const wxString VerCheckArgs()
Definition: AboutDialog.cpp:73
wxString GetCreditsByRole(AboutDialog::Role role)
AboutDialog(wxWindow *parent)
void StartVerticalLay(int iProp=1)
Definition: ShuttleGui.cpp:982