}
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()));
}
void close_splash ()
{
- if (_splash) {
- _splash->Destroy ();
- _splash = nullptr;
- }
+ _splash.reset();
}
void config_failed_to_load (Config::LoadFailure what)
/* 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) {
}
DOMFrame* _frame = nullptr;
- wxSplashScreen* _splash = nullptr;
+ wx_ptr<wxSplashScreen> _splash;
shared_ptr<wxTimer> _timer;
string _film_to_load;
string _film_to_create;
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
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 ()
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 ()
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 ()
}
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 {
bool OnInit () override
{
- wxSplashScreen* splash = nullptr;
+ wx_ptr<wxSplashScreen> splash;
try {
wxInitAllImageHandlers ();
}
}
- 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)
{
}
-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)) {
}
#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 ();
}
#define DCPOMATIC_WX_UTIL_H
+#include "wx_ptr.h"
#include "lib/config.h"
#include "lib/dcpomatic_time.h"
#include <dcp/warnings.h>
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);