Work around deadlock when destroying J2KEncoder with a full writer queue (#2784).
[dcpomatic.git] / src / wx / timeline.h
index 84cb870f24209f6d055d84a490ac9848d2c5b096..621609fa7e66b94a2ae1f8cd73f2d548ce609368 100644 (file)
 
 */
 
+
 #include "content_menu.h"
 #include "timeline_content_view.h"
-#include "lib/util.h"
+#include "lib/film_property.h"
 #include "lib/rect.h"
-#include "lib/film.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
 #include <wx/wx.h>
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
+LIBDCP_ENABLE_WARNINGS
 #include <boost/signals2.hpp>
 
-class Film;
+
 class ContentPanel;
-class TimelineView;
-class TimelineTimeAxisView;
-class TimelineReelsView;
+class Film;
+class FilmViewer;
 class TimelineLabelsView;
+class TimelineReelsView;
+class TimelineTimeAxisView;
+class TimelineView;
+
 
 class Timeline : public wxPanel
 {
 public:
-       Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>);
+       Timeline (wxWindow *, ContentPanel *, std::shared_ptr<Film>, FilmViewer& viewer);
 
-       boost::shared_ptr<const Film> film () const;
+       std::shared_ptr<const Film> film () const;
 
        void force_redraw (dcpomatic::Rect<int> const &);
 
@@ -78,6 +82,8 @@ public:
 
        int tracks_y_offset () const;
 
+       void keypress(wxKeyEvent const &);
+
 private:
        void paint_labels ();
        void paint_main ();
@@ -91,7 +97,7 @@ private:
        void mouse_moved (wxMouseEvent &);
        void mouse_moved_select (wxMouseEvent &);
        void mouse_moved_zoom (wxMouseEvent &);
-       void film_change (ChangeType type, Film::Property);
+       void film_change(ChangeType type, FilmProperty);
        void film_content_change (ChangeType type, int, bool frequent);
        void resized ();
        void assign_tracks ();
@@ -103,8 +109,10 @@ private:
        void set_pixels_per_second (double pps);
        void set_pixels_per_track (int h);
        void zoom_all ();
+       void update_playhead ();
+       void mouse_wheel_turned(wxMouseEvent& event);
 
-       boost::shared_ptr<TimelineView> event_to_view (wxMouseEvent &);
+       std::shared_ptr<TimelineView> event_to_view (wxMouseEvent &);
        TimelineContentViewList selected_views () const;
        ContentList selected_content () const;
        void maybe_snap (dcpomatic::DCPTime a, dcpomatic::DCPTime b, boost::optional<dcpomatic::DCPTime>& nearest_distance) const;
@@ -112,17 +120,18 @@ private:
        wxScrolledCanvas* _labels_canvas;
        wxScrolledCanvas* _main_canvas;
        ContentPanel* _content_panel;
-       boost::weak_ptr<Film> _film;
+       std::weak_ptr<Film> _film;
+       FilmViewer& _viewer;
        TimelineViewList _views;
-       boost::shared_ptr<TimelineTimeAxisView> _time_axis_view;
-       boost::shared_ptr<TimelineReelsView> _reels_view;
-       boost::shared_ptr<TimelineLabelsView> _labels_view;
+       std::shared_ptr<TimelineTimeAxisView> _time_axis_view;
+       std::shared_ptr<TimelineReelsView> _reels_view;
+       std::shared_ptr<TimelineLabelsView> _labels_view;
        int _tracks;
        boost::optional<double> _pixels_per_second;
        bool _left_down;
        wxPoint _down_point;
        boost::optional<wxPoint> _zoom_point;
-       boost::shared_ptr<TimelineContentView> _down_view;
+       std::shared_ptr<TimelineContentView> _down_view;
        dcpomatic::DCPTime _down_view_position;
        bool _first_move;
        ContentMenu _menu;
@@ -134,6 +143,9 @@ private:
        int _y_scroll_rate;
        int _pixels_per_track;
        bool _first_resize;
+       wxTimer _timer;
+       boost::optional<int> _last_mouse_wheel_x;
+       boost::optional<double> _last_mouse_wheel_time;
 
        static double const _minimum_pixels_per_second;
        static int const _minimum_pixels_per_track;