*/
-#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 <dcp/raw_convert.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::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<FilmViewer> viewer)
: Controls (parent, viewer, false)
, _play_button (new Button(this, _("Play")))
, _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);
_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));
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());
}
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 ();
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)
}
sort (_playlists.begin(), _playlists.end(), SPLComparator());
- BOOST_FOREACH (SPL i, _playlists) {
+ for (auto i: _playlists) {
add_playlist_to_list (i);
}
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()) {
_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);
void
PlaylistControls::viewer_finished ()
{
- if (!_selected_playlist) {
+ auto viewer = _viewer.lock ();
+ if (!_selected_playlist || !viewer) {
return;
}
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;
}
}
-#ifdef DCPOMATIC_PLAYER_STRESS_TEST
void
PlaylistControls::play ()
{
{
stop_clicked ();
}
-#endif