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