Emit no audio from DCPs if none is mapped
[dcpomatic.git] / src / wx / playlist_controls.cc
index 56ff5f40d1ce7235abd83083dea1b8c3f38311f4..3a1bba3628bf1c48b697aa298b898b33e6d1b44f 100644 (file)
 
 */
 
-#include "playlist_controls.h"
-#include "film_viewer.h"
-#include "wx_util.h"
+
 #include "content_view.h"
 #include "dcpomatic_button.h"
+#include "film_viewer.h"
+#include "playlist_controls.h"
 #include "static_text.h"
-#include "lib/player_video.h"
-#include "lib/dcp_content.h"
+#include "wx_util.h"
+#include "lib/compose.hpp"
+#include "lib/constants.h"
 #include "lib/cross.h"
-#include "lib/scoped_temporary.h"
-#include "lib/internet.h"
+#include "lib/dcp_content.h"
 #include "lib/ffmpeg_content.h"
-#include "lib/compose.hpp"
-#include <dcp/raw_convert.h>
+#include "lib/film.h"
+#include "lib/internet.h"
+#include "lib/player_video.h"
+#include "lib/scoped_temporary.h"
 #include <dcp/exceptions.h>
+#include <dcp/raw_convert.h>
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
 #include <wx/listctrl.h>
 #include <wx/progdlg.h>
+LIBDCP_ENABLE_WARNINGS
+
 
-using std::string;
 using std::cout;
+using std::dynamic_pointer_cast;
 using std::exception;
-using std::sort;
 using std::shared_ptr;
-using std::dynamic_pointer_cast;
+using std::sort;
+using std::string;
 using boost::optional;
 using namespace dcpomatic;
 
-PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr<FilmViewer> viewer)
+
+PlaylistControls::PlaylistControls(wxWindow* parent, FilmViewer& viewer)
        : Controls (parent, viewer, false)
        , _play_button (new Button(this, _("Play")))
        , _pause_button (new Button(this, _("Pause")))
@@ -62,15 +70,15 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr<FilmViewer> vie
        _spl_view = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_NO_HEADER);
        _spl_view->AppendColumn (wxT(""), wxLIST_FORMAT_LEFT, 740);
 
-       wxBoxSizer* left_sizer = new wxBoxSizer (wxVERTICAL);
-       wxBoxSizer* e_sizer = new wxBoxSizer (wxHORIZONTAL);
+       auto left_sizer = new wxBoxSizer(wxVERTICAL);
+       auto e_sizer = new wxBoxSizer(wxHORIZONTAL);
 
        wxFont subheading_font (*wxNORMAL_FONT);
        subheading_font.SetWeight (wxFONTWEIGHT_BOLD);
 
-       wxBoxSizer* spl_header = new wxBoxSizer (wxHORIZONTAL);
+       auto spl_header = new wxBoxSizer(wxHORIZONTAL);
        {
-               wxStaticText* m = new StaticText (this, "Playlists");
+               auto m = new StaticText(this, "Playlists");
                m->SetFont (subheading_font);
                spl_header->Add (m, 1, wxALIGN_CENTER_VERTICAL);
        }
@@ -82,9 +90,9 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr<FilmViewer> vie
 
        _content_view = new ContentView (this);
 
-       wxBoxSizer* content_header = new wxBoxSizer (wxHORIZONTAL);
+       auto content_header = new wxBoxSizer(wxHORIZONTAL);
        {
-               wxStaticText* m = new StaticText (this, "Content");
+               auto m = new StaticText(this, "Content");
                m->SetFont (subheading_font);
                content_header->Add (m, 1, wxALIGN_CENTER_VERTICAL);
        }
@@ -109,7 +117,7 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr<FilmViewer> vie
        _previous_button->Bind (wxEVT_BUTTON, boost::bind(&PlaylistControls::previous_clicked,  this));
        _spl_view->Bind        (wxEVT_LIST_ITEM_SELECTED,   boost::bind(&PlaylistControls::spl_selection_changed, this));
        _spl_view->Bind        (wxEVT_LIST_ITEM_DESELECTED, boost::bind(&PlaylistControls::spl_selection_changed, this));
-       _viewer->Finished.connect (boost::bind(&PlaylistControls::viewer_finished, this));
+       _viewer.Finished.connect(boost::bind(&PlaylistControls::viewer_finished, this));
        _refresh_spl_view->Bind (wxEVT_BUTTON, boost::bind(&PlaylistControls::update_playlist_directory, this));
        _refresh_content_view->Bind (wxEVT_BUTTON, boost::bind(&ContentView::update, _content_view));
 
@@ -142,13 +150,13 @@ PlaylistControls::deselect_playlist ()
                _selected_playlist = boost::none;
                _spl_view->SetItemState (selected, 0, wxLIST_STATE_SELECTED);
        }
-       ResetFilm (shared_ptr<Film>(new Film(optional<boost::filesystem::path>())));
+       ResetFilm(std::make_shared<Film>(optional<boost::filesystem::path>()));
 }
 
 void
 PlaylistControls::play_clicked ()
 {
-       _viewer->start ();
+       _viewer.start();
 }
 
 void
@@ -157,9 +165,9 @@ PlaylistControls::setup_sensitivity ()
        Controls::setup_sensitivity ();
        bool const active_job = _active_job && *_active_job != "examine_content";
        bool const c = _film && !_film->content().empty() && !active_job;
-       _play_button->Enable (c && !_viewer->playing());
-       _pause_button->Enable (_viewer->playing());
-       _spl_view->Enable (!_viewer->playing());
+       _play_button->Enable(c && !_viewer.playing());
+       _pause_button->Enable(_viewer.playing());
+       _spl_view->Enable(!_viewer.playing());
        _next_button->Enable (can_do_next());
        _previous_button->Enable (can_do_previous());
 }
@@ -167,14 +175,14 @@ PlaylistControls::setup_sensitivity ()
 void
 PlaylistControls::pause_clicked ()
 {
-       _viewer->stop ();
+       _viewer.stop();
 }
 
 void
 PlaylistControls::stop_clicked ()
 {
-       _viewer->stop ();
-       _viewer->seek (DCPTime(), true);
+       _viewer.stop();
+       _viewer.seek(DCPTime(), true);
        if (_selected_playlist) {
                _selected_playlist_position = 0;
                update_current_content ();
@@ -216,28 +224,6 @@ PlaylistControls::next_clicked ()
        update_current_content ();
 }
 
-void
-PlaylistControls::log (wxString s)
-{
-       optional<boost::filesystem::path> log = Config::instance()->player_activity_log_file();
-       if (!log) {
-               return;
-       }
-
-       struct timeval time;
-       gettimeofday (&time, 0);
-       char buffer[64];
-       time_t const sec = time.tv_sec;
-       struct tm* t = localtime (&sec);
-       strftime (buffer, 64, "%c", t);
-       wxString ts = std_to_wx(string(buffer)) + N_(": ");
-       FILE* f = fopen_boost (*log, "a");
-       if (!f) {
-               return;
-       }
-       fprintf (f, "%s%s\n", wx_to_std(ts).c_str(), wx_to_std(s).c_str());
-       fclose (f);
-}
 
 void
 PlaylistControls::add_playlist_to_list (SPL spl)
@@ -288,7 +274,7 @@ PlaylistControls::update_playlist_directory ()
        }
 
        sort (_playlists.begin(), _playlists.end(), SPLComparator());
-       BOOST_FOREACH (SPL i, _playlists) {
+       for (auto i: _playlists) {
                add_playlist_to_list (i);
        }
 
@@ -345,11 +331,9 @@ PlaylistControls::spl_selection_changed ()
 void
 PlaylistControls::select_playlist (int selected, int position)
 {
-       log (wxString::Format("load-playlist %s", std_to_wx(_playlists[selected].name()).data()));
-
        wxProgressDialog dialog (_("DCP-o-matic"), "Loading playlist and KDMs");
 
-       BOOST_FOREACH (SPLEntry const & i, _playlists[selected].get()) {
+       for (auto const& i: _playlists[selected].get()) {
                dialog.Pulse ();
                shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent> (i.content);
                if (dcp && dcp->needs_kdm()) {
@@ -375,7 +359,7 @@ PlaylistControls::select_playlist (int selected, int position)
        _current_spl_view->DeleteAllItems ();
 
        int N = 0;
-       BOOST_FOREACH (SPLEntry i, _playlists[selected].get()) {
+       for (auto i: _playlists[selected].get()) {
                wxListItem it;
                it.SetId (N);
                it.SetColumn (0);
@@ -413,12 +397,6 @@ PlaylistControls::config_changed (int property)
        }
 }
 
-void
-PlaylistControls::set_film (shared_ptr<Film> film)
-{
-       Controls::set_film (film);
-       setup_sensitivity ();
-}
 
 void
 PlaylistControls::update_current_content ()
@@ -444,11 +422,11 @@ PlaylistControls::viewer_finished ()
        if (_selected_playlist_position < int(_playlists[*_selected_playlist].get().size())) {
                /* Next piece of content on the SPL */
                update_current_content ();
-               _viewer->start ();
+               _viewer.start();
        } else {
                /* Finished the whole SPL */
                _selected_playlist_position = 0;
-               ResetFilm (shared_ptr<Film>(new Film(optional<boost::filesystem::path>())));
+               ResetFilm(std::make_shared<Film>(optional<boost::filesystem::path>()));
                _play_button->Enable (true);
                _pause_button->Enable (false);
        }