X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fwx%2Ftimeline.h;h=cab0ea0e08525bc36221cbf401c360ee9b750757;hb=21fb4ee6deb1321b37ad360cabdc8963774a4897;hp=5d7960be5ff4a000aa12c5f1178a0602f4955240;hpb=56aa7eef1572e48c96ff198ee52a5a5fe17a6bf0;p=dcpomatic.git diff --git a/src/wx/timeline.h b/src/wx/timeline.h index 5d7960be5..cab0ea0e0 100644 --- a/src/wx/timeline.h +++ b/src/wx/timeline.h @@ -1,7 +1,5 @@ -/* -*- c-basic-offset: 8; default-tab-width: 8; -*- */ - /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2015 Carl Hetherington 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 @@ -21,20 +19,26 @@ #include #include +#include #include -#include "util.h" +#include "lib/util.h" +#include "lib/rect.h" +#include "content_menu.h" +#include "timeline_content_view.h" class Film; -class View; +class ContentPanel; +class TimelineView; +class TimelineTimeAxisView; class Timeline : public wxPanel { public: - Timeline (wxWindow *, boost::shared_ptr); + Timeline (wxWindow *, ContentPanel *, boost::shared_ptr); boost::shared_ptr film () const; - void force_redraw (Rect const &); + void force_redraw (dcpomatic::Rect const &); int x_offset () const { return 8; @@ -45,27 +49,62 @@ public: } int track_height () const { - return 64; + return 48; } - double pixels_per_time_unit () const { - return _pixels_per_time_unit; + boost::optional pixels_per_second () const { + return _pixels_per_second; } - Position tracks_position () const { - return Position (8, 8); + Position tracks_position () const { + return Position (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 paint (); void left_down (wxMouseEvent &); + void left_up (wxMouseEvent &); + void right_down (wxMouseEvent &); + void mouse_moved (wxMouseEvent &); void playlist_changed (); - void setup_pixels_per_time_unit (); - void resized (wxSizeEvent &); - - boost::weak_ptr _film; - std::list > _views; - double _pixels_per_time_unit; + void playlist_content_changed (int); + void resized (); + void assign_tracks (); + void set_position_from_event (wxMouseEvent &); + void clear_selection (); + void recreate_views (); + + boost::shared_ptr event_to_view (wxMouseEvent &); + TimelineContentViewList selected_views () const; + ContentList selected_content () const; + void maybe_snap (DCPTime a, DCPTime b, boost::optional& nearest_distance) const; + + ContentPanel* _content_panel; + boost::weak_ptr _film; + TimelineViewList _views; + boost::shared_ptr _time_axis_view; + int _tracks; + boost::optional _pixels_per_second; + bool _left_down; + wxPoint _down_point; + boost::shared_ptr _down_view; + 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; };