X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Fwx%2Ftimeline.h;h=44a8973716bdd3dca7f3df7fe761f5fd1a019f40;hp=82d10afde6cc8a8337c910b8b9506c1461c96585;hb=8f12e84009d7c2685bb2eeb32665876463d4e6e5;hpb=22b9f3b2090d8bdfe52cda1e69d3acbe874f1ce5 diff --git a/src/wx/timeline.h b/src/wx/timeline.h index 82d10afde..44a897371 100644 --- a/src/wx/timeline.h +++ b/src/wx/timeline.h @@ -1,69 +1,62 @@ /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ +#include "content_menu.h" +#include "timeline_content_view.h" +#include "lib/util.h" +#include "lib/rect.h" +#include "lib/film.h" +#include #include #include #include -#include -#include "lib/util.h" -#include "lib/rect.h" -#include "content_menu.h" class Film; -class View; -class ContentView; class ContentPanel; -class TimeAxisView; +class TimelineView; +class TimelineTimeAxisView; +class TimelineReelsView; +class TimelineLabelsView; +class FilmViewer; class Timeline : public wxPanel { public: - Timeline (wxWindow *, ContentPanel *, boost::shared_ptr); + Timeline (wxWindow *, ContentPanel *, boost::shared_ptr, boost::weak_ptr viewer); boost::shared_ptr film () const; void force_redraw (dcpomatic::Rect const &); - int x_offset () const { - return 8; - } - - int width () const { - return GetSize().GetWidth (); - } + int width () const; - int track_height () const { - return 48; + int pixels_per_track () const { + return _pixels_per_track; } boost::optional pixels_per_second () const { return _pixels_per_second; } - Position tracks_position () const { - return Position (8, 8); - } - int tracks () const; - void setup_pixels_per_second (); - void set_snap (bool s) { _snap = s; } @@ -72,40 +65,83 @@ public: return _snap; } + void set_selection (ContentList selection); + + enum Tool { + SELECT, + ZOOM, + ZOOM_ALL, + SNAP, + SEQUENCE + }; + + void tool_clicked (Tool t); + + int tracks_y_offset () const; + private: - void paint (); + void paint_labels (); + void paint_main (); void left_down (wxMouseEvent &); + void left_down_select (wxMouseEvent &); void left_up (wxMouseEvent &); + void left_up_select (wxMouseEvent &); + void left_up_zoom (wxMouseEvent &); void right_down (wxMouseEvent &); + void right_down_select (wxMouseEvent &); void mouse_moved (wxMouseEvent &); - void playlist_changed (); - void playlist_content_changed (int); + void mouse_moved_select (wxMouseEvent &); + void mouse_moved_zoom (wxMouseEvent &); + void film_change (ChangeType type, Film::Property); + void film_content_change (ChangeType type, int, bool frequent); void resized (); void assign_tracks (); - void set_position_from_event (wxMouseEvent &); + void set_position_from_event (wxMouseEvent& ev, bool force_emit = false); void clear_selection (); - - typedef std::vector > ViewList; - typedef std::vector > ContentViewList; - - boost::shared_ptr event_to_view (wxMouseEvent &); - ContentViewList selected_views () const; + void recreate_views (); + void setup_scrollbars (); + void scrolled (wxScrollWinEvent& ev); + void set_pixels_per_second (double pps); + void set_pixels_per_track (int h); + void zoom_all (); + void update_playhead (); + + boost::shared_ptr event_to_view (wxMouseEvent &); + TimelineContentViewList selected_views () const; ContentList selected_content () const; + void maybe_snap (dcpomatic::DCPTime a, dcpomatic::DCPTime b, boost::optional& nearest_distance) const; + wxScrolledCanvas* _labels_canvas; + wxScrolledCanvas* _main_canvas; ContentPanel* _content_panel; boost::weak_ptr _film; - ViewList _views; - boost::shared_ptr _time_axis_view; + boost::weak_ptr _viewer; + TimelineViewList _views; + boost::shared_ptr _time_axis_view; + boost::shared_ptr _reels_view; + boost::shared_ptr _labels_view; int _tracks; boost::optional _pixels_per_second; bool _left_down; wxPoint _down_point; - boost::shared_ptr _down_view; - DCPTime _down_view_position; + boost::optional _zoom_point; + boost::shared_ptr _down_view; + dcpomatic::DCPTime _down_view_position; bool _first_move; ContentMenu _menu; bool _snap; - - boost::signals2::scoped_connection _playlist_changed_connection; - boost::signals2::scoped_connection _playlist_content_changed_connection; + std::list _start_snaps; + std::list _end_snaps; + Tool _tool; + int _x_scroll_rate; + int _y_scroll_rate; + int _pixels_per_track; + bool _first_resize; + wxTimer _timer; + + static double const _minimum_pixels_per_second; + static int const _minimum_pixels_per_track; + + boost::signals2::scoped_connection _film_changed_connection; + boost::signals2::scoped_connection _film_content_change_connection; };