mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-02 07:03:50 +01:00
Refactor AboutDialog.cpp and create BuildInfo.h
Move build information functionality into new `BuildInfo.h` header. Fix formatting issues in credits list. Add missing libraries to library list. Fix translation issues for contributor credits. Hide ugly macro and `#ifdef` usage inside `BuildInfo.h`. Convert some `#ifdef` usage into `constexpr` uses. Reassure the compiler that the compiler specific version macros exist. Reference-to: https://github.com/tenacityteam/tenacity/pull/361 Signed-off-by: Emily Mabrey <emabrey@tenacityaudio.org>
This commit is contained in:
44
locale/en.po
44
locale/en.po
@@ -619,119 +619,119 @@ msgstr "GPL License"
|
|||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, system administration"
|
msgid "%s, system administration"
|
||||||
msgstr "%s, pre-fork system administration"
|
msgstr "%s, Audacity system administration"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, co-founder and developer"
|
msgid "%s, co-founder and developer"
|
||||||
msgstr "%s, pre-fork co-founder and developer"
|
msgstr "%s, Audacity co-founder and developer"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, developer"
|
msgid "%s, developer"
|
||||||
msgstr "%s, pre-fork developer"
|
msgstr "%s, Audacity developer"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, developer and support"
|
msgid "%s, developer and support"
|
||||||
msgstr "%s, pre-fork developer and support"
|
msgstr "%s, Audacity developer and support"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, documentation and support"
|
msgid "%s, documentation and support"
|
||||||
msgstr "%s, pre-fork documentation and support"
|
msgstr "%s, Audacity documentation and support"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, QA tester, documentation and support"
|
msgid "%s, QA tester, documentation and support"
|
||||||
msgstr "%s, pre-fork QA tester, documentation and support"
|
msgstr "%s, Audacity QA tester, documentation and support"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, documentation and support, French"
|
msgid "%s, documentation and support, French"
|
||||||
msgstr "%s, pre-fork documentation and support, French"
|
msgstr "%s, Audacity documentation and support, French"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, quality assurance"
|
msgid "%s, quality assurance"
|
||||||
msgstr "%s, pre-fork quality assurance"
|
msgstr "%s, Audacity quality assurance"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, accessibility advisor"
|
msgid "%s, accessibility advisor"
|
||||||
msgstr "%s, pre-fork accessibility advisor"
|
msgstr "%s, Audacity accessibility advisor"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, graphic artist"
|
msgid "%s, graphic artist"
|
||||||
msgstr "%s, pre-fork graphic artist"
|
msgstr "%s, Audacity graphic artist"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, composer"
|
msgid "%s, composer"
|
||||||
msgstr "%s, pre-fork composer"
|
msgstr "%s, Audacity composer"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, tester"
|
msgid "%s, tester"
|
||||||
msgstr "%s, pre-fork tester"
|
msgstr "%s, Audacity tester"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, Nyquist plug-ins"
|
msgid "%s, Nyquist plug-ins"
|
||||||
msgstr "%s, pre-fork Nyquist plug-ins"
|
msgstr "%s, Audacity Nyquist plug-ins"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, web developer"
|
msgid "%s, web developer"
|
||||||
msgstr "%s, pre-fork web developer"
|
msgstr "%s, Audacity web developer"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s, graphics"
|
msgid "%s, graphics"
|
||||||
msgstr "%s, pre-fork graphics"
|
msgstr "%s, Audacity graphics"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, fuzzy, c-format
|
#, fuzzy, c-format
|
||||||
msgid "%s, lead Tenacity developer"
|
msgid "%s, lead Tenacity developer"
|
||||||
msgstr "%s, pre-fork web developer"
|
msgstr "%s, lead Tenacity developer"
|
||||||
|
|
||||||
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
#. i18n-hint: For "About Tenacity..." credits, substituting a person's proper
|
||||||
#. name
|
#. name
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, fuzzy, c-format
|
#, fuzzy, c-format
|
||||||
msgid "%s, Tenacity developer"
|
msgid "%s, Tenacity developer"
|
||||||
msgstr "%s, pre-fork web developer"
|
msgstr "%s, Tenacity developer"
|
||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
#, c-format
|
#, c-format
|
||||||
@@ -779,15 +779,15 @@ msgstr "%s includes code from the following projects:"
|
|||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
msgid "Emeritus:"
|
msgid "Emeritus:"
|
||||||
msgstr "Pre-fork Emeritus:"
|
msgstr "Audacity Emeritus:"
|
||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
msgid "Contributors"
|
msgid "Contributors"
|
||||||
msgstr "Pre-fork Contributors"
|
msgstr "Audacity Contributors"
|
||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
msgid "Website and Graphics"
|
msgid "Website and Graphics"
|
||||||
msgstr "Pre-fork Website and Graphics"
|
msgstr "Audacity Website and Graphics"
|
||||||
|
|
||||||
#. i18n-hint: The translation of "translator_credits" will appear
|
#. i18n-hint: The translation of "translator_credits" will appear
|
||||||
#. * in the credits in the About Audacity window. Use this to add
|
#. * in the credits in the About Audacity window. Use this to add
|
||||||
@@ -800,11 +800,11 @@ msgstr "translator_credits"
|
|||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
msgid "Translators"
|
msgid "Translators"
|
||||||
msgstr "Pre-fork Translators"
|
msgstr "Audacity Translators"
|
||||||
|
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
msgid "Special thanks:"
|
msgid "Special thanks:"
|
||||||
msgstr "Pre-fork Special thanks:"
|
msgstr "Audacity Special thanks:"
|
||||||
|
|
||||||
#. i18n-hint: The program's name substitutes for %s
|
#. i18n-hint: The program's name substitutes for %s
|
||||||
#: src/AboutDialog.cpp
|
#: src/AboutDialog.cpp
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ hold information about a credit item in the Credits list
|
|||||||
#include <wx/sstream.h>
|
#include <wx/sstream.h>
|
||||||
#include <wx/txtstrm.h>
|
#include <wx/txtstrm.h>
|
||||||
|
|
||||||
|
#include <BuildInfo.h>
|
||||||
#include "FileNames.h"
|
#include "FileNames.h"
|
||||||
#include "HelpText.h"
|
#include "HelpText.h"
|
||||||
#include "ShuttleGui.h"
|
#include "ShuttleGui.h"
|
||||||
@@ -44,28 +45,10 @@ hold information about a credit item in the Credits list
|
|||||||
#include "../images/AudacityLogoWithName.xpm"
|
#include "../images/AudacityLogoWithName.xpm"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// RevisionIdent contains the REV_TIME and REV_LONG defines from git commit information
|
|
||||||
#include "RevisionIdent.h"
|
|
||||||
|
|
||||||
//This needs to be outside the #ifdef or it won't end up in the POT file consistently
|
|
||||||
static wxString NoDateTimeText = XO("Unknown date and time").Translation();
|
|
||||||
|
|
||||||
#ifndef REV_TIME
|
|
||||||
#define REV_TIME NoDateTimeText
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//This needs to be outside the #ifdef or it won't end up in the POT file consistently
|
|
||||||
static wxString NoRevisionText = XO("No revision identifier was provided").Translation();
|
|
||||||
|
|
||||||
#ifdef REV_LONG
|
|
||||||
#define REV_IDENT wxString( "[[https://github.com/tenacityteam/tenacity/commit/" )+ REV_LONG + "|" + wxString( REV_LONG ).Left(6) + "]] of " + REV_TIME
|
|
||||||
#else
|
|
||||||
#define REV_IDENT (NoRevisionText)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// To substitute into many other translatable strings
|
// To substitute into many other translatable strings
|
||||||
static const auto ProgramName = Verbatim("Tenacity");
|
static const auto ProgramName = Verbatim("Tenacity");
|
||||||
|
|
||||||
static const auto PreforkProgramName = Verbatim("Audacity");
|
static const auto PreforkProgramName = Verbatim("Audacity");
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -110,37 +93,29 @@ void AboutDialog::OnOK(wxCommandEvent& WXUNUSED(event)) {
|
|||||||
EndModal(wxID_OK);
|
EndModal(wxID_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define ABOUT_DIALOG_WIDTH 506
|
|
||||||
#define ABOUT_DIALOG_HEIGHT 359
|
|
||||||
|
|
||||||
void AboutDialog::CreateTenacityTab(ShuttleGui& AboutDialogGUI) {
|
void AboutDialog::CreateTenacityTab(ShuttleGui& AboutDialogGUI) {
|
||||||
PopulateCreditsList();
|
PopulateCreditsList();
|
||||||
|
|
||||||
wxStringOutputStream tenacityPageGeneratedContent;
|
wxStringOutputStream tenacityPageGeneratedContent;
|
||||||
wxTextOutputStream tenacityPageContent(tenacityPageGeneratedContent); // string to build up list of information in
|
wxTextOutputStream tenacityPageContent(tenacityPageGeneratedContent); // string to build up list of information in
|
||||||
|
|
||||||
GenerateTenacityPageDescription(tenacityPageContent);
|
tenacityPageContent << wxT("<center>");
|
||||||
|
// Tenacity specific credits
|
||||||
GenerateTenacityTeamMembersInfo(tenacityPageContent);
|
GenerateTenacityPageDescription(tenacityPageContent);
|
||||||
GenerateSpecialThanksInfo(tenacityPageContent);
|
GenerateTenacityTeamMembersInfo(tenacityPageContent);
|
||||||
GenerateTenacityLibsInfo(tenacityPageContent);
|
GenerateTenacitySpecialThanksInfo(tenacityPageContent);
|
||||||
|
GenerateTenacityLibsInfo(tenacityPageContent);
|
||||||
// Pre-form (Audacity) credits
|
|
||||||
|
|
||||||
tenacityPageContent
|
|
||||||
<< wxT("<center><h3>")
|
|
||||||
<< PreforkProgramName
|
|
||||||
<< wxT("</h3></center>");
|
|
||||||
|
|
||||||
GeneratePreforkTeamMembersInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkEmeritusInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkContributorInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkTranslatorsInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkGraphicsInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkSpecialThanksInfo(tenacityPageContent);
|
|
||||||
GeneratePreforkWebsiteInfo(tenacityPageContent);
|
|
||||||
|
|
||||||
|
// Pre-fork (Audacity) credits
|
||||||
|
GeneratePreforkSubheader(tenacityPageContent);
|
||||||
|
GeneratePreforkTeamMembersInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkEmeritusInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkContributorInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkTranslatorsInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkGraphicsInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkSpecialThanksInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkWebsiteInfo(tenacityPageContent);
|
||||||
|
GeneratePreforkTrademarkDisclaimer(tenacityPageContent);
|
||||||
tenacityPageContent << wxT("</center>");
|
tenacityPageContent << wxT("</center>");
|
||||||
|
|
||||||
auto pPage = AboutDialogGUI.StartNotebookPage(ProgramName);
|
auto pPage = AboutDialogGUI.StartNotebookPage(ProgramName);
|
||||||
@@ -157,9 +132,9 @@ void AboutDialog::CreateTenacityTab(ShuttleGui& AboutDialogGUI) {
|
|||||||
AboutDialogGUI.Prop(MINIMUM_PROPORTION).AddWindow(AboutDialog::icon);
|
AboutDialogGUI.Prop(MINIMUM_PROPORTION).AddWindow(AboutDialog::icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
HtmlWindow* html = safenew LinkingHtmlWindow(AboutDialogGUI.GetParent(), -1,
|
HtmlWindow* html = safenew LinkingHtmlWindow(AboutDialogGUI.GetParent(), wxID_ANY,
|
||||||
wxDefaultPosition,
|
wxDefaultPosition,
|
||||||
wxSize(ABOUT_DIALOG_WIDTH, ABOUT_DIALOG_HEIGHT),
|
ABOUT_DIALOG_DEFAULT_SIZE,
|
||||||
wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
|
wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER);
|
||||||
html->SetPage(FormatHtmlText(tenacityPageGeneratedContent.GetString()));
|
html->SetPage(FormatHtmlText(tenacityPageGeneratedContent.GetString()));
|
||||||
|
|
||||||
@@ -168,42 +143,6 @@ void AboutDialog::CreateTenacityTab(ShuttleGui& AboutDialogGUI) {
|
|||||||
AboutDialogGUI.EndNotebookPage();
|
AboutDialogGUI.EndNotebookPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const wxString getCompilerVersion() {
|
|
||||||
#if defined(_MSC_FULL_VER)
|
|
||||||
return wxString::Format(wxT("MSVC %02d.%02d.%05d.%02d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000, _MSC_BUILD);
|
|
||||||
#elif defined(__GNUC_PATCHLEVEL__) && defined(__MINGW32__)
|
|
||||||
return wxT("MinGW ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
|
|
||||||
#elif defined(__GNUC_PATCHLEVEL__)
|
|
||||||
return wxT("GCC ") wxMAKE_VERSION_DOT_STRING_T(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
|
|
||||||
#elif defined(__clang_version__)
|
|
||||||
return wxT("clang ") __clang_version__;
|
|
||||||
#else
|
|
||||||
return wxt("Unknown!!!");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static const TranslatableString getBuildType() {
|
|
||||||
|
|
||||||
auto buildType = Verbatim("Unknown Build Type!!!");
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
buildType = XO("Debug build (debug level %d)").Format(wxDEBUG_LEVEL);
|
|
||||||
#else
|
|
||||||
buildType = XO("Release build (debug level %d)").Format(wxDEBUG_LEVEL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((sizeof(void*) == 8)) {
|
|
||||||
buildType = XO("%s, 64 bits").Format(buildType);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove this once the transition to CMake is complete
|
|
||||||
#ifdef CMAKE
|
|
||||||
buildType = Verbatim("CMake %s").Format(buildType);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return buildType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief: Fills out the "Information" tab of the preferences dialogue
|
/** \brief: Fills out the "Information" tab of the preferences dialogue
|
||||||
*
|
*
|
||||||
* Provides as much information as possible about build-time options and
|
* Provides as much information as possible about build-time options and
|
||||||
@@ -237,9 +176,9 @@ void AboutDialog::CreateInformationTab(ShuttleGui& AboutDialogGUI) {
|
|||||||
<< XO("The Build")
|
<< XO("The Build")
|
||||||
<< wxT("</h3>\n<table>"); // start build info table
|
<< wxT("</h3>\n<table>"); // start build info table
|
||||||
|
|
||||||
AddBuildInfoRow(&informationStr, XO("Commit Id:"), REV_IDENT);
|
AddBuildInfoRow(&informationStr, XO("Commit Id:"), BuildInfo::getRevisionIdentifier());
|
||||||
AddBuildInfoRow(&informationStr, XO("Build type:"), getBuildType().Translation());
|
AddBuildInfoRow(&informationStr, XO("Build type:"), BuildInfo::getBuildType());
|
||||||
AddBuildInfoRow(&informationStr, XO("Compiler:"), getCompilerVersion());
|
AddBuildInfoRow(&informationStr, XO("Compiler:"), BuildInfo::getCompilerVersionString());
|
||||||
|
|
||||||
// Install prefix
|
// Install prefix
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
@@ -250,21 +189,6 @@ void AboutDialog::CreateInformationTab(ShuttleGui& AboutDialogGUI) {
|
|||||||
// Location of settings
|
// Location of settings
|
||||||
AddBuildInfoRow(&informationStr, XO("Settings folder:"), FileNames::DataDir());
|
AddBuildInfoRow(&informationStr, XO("Settings folder:"), FileNames::DataDir());
|
||||||
|
|
||||||
/*
|
|
||||||
informationStr << wxT("</table>\n"); // end of build info table
|
|
||||||
informationStr
|
|
||||||
<< wxT("<h3>")
|
|
||||||
/* i18n-hint: Libraries that are essential to Tenacity *//*
|
|
||||||
<< XO("Core Libraries")
|
|
||||||
<< wxT("</h3>\n<table>"); // start table of core libraries
|
|
||||||
|
|
||||||
AddBuildInfoRow(&informationStr, wxT("wxWidgets"), XO("Cross-platform GUI library"), Verbatim(wxVERSION_NUM_DOT_STRING_T));
|
|
||||||
AddBuildInfoRow(&informationStr, wxT("PortAudio"), XO("Audio playback and recording"), Verbatim(wxT("v19")));
|
|
||||||
AddBuildInfoRow(&informationStr, wxT("libsoxr"), XO("Sample rate conversion"), enabled);
|
|
||||||
|
|
||||||
informationStr << wxT("</table>\n"); // end table of core libraries
|
|
||||||
*/
|
|
||||||
|
|
||||||
informationStr
|
informationStr
|
||||||
<< wxT("<h3>")
|
<< wxT("<h3>")
|
||||||
<< XO("File Format Support")
|
<< XO("File Format Support")
|
||||||
@@ -273,6 +197,9 @@ void AboutDialog::CreateInformationTab(ShuttleGui& AboutDialogGUI) {
|
|||||||
informationStr
|
informationStr
|
||||||
<< wxT("<table>"); // start table of file formats supported
|
<< wxT("<table>"); // start table of file formats supported
|
||||||
|
|
||||||
|
AddBuildInfoRow(&informationStr, wxT("wxWidgets"), XO("Cross-platform GUI library"), Verbatim(wxVERSION_NUM_DOT_STRING_T));
|
||||||
|
AddBuildInfoRow(&informationStr, wxT("PortAudio"), XO("Audio playback and recording"), Verbatim(wxT("v19")));
|
||||||
|
AddBuildInfoRow(&informationStr, wxT("libsoxr"), XO("Sample rate conversion"), enabled);
|
||||||
AddBuildInfoRow(&informationStr, wxT("libmad"), XO("MP3 Importing"), USE_LIBMAD ? enabled : disabled);
|
AddBuildInfoRow(&informationStr, wxT("libmad"), XO("MP3 Importing"), USE_LIBMAD ? enabled : disabled);
|
||||||
/* i18n-hint: Ogg is the container format. Vorbis is the compression codec. Both are proper nouns and shouldn't be translated */
|
/* i18n-hint: Ogg is the container format. Vorbis is the compression codec. Both are proper nouns and shouldn't be translated */
|
||||||
AddBuildInfoRow(&informationStr, wxT("libvorbis"), XO("Ogg Vorbis Import and Export"), USE_LIBVORBIS ? enabled : disabled);
|
AddBuildInfoRow(&informationStr, wxT("libvorbis"), XO("Ogg Vorbis Import and Export"), USE_LIBVORBIS ? enabled : disabled);
|
||||||
@@ -683,8 +610,8 @@ void AboutDialog::PopulateCreditsList() {
|
|||||||
|
|
||||||
// Thanks
|
// Thanks
|
||||||
|
|
||||||
AddCredit(wxT("Drew \"SirCmpwn\" DeVault"), roleThanks);
|
AddCredit(wxT("Drew \"SirCmpwn\" DeVault"), roleTenacityThanks);
|
||||||
AddCredit(wxT("Filipe \"falkTX\" Coelho"), roleThanks);
|
AddCredit(wxT("Filipe \"falkTX\" Coelho"), roleTenacityThanks);
|
||||||
|
|
||||||
// Libraries section
|
// Libraries section
|
||||||
|
|
||||||
@@ -834,16 +761,14 @@ wxImage AboutDialog::GenerateTenacityLogoRescaledImage(const float fScale) {
|
|||||||
|
|
||||||
void AboutDialog::GenerateTenacityPageDescription(wxTextOutputStream& tos) {
|
void AboutDialog::GenerateTenacityPageDescription(wxTextOutputStream& tos) {
|
||||||
tos
|
tos
|
||||||
<< wxT("<center>")
|
|
||||||
// DA: Description and provenance in About box
|
// DA: Description and provenance in About box
|
||||||
#ifdef EXPERIMENTAL_DA
|
#ifdef EXPERIMENTAL_DA
|
||||||
#undef _
|
#undef _
|
||||||
#define _(s) wxGetTranslation((s))
|
#define _(s) wxGetTranslation((s))
|
||||||
<< wxT("<h3>DarkTenacity ")
|
<< wxT("<h3>DarkTenacity ")
|
||||||
<< wxString(AUDACITY_VERSION_STRING)
|
<< wxString(AUDACITY_VERSION_STRING)
|
||||||
<< wxT("</center></h3>")
|
<< wxT("</h3>")
|
||||||
<< wxT("Customised version of the Tenacity free, open source, cross-platform software ")
|
<< wxT("Customised version of the free, open source, cross-platform audio recorder and editor Tenacity.")
|
||||||
<< wxT("for recording and editing sounds.")
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
<< XO("<h3>")
|
<< XO("<h3>")
|
||||||
@@ -853,7 +778,6 @@ void AboutDialog::GenerateTenacityPageDescription(wxTextOutputStream& tos) {
|
|||||||
<< wxT("</h3>")
|
<< wxT("</h3>")
|
||||||
/* i18n-hint: The program's name substitutes for %s */
|
/* i18n-hint: The program's name substitutes for %s */
|
||||||
<< XO("Free, open source, cross-platform audio recorder and editor.")
|
<< XO("Free, open source, cross-platform audio recorder and editor.")
|
||||||
<< wxT("</center>")
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// << wxT("<p><br>")
|
// << wxT("<p><br>")
|
||||||
@@ -889,13 +813,13 @@ void AboutDialog::GenerateTenacityTeamMembersInfo(wxTextOutputStream& tos) {
|
|||||||
<< GetCreditsByRole(roleTenacityTeamMember);
|
<< GetCreditsByRole(roleTenacityTeamMember);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AboutDialog::GenerateSpecialThanksInfo(wxTextOutputStream& tos) {
|
void AboutDialog::GenerateTenacitySpecialThanksInfo(wxTextOutputStream& tos) {
|
||||||
|
|
||||||
tos
|
tos
|
||||||
<< wxT("<p><b>")
|
<< wxT("<p><b>")
|
||||||
<< XO("Special thanks:")
|
<< XO("Tenacity Special thanks:")
|
||||||
<< wxT("</b><br>")
|
<< wxT("</b><br>")
|
||||||
<< GetCreditsByRole(roleThanks);
|
<< GetCreditsByRole(roleTenacityThanks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AboutDialog::GenerateTenacityLibsInfo(wxTextOutputStream& tos) {
|
void AboutDialog::GenerateTenacityLibsInfo(wxTextOutputStream& tos) {
|
||||||
@@ -910,7 +834,15 @@ void AboutDialog::GenerateTenacityLibsInfo(wxTextOutputStream& tos) {
|
|||||||
<< GetCreditsByRole(roleLibrary);
|
<< GetCreditsByRole(roleLibrary);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AboutDialog::GeneratePreforkTeamMembersInfo(wxTextOutputStream& tos) {
|
void AboutDialog::GeneratePreforkSubheader(wxTextOutputStream &tos) {
|
||||||
|
tos
|
||||||
|
<< wxT("<center><h3>")
|
||||||
|
<< PreforkProgramName
|
||||||
|
<< wxT("</h3></center>")
|
||||||
|
<< wxT("<center>");
|
||||||
|
}
|
||||||
|
|
||||||
|
void AboutDialog::GeneratePreforkTeamMembersInfo(wxTextOutputStream &tos) {
|
||||||
tos
|
tos
|
||||||
<< wxT("<p><b>")
|
<< wxT("<p><b>")
|
||||||
/* i18n-hint: The program's name substitutes for %s */
|
/* i18n-hint: The program's name substitutes for %s */
|
||||||
@@ -1000,6 +932,15 @@ void AboutDialog::GeneratePreforkWebsiteInfo(wxTextOutputStream& tos) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AboutDialog::GeneratePreforkTrademarkDisclaimer(wxTextOutputStream& tos) {
|
||||||
|
|
||||||
|
tos
|
||||||
|
/* i18n-hint The registered trademark symbol (r) is substituted at %s*/
|
||||||
|
<< XO("The Audacity%s trademark is used within this software for descriptive and informational purposes only.").Format("<sup>®</sup>")
|
||||||
|
<< wxT("\n")
|
||||||
|
<< XO("Tenacity is not produced or endorsed by MuseCY SM Ltd. or Dominic M Mazzoni.");
|
||||||
|
}
|
||||||
|
|
||||||
void AboutDialog::AddCredit(const wxString& name, const Role role) {
|
void AboutDialog::AddCredit(const wxString& name, const Role role) {
|
||||||
AddCredit(name, {}, role);
|
AddCredit(name, {}, role);
|
||||||
}
|
}
|
||||||
@@ -1008,6 +949,7 @@ void AboutDialog::AddCredit(const wxString& name, TranslatableString format, con
|
|||||||
auto str = format.empty()
|
auto str = format.empty()
|
||||||
? Verbatim(name)
|
? Verbatim(name)
|
||||||
: TranslatableString{format}.Format(name);
|
: TranslatableString{format}.Format(name);
|
||||||
|
|
||||||
creditItems.emplace_back(std::move(str), role);
|
creditItems.emplace_back(std::move(str), role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ class AUDACITY_DLL_API AboutDialog final : public wxDialogWrapper{
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
static constexpr int ABOUT_DIALOG_WIDTH = 506;
|
||||||
|
static constexpr int ABOUT_DIALOG_HEIGHT = 359;
|
||||||
|
static const inline wxSize ABOUT_DIALOG_DEFAULT_SIZE = wxSize(ABOUT_DIALOG_WIDTH, ABOUT_DIALOG_HEIGHT);
|
||||||
|
|
||||||
AboutDialog() : AboutDialog(nullptr){};
|
AboutDialog() : AboutDialog(nullptr){};
|
||||||
AboutDialog(wxWindow * parent);
|
AboutDialog(wxWindow * parent);
|
||||||
virtual ~AboutDialog();
|
virtual ~AboutDialog();
|
||||||
@@ -46,7 +50,7 @@ class AUDACITY_DLL_API AboutDialog final : public wxDialogWrapper{
|
|||||||
enum Role
|
enum Role
|
||||||
{
|
{
|
||||||
roleTenacityTeamMember,
|
roleTenacityTeamMember,
|
||||||
roleThanks,
|
roleTenacityThanks,
|
||||||
roleLibrary,
|
roleLibrary,
|
||||||
rolePreforkTeamMember,
|
rolePreforkTeamMember,
|
||||||
rolePreforkEmeritusTeam,
|
rolePreforkEmeritusTeam,
|
||||||
@@ -64,9 +68,10 @@ class AUDACITY_DLL_API AboutDialog final : public wxDialogWrapper{
|
|||||||
static wxImage GenerateTenacityLogoRescaledImage(const float fScale);
|
static wxImage GenerateTenacityLogoRescaledImage(const float fScale);
|
||||||
void GenerateTenacityPageDescription(wxTextOutputStream & tos);
|
void GenerateTenacityPageDescription(wxTextOutputStream & tos);
|
||||||
void GenerateTenacityTeamMembersInfo(wxTextOutputStream & tos);
|
void GenerateTenacityTeamMembersInfo(wxTextOutputStream & tos);
|
||||||
void GenerateSpecialThanksInfo(wxTextOutputStream & tos);
|
void GenerateTenacitySpecialThanksInfo(wxTextOutputStream & tos);
|
||||||
void GenerateTenacityLibsInfo(wxTextOutputStream & tos);
|
void GenerateTenacityLibsInfo(wxTextOutputStream & tos);
|
||||||
|
|
||||||
|
void GeneratePreforkSubheader(wxTextOutputStream & tos);
|
||||||
void GeneratePreforkTeamMembersInfo(wxTextOutputStream & tos);
|
void GeneratePreforkTeamMembersInfo(wxTextOutputStream & tos);
|
||||||
void GeneratePreforkEmeritusInfo(wxTextOutputStream & tos);
|
void GeneratePreforkEmeritusInfo(wxTextOutputStream & tos);
|
||||||
void GeneratePreforkContributorInfo(wxTextOutputStream & tos);
|
void GeneratePreforkContributorInfo(wxTextOutputStream & tos);
|
||||||
@@ -74,16 +79,15 @@ class AUDACITY_DLL_API AboutDialog final : public wxDialogWrapper{
|
|||||||
void GeneratePreforkTranslatorsInfo(wxTextOutputStream & tos);
|
void GeneratePreforkTranslatorsInfo(wxTextOutputStream & tos);
|
||||||
void GeneratePreforkSpecialThanksInfo(wxTextOutputStream & tos);
|
void GeneratePreforkSpecialThanksInfo(wxTextOutputStream & tos);
|
||||||
void GeneratePreforkWebsiteInfo(wxTextOutputStream & tos);
|
void GeneratePreforkWebsiteInfo(wxTextOutputStream & tos);
|
||||||
|
void GeneratePreforkTrademarkDisclaimer(wxTextOutputStream & tos);
|
||||||
|
|
||||||
void PopulateCreditsList();
|
void PopulateCreditsList();
|
||||||
void AddCredit(const wxString & name, Role role);
|
void AddCredit(const wxString & name, Role role);
|
||||||
void AddCredit(const wxString & name, TranslatableString format, Role role);
|
void AddCredit(const wxString & name, TranslatableString format, Role role);
|
||||||
wxString GetCreditsByRole(Role role);
|
wxString GetCreditsByRole(Role role);
|
||||||
|
|
||||||
static void AddBuildInfoRow(wxTextOutputStream * str, const wxChar * libname,
|
static void AddBuildInfoRow(wxTextOutputStream * str, const wxChar * libname, const TranslatableString & libdesc, const TranslatableString & status);
|
||||||
const TranslatableString & libdesc, const TranslatableString & status);
|
static void AddBuildInfoRow(wxTextOutputStream * str, const TranslatableString & description, const wxChar * spec);
|
||||||
static void AddBuildInfoRow(wxTextOutputStream * str,
|
|
||||||
const TranslatableString & description, const wxChar * spec);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
157
src/BuildInfo.h
Normal file
157
src/BuildInfo.h
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
Tenacity
|
||||||
|
|
||||||
|
BuildInfo.h
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
#ifndef BUILD_INFO_H
|
||||||
|
#define BUILD_INFO_H
|
||||||
|
|
||||||
|
#include "wx/cpp.h"
|
||||||
|
#include <wx/ctrlsub.h>
|
||||||
|
#include <wx/sstream.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/txtstrm.h>
|
||||||
|
|
||||||
|
#include <Internat.h>
|
||||||
|
|
||||||
|
// RevisionIdent contains the REV_TIME and REV_LONG defines from git commit information
|
||||||
|
#include "RevisionIdent.h"
|
||||||
|
|
||||||
|
// This define replaces the original that modified the macro in wxwidgets
|
||||||
|
#define CUSTOM_wxMAKE_VERSION_DOT_STRING_T(x, y, z) wxSTRINGIZE_T(x) wxT(".") wxSTRINGIZE_T(y) wxT(".") wxSTRINGIZE_T(z) wxT("(Tenacity)")
|
||||||
|
|
||||||
|
class BuildInfo {
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum class CompilerType { MSVC, MinGW, GCC, Clang, Unknown };
|
||||||
|
|
||||||
|
static constexpr auto CurrentBuildCompiler =
|
||||||
|
#if defined(_MSC_FULL_VER)
|
||||||
|
CompilerType::MSVC;
|
||||||
|
#elif defined(__GNUC_PATCHLEVEL__) && defined(__MINGW32__)
|
||||||
|
CompilerType::MinGW;
|
||||||
|
#elif defined(__GNUC_PATCHLEVEL__)
|
||||||
|
CompilerType::GCC;
|
||||||
|
#elif defined(__clang_version__)
|
||||||
|
CompilerType::Clang;
|
||||||
|
#else
|
||||||
|
CompilerType::Unknown;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const inline wxString getCompilerVersionString(){
|
||||||
|
|
||||||
|
switch (BuildInfo::CurrentBuildCompiler) {
|
||||||
|
|
||||||
|
case BuildInfo::CompilerType::MSVC:
|
||||||
|
#if !defined(_MSC_VER) || !defined(_MSC_FULL_VER) || !defined (_MSC_BUILD)
|
||||||
|
// This should be unreachable, but it makes the compiler realize that they will always be defined
|
||||||
|
#define _MSC_VER 0
|
||||||
|
#define _MSC_FULL_VER 0
|
||||||
|
#define _MSC_BUILD 0
|
||||||
|
#endif
|
||||||
|
return wxString::Format(wxT("MSVC %02d.%02d.%05d.%02d"), _MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000, _MSC_BUILD);
|
||||||
|
|
||||||
|
case BuildInfo::CompilerType::MinGW:
|
||||||
|
#if !defined(__GNUC__) || !defined (__GNUC_MINOR__) || !defined(__GNUC_PATCHLEVEL__)
|
||||||
|
// This should be unreachable, but it makes the compiler realize that they will always be defined
|
||||||
|
#define __GNUC__ 0
|
||||||
|
#define __GNUC_MINOR__ 0
|
||||||
|
#define __GNUC_PATCHLEVEL__ 0
|
||||||
|
#endif
|
||||||
|
return wxString::Format(wxT("MinGW %s"), CUSTOM_wxMAKE_VERSION_DOT_STRING_T( __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
|
||||||
|
|
||||||
|
case BuildInfo::CompilerType::GCC:
|
||||||
|
#if !defined(__GNUC__) || !defined (__GNUC_MINOR__) || !defined(__GNUC_PATCHLEVEL__)
|
||||||
|
// This should be unreachable, but it makes the compiler realize that they will always be defined
|
||||||
|
#define __GNUC__ 0
|
||||||
|
#define __GNUC_MINOR__ 0
|
||||||
|
#define __GNUC_PATCHLEVEL__ 0
|
||||||
|
#endif
|
||||||
|
return wxString::Format(wxT("GCC %s"), CUSTOM_wxMAKE_VERSION_DOT_STRING_T( __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__));
|
||||||
|
|
||||||
|
case BuildInfo::CompilerType::Clang:
|
||||||
|
#if !defined(__clang_major__) || !defined (__clang_minor__) || !defined(__clang_patchlevel__)
|
||||||
|
// This should be unreachable, but it makes the compiler realize that they will always be defined
|
||||||
|
#define __clang_major__ 0
|
||||||
|
#define __clang_minor__ 0
|
||||||
|
#define __clang_patchlevel__ 0
|
||||||
|
#endif
|
||||||
|
return wxString::Format( wxT("clang %s"), CUSTOM_wxMAKE_VERSION_DOT_STRING_T(__clang_major__, __clang_minor__, __clang_patchlevel__));
|
||||||
|
|
||||||
|
case BuildInfo::CompilerType::Unknown:
|
||||||
|
default:
|
||||||
|
return wxT("Unknown!!!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const inline wxString getRevisionIdentifier(){
|
||||||
|
|
||||||
|
static wxString NoRevisionText = XO("No revision identifier was provided").Translation();
|
||||||
|
|
||||||
|
#ifdef REV_LONG
|
||||||
|
return wxString( "[[https://github.com/tenacityteam/tenacity/commit/" ) + REV_LONG + "|" + wxString( REV_LONG ).Left(6) + "]] of " + getRevisionDateTime();
|
||||||
|
#else
|
||||||
|
return NoRevisionText;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static const inline wxString getRevisionDateTime(){
|
||||||
|
|
||||||
|
|
||||||
|
//This needs to be outside the #ifdef or it won't end up in the POT file consistently
|
||||||
|
static wxString NoDateTimeText = XO("Unknown date and time").Translation();
|
||||||
|
|
||||||
|
#ifdef REV_TIME
|
||||||
|
return wxString(REV_TIME);
|
||||||
|
#else
|
||||||
|
return NoDateTimeText;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr inline bool is64bits(){
|
||||||
|
return (sizeof(void*) == 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr inline bool isCMakeBuild(){
|
||||||
|
#ifdef CMAKE
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr inline bool isDebugBuild(){
|
||||||
|
#ifdef _DEBUG
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static const wxString getBuildType() {
|
||||||
|
|
||||||
|
wxStringOutputStream o;
|
||||||
|
wxTextOutputStream buildTypeString(o);
|
||||||
|
|
||||||
|
if constexpr (isCMakeBuild()){
|
||||||
|
buildTypeString << Verbatim("CMake ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if constexpr (isDebugBuild()){
|
||||||
|
buildTypeString << XO("Debug build (debug level %d)").Format(wxDEBUG_LEVEL).Translation();
|
||||||
|
}else{
|
||||||
|
buildTypeString << XO("Release build (debug level %d)").Format(wxDEBUG_LEVEL).Translation();
|
||||||
|
}
|
||||||
|
|
||||||
|
if constexpr (is64bits()) {
|
||||||
|
buildTypeString << XO(", 64 bits").Translation();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return o.GetString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif
|
||||||
@@ -111,6 +111,7 @@ list( APPEND SOURCES
|
|||||||
BatchProcessDialog.h
|
BatchProcessDialog.h
|
||||||
Benchmark.cpp
|
Benchmark.cpp
|
||||||
Benchmark.h
|
Benchmark.h
|
||||||
|
BuildInfo.h
|
||||||
CellularPanel.cpp
|
CellularPanel.cpp
|
||||||
CellularPanel.h
|
CellularPanel.h
|
||||||
ClassicThemeAsCeeCode.h
|
ClassicThemeAsCeeCode.h
|
||||||
|
|||||||
Reference in New Issue
Block a user