summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-01-15 01:25:27 +0100
committerCarl Hetherington <cth@carlh.net>2023-01-15 01:25:27 +0100
commit963c7649da903b87637975e8c2d634da887d3109 (patch)
treeab59391e9f4fd5a35f4bec052b97d4e703b007cd
parentfcaf62b405f6379e7030ddc2a38426c5f9ffb081 (diff)
Use wx_ptr for the splash screen.
-rw-r--r--src/tools/dcpomatic.cc15
-rw-r--r--src/tools/dcpomatic_editor.cc2
-rw-r--r--src/tools/dcpomatic_kdm.cc2
-rw-r--r--src/tools/dcpomatic_player.cc20
-rw-r--r--src/wx/wx_ptr.h25
-rw-r--r--src/wx/wx_util.cc9
-rw-r--r--src/wx/wx_util.h3
7 files changed, 44 insertions, 32 deletions
diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc
index 546306ac4..af4576fd5 100644
--- a/src/tools/dcpomatic.cc
+++ b/src/tools/dcpomatic.cc
@@ -1728,10 +1728,7 @@ private:
}
catch (exception& e)
{
- if (_splash) {
- _splash->Destroy ();
- _splash = nullptr;
- }
+ _splash.reset();
error_dialog (nullptr, wxString::Format ("DCP-o-matic could not start."), std_to_wx(e.what()));
}
@@ -1843,10 +1840,7 @@ private:
void close_splash ()
{
- if (_splash) {
- _splash->Destroy ();
- _splash = nullptr;
- }
+ _splash.reset();
}
void config_failed_to_load (Config::LoadFailure what)
@@ -1864,8 +1858,7 @@ private:
/* Destroy the splash screen here, as otherwise bad things seem to happen (for reasons unknown)
when we open our recreate dialog, close it, *then* try to Destroy the splash (the Destroy fails).
*/
- _splash->Destroy ();
- _splash = nullptr;
+ _splash.reset();
auto config = Config::instance();
switch (reason) {
@@ -1934,7 +1927,7 @@ private:
}
DOMFrame* _frame = nullptr;
- wxSplashScreen* _splash = nullptr;
+ wx_ptr<wxSplashScreen> _splash;
shared_ptr<wxTimer> _timer;
string _film_to_load;
string _film_to_create;
diff --git a/src/tools/dcpomatic_editor.cc b/src/tools/dcpomatic_editor.cc
index 51135ef46..8e306551f 100644
--- a/src/tools/dcpomatic_editor.cc
+++ b/src/tools/dcpomatic_editor.cc
@@ -431,7 +431,7 @@ private:
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc
index 87a77c626..673c54f78 100644
--- a/src/tools/dcpomatic_kdm.cc
+++ b/src/tools/dcpomatic_kdm.cc
@@ -770,7 +770,7 @@ private:
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
diff --git a/src/tools/dcpomatic_player.cc b/src/tools/dcpomatic_player.cc
index 600d1c6b4..1808e86fe 100644
--- a/src/tools/dcpomatic_player.cc
+++ b/src/tools/dcpomatic_player.cc
@@ -898,16 +898,14 @@ private:
DCPOMATIC_ASSERT (dcp);
auto job = make_shared<VerifyDCPJob>(dcp->directories());
- auto progress = new VerifyDCPProgressDialog(this, _("DCP-o-matic Player"));
+ auto progress = make_wx<VerifyDCPProgressDialog>(this, _("DCP-o-matic Player"));
bool const completed = progress->run (job);
- progress->Destroy ();
if (!completed) {
return;
}
- auto d = new VerifyDCPDialog (this, job);
+ auto d = make_wx<VerifyDCPDialog>(this, job);
d->ShowModal ();
- d->Destroy ();
}
void tools_check_for_updates ()
@@ -918,9 +916,8 @@ private:
void tools_timing ()
{
- auto d = new TimerDisplay(this, _viewer.state_timer(), _viewer.gets());
+ auto d = make_wx<TimerDisplay>(this, _viewer.state_timer(), _viewer.gets());
d->ShowModal ();
- d->Destroy ();
}
void tools_system_information ()
@@ -934,18 +931,16 @@ private:
void help_about ()
{
- auto d = new AboutDialog (this);
+ auto d = make_wx<AboutDialog>(this);
d->ShowModal ();
- d->Destroy ();
}
void help_report_a_problem ()
{
- auto d = new ReportProblemDialog (this);
+ auto d = make_wx<ReportProblemDialog>(this);
if (d->ShowModal () == wxID_OK) {
d->report ();
}
- d->Destroy ();
}
void update_checker_state_changed ()
@@ -964,9 +959,8 @@ private:
}
if (uc->state() == UpdateChecker::State::YES) {
- auto dialog = new UpdateDialog (this, uc->stable (), uc->test ());
+ auto dialog = make_wx<UpdateDialog>(this, uc->stable (), uc->test ());
dialog->ShowModal ();
- dialog->Destroy ();
} else if (uc->state() == UpdateChecker::State::FAILED) {
error_dialog (this, _("The DCP-o-matic download server could not be contacted."));
} else {
@@ -1168,7 +1162,7 @@ private:
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
diff --git a/src/wx/wx_ptr.h b/src/wx/wx_ptr.h
index 96459183e..24bccb043 100644
--- a/src/wx/wx_ptr.h
+++ b/src/wx/wx_ptr.h
@@ -62,11 +62,34 @@ public:
}
}
- T* operator->() {
+ wx_ptr& operator=(T* ptr)
+ {
+ if (_wx) {
+ _wx->Destroy();
+ }
+ _wx = ptr;
+ return *this;
+ }
+
+ T* operator->()
+ {
DCPOMATIC_ASSERT(_wx);
return _wx;
}
+ operator bool() const
+ {
+ return _wx != nullptr;
+ }
+
+ void reset()
+ {
+ if (_wx) {
+ _wx->Destroy();
+ _wx = nullptr;
+ }
+ }
+
template <typename... Args>
void reset(Args&&... args)
{
diff --git a/src/wx/wx_util.cc b/src/wx/wx_util.cc
index d264f8b20..e600b63c8 100644
--- a/src/wx/wx_util.cc
+++ b/src/wx/wx_util.cc
@@ -537,10 +537,11 @@ setup_audio_channels_choice (wxChoice* choice, int minimum)
}
-wxSplashScreen *
+wx_ptr<wxSplashScreen>
maybe_show_splash ()
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
+
try {
wxBitmap bitmap;
if (bitmap.LoadFile(bitmap_path("splash.png"), wxBITMAP_TYPE_PNG)) {
@@ -554,9 +555,9 @@ maybe_show_splash ()
}
#ifdef DCPOMATIC_WINDOWS
/* Having wxSTAY_ON_TOP means error dialogues hide behind the splash screen on Windows, no matter what I try */
- splash = new wxSplashScreen (bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, 0, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE | wxFRAME_NO_TASKBAR);
+ splash.reset(bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, nullptr, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE | wxFRAME_NO_TASKBAR);
#else
- splash = new wxSplashScreen (bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, 0, -1);
+ splash.reset(bitmap, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_NO_TIMEOUT, 0, nullptr, -1);
#endif
wxYield ();
}
diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h
index 5ef221b15..be3be0d1a 100644
--- a/src/wx/wx_util.h
+++ b/src/wx/wx_util.h
@@ -28,6 +28,7 @@
#define DCPOMATIC_WX_UTIL_H
+#include "wx_ptr.h"
#include "lib/config.h"
#include "lib/dcpomatic_time.h"
#include <dcp/warnings.h>
@@ -116,7 +117,7 @@ extern wxString context_translation (wxString);
extern std::string string_client_data (wxClientData* o);
extern wxString time_to_timecode (dcpomatic::DCPTime t, double fps);
extern void setup_audio_channels_choice (wxChoice* choice, int minimum);
-extern wxSplashScreen* maybe_show_splash ();
+extern wx_ptr<wxSplashScreen> maybe_show_splash();
extern double calculate_mark_interval (double start);
extern bool display_progress (wxString title, wxString task);
extern bool report_errors_from_last_job (wxWindow* parent);