31#include <wx/html/htmlwin.h>
32#include <wx/hyperlink.h>
33#include <wx/statbmp.h>
34#include <wx/sstream.h>
35#include <wx/txtstrm.h>
36#include <wx/statbox.h>
37#include <wx/stattext.h>
48#include "../images/AudacityLogoWithName.xpm"
58#include "RevisionIdent.h"
61#define REV_TIME "unknown date and time"
65#define REV_IDENT wxString( "[[https://github.com/audacity/audacity/commit/" )+ REV_LONG + "|" + wxString( REV_LONG ).Left(6) + "]] of " + REV_TIME
67#define REV_IDENT (XO("No revision identifier was provided").Translation())
70#if defined(HAS_SENTRY_REPORTING) || defined(HAVE_UPDATES_CHECK) || defined(USE_BREAKPAD)
71#define HAS_PRIVACY_POLICY
81 const auto sysAdminFormat =
83 XO(
"%s, system administration");
84 const auto coFounderFormat =
86 XO(
"%s, co-founder and developer");
87 const auto designerFormat =
90 const auto developerFormat =
93 const auto developerAndSupprtFormat =
95 XO(
"%s, developer and support");
96 const auto documentationAndSupportFormat =
98 XO(
"%s, documentation and support");
99 const auto qaDocumentationAndSupportFormat =
101 XO(
"%s, QA tester, documentation and support");
102 const auto documentationAndSupportFrenchFormat =
104 XO(
"%s, documentation and support, French");
105 const auto qualityAssuranceFormat =
107 XO(
"%s, quality assurance");
108 const auto accessibilityAdvisorFormat =
110 XO(
"%s, accessibility advisor");
111 const auto graphicArtistFormat =
113 XO(
"%s, graphic artist");
114 const auto composerFormat =
117 const auto testerFormat =
120 const auto NyquistPluginsFormat =
122 XO(
"%s, Nyquist plug-ins");
123 const auto webDeveloperFormat =
125 XO(
"%s, web developer");
126 const auto graphicsFormat =
250 XO(
"%s (incorporating %s, %s, %s, %s and %s)")
252 "[[http://lv2plug.in/|lv2]]",
316 wxDefaultPosition, wxDefaultSize,
317 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
323 this->SetBackgroundColour(
theTheme.
Colour( clrAboutBoxBackground ));
337 .AddButton(
XXO(
"OK"), wxALIGN_CENTER,
true);
344#define ABOUT_DIALOG_WIDTH 506
356 auto translatorCreditsMsgid =
XO(
"translator_credits");
357 auto translatorCredits = translatorCreditsMsgid.Translation();
358 if ( translatorCredits == translatorCreditsMsgid.MSGID().GET() )
360 translatorCredits.clear();
362 translatorCredits +=
wxT(
"<br>");
364 wxStringOutputStream o;
365 wxTextOutputStream informationStr( o );
371 << wxString(AUDACITY_VERSION_STRING)
372 <<
wxT(
"</center></h3>")
374 <<
XO(
"%s the free, open source, cross-platform software for recording and editing sounds.")
391 <<
XO(
"Distinguished %s Team members, not currently active")
397 <<
XO(
"Contributors")
402 <<
XO(
"Website and Graphics")
407 if(!translatorCredits.empty()) informationStr
419 <<
XO(
"%s includes code from the following projects:").Format(
ProgramName )
424 <<
XO(
"Special thanks:")
431 <<
wxT(
"[[https://www.audacityteam.org/|https://www.audacityteam.org/]]")
433 <<
wxT(
"<p><br> ")
436 <<
XO(
"%s software is copyright %s 1999-2024 %s Team.")
443 <<
wxT(
" ")
445 <<
XO(
"The name %s is a registered trademark.")
452 S.StartVerticalLay(1);
455 wxBitmap logo(AudacityLogoWithName_xpm);
458 const float fScale = 1.0f;
459 wxImage RescaledImage(logo.ConvertToImage());
461 RescaledImage.GetRed(1,1),
462 RescaledImage.GetGreen(1,1),
463 RescaledImage.GetBlue(1,1));
464 pPage->SetBackgroundColour(MainColour);
467 wxBitmap RescaledBitmap(RescaledImage);
470 safenew wxStaticBitmap(
S.GetParent(), -1,
478 S.Prop(0).AddWindow(
icon );
483 wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
487 S.Prop(1).Position( wxEXPAND ).Focus()
502 wxStringOutputStream o;
503 wxTextOutputStream informationStr( o );
504 S.StartNotebookPage(
XO(
"Build Information") );
505 S.StartVerticalLay(2);
508 wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
510 auto enabled =
XO(
"Enabled");
511 auto disabled =
XO(
"Disabled");
521 <<
wxT(
"</h3>\n<table>");
529 XO(
"Debug build (debug level %d)").Format(wxDEBUG_LEVEL);
531 XO(
"Release build (debug level %d)").Format(wxDEBUG_LEVEL);
534 if( (
sizeof(
void*) == 8) ) {
535 buildType =
XO(
"%s, 64 bits").Format( buildType );
537 buildType =
XO(
"%s, 32 bits").Format( buildType );
548 wxString::Format(
wxT(
"MSVC %02d.%02d.%05d.%02d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000, _MSC_BUILD));
551#ifdef __GNUC_PATCHLEVEL__
553 AddBuildinfoRow(&informationStr,
XO(
"Compiler:"),
wxT(
"MinGW ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
555 AddBuildinfoRow(&informationStr,
XO(
"Compiler:"),
wxT(
"GCC ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
559#ifdef __clang_version__
567 wxT(INSTALL_PREFIX));
583 informationStr <<
wxT(
"</table>\n");
589 <<
XO(
"Core Libraries")
590 <<
wxT(
"</h3>\n<table>");
593 XO(
"Cross-platform GUI library"),
Verbatim(wxVERSION_NUM_DOT_STRING_T));
599 XO(
"Sample rate conversion"), enabled);
601 informationStr <<
wxT(
"</table>\n");
605 <<
XO(
"File Format Support")
606 <<
wxT(
"</h3>\n<p>");
611 #if defined(USE_LIBMPG123)
619 &informationStr,
wxT(
"libmp3lame"),
622 XO(
"MP3 Export"), enabled);
625 &informationStr,
wxT(
"libopus"),
628 XO(
"Opus Import and Export"), disabled);
635 XO(
"Ogg Vorbis Import and Export"), enabled);
638 XO(
"Ogg Vorbis Import and Export"), disabled);
641 #if USE_LIBVORBIS && USE_LIBOPUS && USE_OPUSFILE
643 &informationStr,
wxT(
"libopus"),
645 XO(
"Opus Import and Export"), enabled);
648 &informationStr,
wxT(
"libopus"),
651 XO(
"Opus Import and Export"), disabled);
686 informationStr <<
wxT(
"</table>\n");
691 <<
wxT(
"</h3>\n<table>");
765 informationStr <<
wxT(
"</table>\n");
769 .Position( wxEXPAND )
781#if defined(HAS_PRIVACY_POLICY)
782 S.StartNotebookPage(
XC(
"Legal",
"about dialog"));
784 S.StartNotebookPage(
XO(
"GPL License"));
787#if defined(HAS_PRIVACY_POLICY)
788 S.Prop(0).StartPanel();
792 S.AddVariableText(
XC(
"PRIVACY POLICY",
"about dialog"),
true);
795 XO(
"App update checking and error reporting require network access. "
796 "These features are optional."));
803 wxT(
"%s"),
XO(
"our Privacy Policy"),
804 "https://www.audacityteam.org/about/desktop-privacy-notice/");
813 S.Prop(1).StartPanel();
817 wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
821 S.Prop(1).Position(wxEXPAND).AddWindow( html );
848 if (item.role == role)
850 s += item.description.Translation();
856 if (s.Right(4) ==
wxT(
"<br>"))
857 s = s.Left(s.length() - 4);
867 wxTextOutputStream *
str,
const wxChar * libname,
877 <<
wxT(
"</td></tr>");
885 wxTextOutputStream *
str,
893 <<
wxT(
"</td></tr>");
static const auto ProgramName
#define ABOUT_DIALOG_WIDTH
const wxString GPL_TEXT()
#define LOGOWITHNAME_WIDTH
#define LOGOWITHNAME_HEIGHT
EVT_BUTTON(wxID_NO, DependencyDialog::OnNo) EVT_BUTTON(wxID_YES
const TranslatableString name
XXO("&Cut/Copy/Paste Toolbar")
wxString FormatHtmlText(const wxString &Text)
TranslatableString Verbatim(wxString str)
Require calls to the one-argument constructor to go through this distinct global function name.
The AboutDialog shows the program version and developer credits.
void OnOK(wxCommandEvent &event)
void AddCredit(const wxString &name, Role role)
wxString GetCreditsByRole(AboutDialog::Role role)
AboutDialogCreditItemsList creditItems
void AddBuildinfoRow(wxTextOutputStream *str, const wxChar *libname, const TranslatableString &libdesc, const TranslatableString &status)
Add a table row saying if a library is used or not.
void PopulateInformationPage(ShuttleGui &S)
: Fills out the "Information" tab of the preferences dialogue
AboutDialog(wxWindow *parent)
static AboutDialog * ActiveIntance()
void PopulateLicensePage(ShuttleGui &S)
void PopulateAudacityPage(ShuttleGui &S)
An HtmlWindow that handles linked clicked - usually the link will go to our own local copy of the man...
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
wxColour & Colour(int iIndex)
Holds a msgid for the translation catalog; may also bind format arguments.
TranslatableString & Format(Args &&...args) &
Capture variadic format arguments (by copy) when there is no plural.
FILES_API FilePath ConfigDir()
Audacity user config directory.
FILES_API FilePath StateDir()
Audacity user state directory.
FILES_API FilePath CacheDir()
Audacity user cache directory.
FILES_API FilePath DataDir()
Audacity user data directory.
AboutDialog * sActiveInstance