15#include <wx/settings.h> 
   16#include <wx/mstream.h> 
   17#include <wx/sstream.h> 
   18#include <wx/txtstrm.h> 
   19#include <wx/hyperlink.h> 
   20#include <wx/checkbox.h> 
   22#include <wx/statbmp.h> 
   23#include <wx/stattext.h> 
   32#include "../images/WhatsNewBtn.jpeg.h" 
   33#include "../images/MuseHub.jpeg.h" 
   38#if defined (__WXOSX__) || defined(__WXMSW__) 
   42const char* 
WhatsNewURL = 
"https://audacityteam.org/3.7.0-video";
 
   43const char* 
ChangeLogURL = 
"https://support.audacityteam.org/additional-resources/changelog";
 
   45const char* 
PromoURL = 
"https://audacityteam.org/audacitypromo";
 
   47#if defined(SHOW_MUSEHUB) 
   70       : mMemoryFSHandler(
std::make_unique<wxMemoryFSHandler>())
 
   72      wxFileSystem::AddHandler(mMemoryFSHandler.get());
 
   74      wxMemoryFSHandler::AddFile(
 
   75         "whats_new_btn.jpeg", bin2c_whats_new_btn_jpeg,
 
   76         sizeof(bin2c_whats_new_btn_jpeg));
 
   77      wxMemoryFSHandler::AddFile(
 
   78         "musehub.jpeg", bin2c_musehub_jpeg,
 
   79         sizeof(bin2c_musehub_jpeg));
 
   84      wxMemoryFSHandler::RemoveFile(
"whats_new_btn.jpeg");
 
   85      wxMemoryFSHandler::RemoveFile(
"musehub.jpeg");
 
   86      wxFileSystem::RemoveHandler(mMemoryFSHandler.get());
 
   95   wxStringOutputStream o;
 
   96   wxTextOutputStream s(o);
 
  102      << 
wxT(R
"(<img src="memory:whats_new_btn.jpeg" width="352" height="198" /><br></a></p>)") 
  103      << wxT("<h3>") << 
XO(
"What's new in Audacity %s").Format(AUDACITY_VERSION_STRING) << 
wxT(
"</h3>")
 
  105      << 
XO(
"Watch the [[%s|release video]] or read the [[%s|changelog]] to learn more about what we have included in the latest release!</p>").Format(
WhatsNewURL, 
ChangeLogURL);
 
  112   wxStringOutputStream o;
 
  113   wxTextOutputStream s(o);
 
  116      << 
wxT(
"<p><center>")
 
  119      << 
wxT(R
"(<img src="memory:musehub.jpeg" width="352" height="198" /><br></a></p>)") 
  122      << 
wxT(
"<h3>") << 
XO(
"Get free plugins & sounds")<< 
wxT(
"</h3>")
 
  123      << 
XO(
"<p>Check out our [[%s|Muse Hub app]] for a wide range of audio plugins for Audacity users</p>").Format(
MuseHubURL);
 
  127      << 
wxT(
"<h3>") << 
wxT(
"VocalStrip - Solid State Logic")<< 
wxT(
"</h3>")
 
  128      << 
wxT(
"<p>") << 
XO(
"A vocal processing effect that enhances vocal clarity and depth.") << 
wxT(
" ")
 
  129      << 
wxT(
"<h3>") << 
wxT(
"Crystalline Next-gen Reverb")<< 
wxT(
"</h3>")
 
  130      << 
wxT(
"<p>") << 
XO(
"A multipurpose reverb plugin for spacious, natural-sounding effects.") << 
wxT(
" ")
 
  131      << 
wxT(
"<h3>") << 
wxT(
"Ampkit Guitar Modeller")<< 
wxT(
"</h3>")
 
  132      << 
wxT(
"<p>") << 
XO(
"A guitar amp and effects modelling plugin for realistic tones and customizable sounds.") << 
wxT(
" ")
 
  133      << 
wxT(
"<h3>") << 
wxT(
"BOREALIS Dynamic Reverb")<< 
wxT(
"</h3>")
 
  134      << 
wxT(
"<p>") << 
XO(
"A responsive reverb plugin that adapts to track dynamics for immersive soundscapes.") << 
wxT(
" ")
 
  135      << 
wxT(
"<h3>") << 
wxT(
"LANDR FX Voice")<< 
wxT(
"</h3>")
 
  136      << 
wxT(
"<p>") << 
XO(
"A vocal multi-effect plugin that enhances vocal tracks for professional results.") << 
wxT(
" ")
 
  137      << 
wxT(
"<h3>") << 
wxT(
"LANDR FX Bass")<< 
wxT(
"</h3>")
 
  138      << 
wxT(
"<p>") << 
XO(
"A bass effect plugin designed to deliver punchy, clear low-end sound.") << 
wxT(
" ")
 
  139      << 
wxT(
"<h3>") << 
wxT(
"LANDR FX Acoustic:")<< 
wxT(
"</h3>")
 
  140      << 
wxT(
"<p>") << 
XO(
"A plugin for acoustic sound perfection, enhancing warmth and clarity.") << 
wxT(
" ")
 
  141      << 
wxT(
"<h3>") << 
wxT(
"Pristine Voice")<< 
wxT(
"</h3>")
 
  142      << 
wxT(
"<p>") << 
XO(
"An amazing voice enhancement plugin for crystal-clear, professional vocal effects.") << 
wxT(
" ")
 
  143      << 
wxT(
"<h3>") << 
wxT(
"Remix Source Separation")<< 
wxT(
"</h3>")
 
  144      << 
wxT(
"<p>") << 
XO(
"A real-time stem separation tool to isolate vocals, drums, and instruments.") << 
wxT(
" ")
 
  145      << 
wxT(
"<h3>") << 
wxT(
"Recommended effects plugins for Audacity")<< 
wxT(
"</h3>")
 
  146      << 
wxT(
"<p>") << 
XO(
"Check out a variety of plugins by well known developers available on [[%s|MuseHub]].").Format(
MuseHubURL) 
 
  150      << 
wxT(
"<h3>") << 
wxT(
"Polyspectral Multiband Compressor")<< 
wxT(
"</h3>")
 
  151      << 
wxT(
"<p>") << 
XO(
"A multiband compressor offering precise control over frequencies.") << 
wxT(
" ")
 
  153      << 
XO(
"Available on [[%s|MuseHub]].").Format(
MuseHubURL) << 
wxT(
"</p>");
 
  169#if defined(__WXMSW__) 
  187   dialog->CenterOnParent();
 
  188   dialog->wxDialogWrapper::Show();
 
  193   bool showSplashScreen;
 
  194   gPrefs->
Read(
wxT(
"/GUI/ShowSplashScreen"), &showSplashScreen, 
true );
 
  198   S.StartHorizontalLay(wxEXPAND);
 
  203      whatsnew->SetBackgroundColour(
S.GetParent()->GetBackgroundColour());
 
  206#if defined(SHOW_MUSEHUB) 
  207         .Position(wxEXPAND | wxLEFT | wxTOP | wxBOTTOM)
 
  209         .Position(wxEXPAND | wxALL)
 
  211         .AddWindow(whatsnew);
 
  213#if defined(SHOW_MUSEHUB) 
  218      getplugins->SetBackgroundColour(
S.GetParent()->GetBackgroundColour());
 
  221         .Position(wxEXPAND | wxTOP | wxRIGHT | wxBOTTOM)
 
  222         .AddWindow(getplugins);
 
  225   S.EndHorizontalLay();
 
  227   const auto line = 
safenew wxWindow(
S.GetParent(), wxID_ANY);
 
  228   line->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW));
 
  229   line->SetSize(-1, 1);
 
  236   S.StartHorizontalLay(wxALIGN_CENTRE, 0);
 
  239      const auto tutorialsLink = 
safenew wxHyperlinkCtrl(
 
  243         "https://support.audacityteam.org/");
 
  245         .Position(wxTOP | wxBOTTOM)
 
  246         .AddWindow(tutorialsLink);
 
  250      const auto forumLink = 
safenew wxHyperlinkCtrl(
 
  253         _(
"Visit our forum"),
 
  254         "https://forum.audacityteam.org/");
 
  256         .Position(wxTOP | wxBOTTOM)
 
  257         .AddWindow(forumLink);
 
  259   S.EndHorizontalLay();
 
  261   S.Position(wxEXPAND).StartPanel(2);
 
  263      S.StartHorizontalLay(wxEXPAND);
 
  267            .Position(wxALL | wxALIGN_CENTRE)
 
  268            .AddCheckBox( 
XXO(
"Don't show this again at start up"), !showSplashScreen);
 
  274            .AddButton(
XXO(
"OK"), wxALL, 
true);
 
  276      S.EndHorizontalLay();
 
EVT_BUTTON(wxID_NO, DependencyDialog::OnNo) EVT_BUTTON(wxID_YES
XXO("&Cut/Copy/Paste Toolbar")
wxString FormatHtmlText(const wxString &Text)
audacity::BasicSettings * gPrefs
AUDACITY_DLL_API wxFrame & GetProjectFrame(AudacityProject &project)
Get the top-level window associated with the project (as a wxFrame only, when you do not need to use ...
AUDACITY_DLL_API AttachedWindows & GetAttachedWindows(AudacityProject &project)
accessors for certain important windows associated with each project
AttachedWindows::RegisteredFactory sWhatsNewWindow
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Subclass & Get(const RegisteredFactory &key)
Get reference to an attachment, creating on demand if not present, down-cast it to Subclass.
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)
wxCheckBox * mDontShowAgain
void Populate(ShuttleGui &S)
static void Show(AudacityProject &project)
void OnOK(wxCommandEvent &)
~WhatsNewDialog() override
virtual bool Flush() noexcept=0
virtual bool Write(const wxString &key, bool value)=0
virtual bool Read(const wxString &key, bool *value) const =0
IMPORT_EXPORT_API ExportResult Show(ExportTask exportTask)
wxString MakeGetPluginsText()
const char * ChangeLogURL
constexpr auto WindowWidth
constexpr auto WindowHeight
wxString MakeWhatsNewText()
std::unique_ptr< wxMemoryFSHandler > mMemoryFSHandler