X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fplaylist_controls.cc;h=7ed5c44952a92a7c61710c9c6e1701d0889609bc;hb=b9a1ad3df5f9d85fb7439efd93fede72b9b078af;hp=844e15f04e30db85331a7b4c1a7a52fd620ac928;hpb=b24104d631b8c6f44d95f28e2ff3bc608cb221a7;p=dcpomatic.git diff --git a/src/wx/playlist_controls.cc b/src/wx/playlist_controls.cc index 844e15f04..7ed5c4495 100644 --- a/src/wx/playlist_controls.cc +++ b/src/wx/playlist_controls.cc @@ -18,33 +18,39 @@ */ -#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/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 "lib/internet.h" +#include "lib/player_video.h" +#include "lib/scoped_temporary.h" +#include "lib/warnings.h" #include #include +DCPOMATIC_DISABLE_WARNINGS #include #include +DCPOMATIC_ENABLE_WARNINGS + -using std::string; using std::cout; +using std::dynamic_pointer_cast; using std::exception; +using std::shared_ptr; using std::sort; -using boost::shared_ptr; -using boost::dynamic_pointer_cast; +using std::string; using boost::optional; using namespace dcpomatic; + PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr viewer) : Controls (parent, viewer, false) , _play_button (new Button(this, _("Play"))) @@ -52,7 +58,6 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr vie , _stop_button (new Button(this, _("Stop"))) , _next_button (new Button(this, "Next")) , _previous_button (new Button(this, "Previous")) - , _timer (this) { _button_sizer->Add (_previous_button, 0, wxEXPAND); _button_sizer->Add (_play_button, 0, wxEXPAND); @@ -110,7 +115,7 @@ PlaylistControls::PlaylistControls (wxWindow* parent, shared_ptr 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)); @@ -149,18 +154,26 @@ PlaylistControls::deselect_playlist () void PlaylistControls::play_clicked () { - _viewer->start (); + auto viewer = _viewer.lock (); + if (viewer) { + viewer->start (); + } } void PlaylistControls::setup_sensitivity () { + auto viewer = _viewer.lock (); + if (!viewer) { + return; + } + 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()); } @@ -168,14 +181,22 @@ PlaylistControls::setup_sensitivity () void PlaylistControls::pause_clicked () { - _viewer->stop (); + auto viewer = _viewer.lock (); + if (viewer) { + viewer->stop (); + } } void PlaylistControls::stop_clicked () { - _viewer->stop (); - _viewer->seek (DCPTime(), true); + auto viewer = _viewer.lock (); + if (!viewer) { + return; + } + + viewer->stop (); + viewer->seek (DCPTime(), true); if (_selected_playlist) { _selected_playlist_position = 0; update_current_content (); @@ -217,28 +238,6 @@ PlaylistControls::next_clicked () update_current_content (); } -void -PlaylistControls::log (wxString s) -{ - optional 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) @@ -289,7 +288,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); } @@ -346,11 +345,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 dcp = dynamic_pointer_cast (i.content); if (dcp && dcp->needs_kdm()) { @@ -376,7 +373,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); @@ -437,7 +434,8 @@ PlaylistControls::update_current_content () void PlaylistControls::viewer_finished () { - if (!_selected_playlist) { + auto viewer = _viewer.lock (); + if (!_selected_playlist || !viewer) { return; } @@ -445,7 +443,7 @@ 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; @@ -454,3 +452,15 @@ PlaylistControls::viewer_finished () _pause_button->Enable (false); } } + +void +PlaylistControls::play () +{ + play_clicked (); +} + +void +PlaylistControls::stop () +{ + stop_clicked (); +}