Take Film pointer out of Content.
[dcpomatic.git] / src / wx / player_information.cc
index 9c5684e74015ab534f65fe8014fe55f40abb81c8..5f480d5b4902832b14886a3aeb726c1d154fb7e8 100644 (file)
 #include "lib/video_content.h"
 #include "lib/audio_content.h"
 #include "lib/dcp_content.h"
+#include "lib/film.h"
 
 using std::cout;
 using std::string;
 using boost::shared_ptr;
+using boost::weak_ptr;
 using boost::dynamic_pointer_cast;
 using boost::optional;
 
 /* This should be even */
 static int const dcp_lines = 6;
 
-PlayerInformation::PlayerInformation (wxWindow* parent, FilmViewer* viewer)
+PlayerInformation::PlayerInformation (wxWindow* parent, weak_ptr<FilmViewer> viewer)
        : wxPanel (parent)
        , _viewer (viewer)
        , _sizer (new wxBoxSizer (wxHORIZONTAL))
@@ -86,15 +88,23 @@ PlayerInformation::PlayerInformation (wxWindow* parent, FilmViewer* viewer)
 void
 PlayerInformation::periodic_update ()
 {
-       checked_set (_dropped, wxString::Format(_("Dropped frames: %d"), _viewer->dropped()));
+       shared_ptr<FilmViewer> fv = _viewer.lock ();
+       if (fv) {
+               checked_set (_dropped, wxString::Format(_("Dropped frames: %d"), fv->dropped()));
+       }
 }
 
 void
 PlayerInformation::triggered_update ()
 {
+       shared_ptr<FilmViewer> fv = _viewer.lock ();
+       if (!fv) {
+               return;
+       }
+
        shared_ptr<DCPContent> dcp;
-       if (_viewer->film()) {
-               ContentList content = _viewer->film()->content();
+       if (fv->film()) {
+               ContentList content = fv->film()->content();
                if (content.size() == 1) {
                        dcp = dynamic_pointer_cast<DCPContent>(content.front());
                }
@@ -131,7 +141,7 @@ PlayerInformation::triggered_update ()
        if (dcp->audio && !dcp->audio->streams().empty()) {
                checked_set (_dcp[r++], wxString::Format(_("Audio channels: %d"), dcp->audio->streams().front()->channels()));
        }
-       if (dcp->subtitle) {
+       if (!dcp->text.empty()) {
                checked_set (_dcp[r++], _("Subtitles: yes"));
        } else {
                checked_set (_dcp[r++], _("Subtitles: no"));
@@ -143,14 +153,14 @@ PlayerInformation::triggered_update ()
 
        string const len = String::compose(
                wx_to_std(_("Length: %1 (%2 frames)")),
-               time_to_hmsf(dcp->full_length(), lrint(*vfr)),
-               dcp->full_length().frames_round(*vfr)
+               time_to_hmsf(dcp->full_length(fv->film()), lrint(*vfr)),
+               dcp->full_length(fv->film()).frames_round(*vfr)
                );
 
        checked_set (_dcp[r++], std_to_wx(len));
 
        dcp::Size decode = dcp->video->size();
-       optional<int> reduction = _viewer->dcp_decode_reduction();
+       optional<int> reduction = fv->dcp_decode_reduction();
        if (reduction) {
                decode.width /= pow(2, *reduction);
                decode.height /= pow(2, *reduction);