C++11 tidying.
[dcpomatic.git] / src / tools / dcpomatic_player.cc
index 72ac93cc75a48716782f2ef57c2df206607a17f5..c0587ed5557efcf64ec9acf48871e7fa6f422065 100644 (file)
@@ -56,6 +56,7 @@
 #include "lib/ffmpeg_content.h"
 #include "lib/dcpomatic_log.h"
 #include "lib/file_log.h"
+#include <dcp/cpl.h>
 #include <dcp/dcp.h>
 #include <dcp/raw_convert.h>
 #include <dcp/exceptions.h>
@@ -258,6 +259,14 @@ public:
                _stress.LoadDCP.connect (boost::bind(&DOMFrame::load_dcp, this, _1));
        }
 
+       ~DOMFrame ()
+       {
+               /* It's important that this is stopped before our frame starts destroying its children,
+                * otherwise UI elements that it depends on will disappear from under it.
+                */
+               _viewer.reset ();
+       }
+
        void setup_main_sizer (Config::PlayerMode mode)
        {
                _main_sizer->Detach (_viewer->panel());
@@ -352,6 +361,7 @@ public:
                reset_film ();
                try {
                        _stress.set_suspended (true);
+                       // here
                        auto dcp = make_shared<DCPContent>(dir);
                        auto job = make_shared<ExamineContentJob>(_film, dcp);
                        _examine_job_connection = job->Finished.connect(bind(&DOMFrame::add_dcp_to_film, this, weak_ptr<Job>(job), weak_ptr<Content>(dcp)));
@@ -361,6 +371,15 @@ public:
                                return;
                        }
                        Config::instance()->add_to_player_history (dir);
+               } catch (ProjectFolderError &) {
+                       error_dialog (
+                               this,
+                               wxString::Format(_("Could not load a DCP from %s"), std_to_wx(dir.string())),
+                               _(
+                                       "This looks like a DCP-o-matic project folder, which cannot be loaded into the player.  "
+                                       "Choose the DCP directory inside the DCP-o-matic project folder if that's what you want to play."
+                                )
+                               );
                } catch (dcp::ReadError& e) {
                        error_dialog (this, wxString::Format(_("Could not load a DCP from %s"), std_to_wx(dir.string())), std_to_wx(e.what()));
                } catch (DCPError& e) {