Work around deadlock when destroying J2KEncoder with a full writer queue (#2784).
[dcpomatic.git] / src / wx / controls.h
index dfa11e6d74ecc67e8526d9f4c8f43760bfe7d4c6..75bae9bb3877635f50e02f27aa67fdb48baca83f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2018-2021 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
 
 */
 
+
 #ifndef DCPOMATIC_CONTROLS_H
 #define DCPOMATIC_CONTROLS_H
 
+
+#include "lib/change_signaller.h"
 #include "lib/dcpomatic_time.h"
-#include "lib/types.h"
-#include "lib/film.h"
-#include "lib/spl.h"
+#include "lib/film_property.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
 #include <wx/wx.h>
-#include <boost/shared_ptr.hpp>
+LIBDCP_ENABLE_WARNINGS
 #include <boost/signals2.hpp>
 
-class FilmViewer;
-class Film;
+
+class CheckBox;
 class ClosedCaptionsDialog;
 class Content;
+class ContentView;
+class Film;
+class FilmViewer;
+class MarkersPanel;
 class PlayerVideo;
-class wxToggleButton;
+
 class wxListCtrl;
-class ContentView;
+class wxToggleButton;
+
 
 namespace dcp {
        class CPL;
 }
 
+
 class Controls : public wxPanel
 {
 public:
        Controls (
                wxWindow* parent,
-               boost::shared_ptr<FilmViewer>,
+               FilmViewer &,
                bool editor_controls = true
                );
 
-       virtual void log (wxString) {}
-       virtual void set_film (boost::shared_ptr<Film> film);
-       boost::shared_ptr<Film> film () const;
+       void set_film (std::shared_ptr<Film> film);
+
+       virtual void play () {};
+       virtual void stop () {};
+       void seek (int slider);
+
+       std::shared_ptr<Film> film () const;
        void back_frame ();
        void forward_frame ();
 
 protected:
+
        virtual void started ();
        virtual void stopped ();
        virtual void setup_sensitivity ();
@@ -65,9 +79,10 @@ protected:
 
        wxSizer* _v_sizer;
        wxBoxSizer* _button_sizer;
-       boost::shared_ptr<Film> _film;
+       std::shared_ptr<Film> _film;
+       MarkersPanel* _markers;
        wxSlider* _slider;
-       boost::shared_ptr<FilmViewer> _viewer;
+       FilmViewer& _viewer;
        boost::optional<std::string> _active_job;
 
 private:
@@ -84,19 +99,19 @@ private:
        void timecode_clicked ();
        void active_jobs_changed (boost::optional<std::string>);
        dcpomatic::DCPTime nudge_amount (wxKeyboardState& ev);
-       void image_changed (boost::weak_ptr<PlayerVideo>);
+       void image_changed (std::weak_ptr<PlayerVideo>);
        void outline_content_changed ();
        void eye_changed ();
-       void position_changed ();
-       void film_change (ChangeType, Film::Property);
+       void update_position ();
+       void film_change(ChangeType, FilmProperty);
 
-       typedef std::pair<boost::shared_ptr<dcp::CPL>, boost::filesystem::path> CPL;
+       typedef std::pair<std::shared_ptr<dcp::CPL>, boost::filesystem::path> CPL;
 
-       bool _slider_being_moved;
+       bool _slider_being_moved = false;
 
-       wxCheckBox* _outline_content;
-       wxChoice* _eye;
-       wxCheckBox* _jump_to_selected;
+       CheckBox* _outline_content = nullptr;
+       wxChoice* _eye = nullptr;
+       CheckBox* _jump_to_selected = nullptr;
        wxButton* _rewind_button;
        wxButton* _back_button;
        wxButton* _forward_button;
@@ -105,8 +120,11 @@ private:
 
        ClosedCaptionsDialog* _closed_captions_dialog;
 
+       wxTimer _timer;
+
        boost::signals2::scoped_connection _film_change_connection;
        boost::signals2::scoped_connection _config_changed_connection;
 };
 
+
 #endif