Fix incorrect preview of italic subtitles (#728).
[dcpomatic.git] / src / wx / timeline.h
index 1993eb9c25342fdab566ae8deeee5e4e18c0b49f..e8becf906e4ee61c6a26298cc49fd34965a44c9a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2013 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2013-2015 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 */
 
+#include "content_menu.h"
+#include "timeline_content_view.h"
+#include "lib/util.h"
+#include "lib/rect.h"
+#include "lib/film.h"
+#include <wx/wx.h>
 #include <boost/shared_ptr.hpp>
 #include <boost/weak_ptr.hpp>
-#include <wx/wx.h>
+#include <boost/signals2.hpp>
 
-class Playlist;
+class Film;
+class ContentPanel;
+class TimelineView;
+class TimelineTimeAxisView;
+class TimelineReelsView;
 
 class Timeline : public wxPanel
 {
 public:
-       Timeline (wxWindow *, boost::shared_ptr<Playlist>);
+       Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>);
+
+       boost::shared_ptr<const Film> film () const;
+
+       void force_redraw (dcpomatic::Rect<int> const &);
+
+       int x_offset () const {
+               return 8;
+       }
+
+       int width () const {
+               return GetSize().GetWidth ();
+       }
+
+       int track_height () const {
+               return 48;
+       }
+
+       boost::optional<double> pixels_per_second () const {
+               return _pixels_per_second;
+       }
+
+       Position<int> tracks_position () const {
+               return Position<int> (8, 8);
+       }
+
+       int tracks () const;
+
+       void setup_pixels_per_second ();
+
+       void set_snap (bool s) {
+               _snap = s;
+       }
+
+       bool snap () const {
+               return _snap;
+       }
 
 private:
-       void paint (wxPaintEvent &);
-       void playlist_changed ();
+       void paint ();
+       void left_down (wxMouseEvent &);
+       void left_up (wxMouseEvent &);
+       void right_down (wxMouseEvent &);
+       void mouse_moved (wxMouseEvent &);
+       void film_changed (Film::Property);
+       void film_content_changed (int);
+       void resized ();
+       void assign_tracks ();
+       void set_position_from_event (wxMouseEvent &);
+       void clear_selection ();
+       void recreate_views ();
+
+       boost::shared_ptr<TimelineView> event_to_view (wxMouseEvent &);
+       TimelineContentViewList selected_views () const;
+       ContentList selected_content () const;
+       void maybe_snap (DCPTime a, DCPTime b, boost::optional<DCPTime>& nearest_distance) const;
+
+       ContentPanel* _content_panel;
+       boost::weak_ptr<Film> _film;
+       TimelineViewList _views;
+       boost::shared_ptr<TimelineTimeAxisView> _time_axis_view;
+       boost::shared_ptr<TimelineReelsView> _reels_view;
+       int _tracks;
+       boost::optional<double> _pixels_per_second;
+       bool _left_down;
+       wxPoint _down_point;
+       boost::shared_ptr<TimelineContentView> _down_view;
+       DCPTime _down_view_position;
+       bool _first_move;
+       ContentMenu _menu;
+       bool _snap;
 
-       static int const _track_height;
-       
-       boost::weak_ptr<Playlist> _playlist;
+       boost::signals2::scoped_connection _film_changed_connection;
+       boost::signals2::scoped_connection _film_content_changed_connection;
 };