_timeline_dialog = 0;
}
- _timeline_dialog = new TimelineDialog (this, _film);
+ _timeline_dialog = new TimelineDialog (this, _film, _film_viewer);
_timeline_dialog->set_selection (selected());
_timeline_dialog->Show ();
}
#include "timeline_atmos_content_view.h"
#include "content_panel.h"
#include "wx_util.h"
+#include "film_viewer.h"
#include "lib/film.h"
#include "lib/playlist.h"
#include "lib/image_content.h"
double const Timeline::_minimum_pixels_per_second = 640.0 / (60 * 60 * 3);
int const Timeline::_minimum_pixels_per_track = 16;
-Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film)
+Timeline::Timeline (wxWindow* parent, ContentPanel* cp, shared_ptr<Film> film, weak_ptr<FilmViewer> viewer)
: wxPanel (parent, wxID_ANY)
, _labels_canvas (new wxScrolledCanvas (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE))
, _main_canvas (new wxScrolledCanvas (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE))
, _content_panel (cp)
, _film (film)
+ , _viewer (viewer)
, _time_axis_view (new TimelineTimeAxisView (*this, 64))
, _reels_view (new TimelineReelsView (*this, 32))
, _labels_view (new TimelineLabelsView (*this))
_film_changed_connection = film->Change.connect (bind (&Timeline::film_change, this, _1, _2));
_film_content_change_connection = film->ContentChange.connect (bind (&Timeline::film_content_change, this, _1, _3, _4));
+ shared_ptr<FilmViewer> vp = viewer.lock ();
+ DCPOMATIC_ASSERT (vp);
+ _viewer_position_change_connection = vp->PositionChanged.connect (bind(&Timeline::position_change, this));
+
setup_scrollbars ();
_labels_canvas->ShowScrollbars (wxSHOW_SB_NEVER, wxSHOW_SB_NEVER);
}
+void
+Timeline::position_change ()
+{
+ Refresh ();
+}
+
void
Timeline::set_pixels_per_second (double pps)
{
);
}
+ /* Playhead */
+
+ shared_ptr<FilmViewer> vp = _viewer.lock ();
+ DCPOMATIC_ASSERT (vp);
+
+ gc->SetPen (*wxRED_PEN);
+ wxGraphicsPath path = gc->CreatePath ();
+ double const ph = vp->position().seconds() * pixels_per_second().get_value_or(0);
+ path.MoveToPoint (ph, 0);
+ path.AddLineToPoint (ph, pixels_per_track() * _tracks + 32);
+ gc->StrokePath (path);
+
delete gc;
}
class TimelineTimeAxisView;
class TimelineReelsView;
class TimelineLabelsView;
+class FilmViewer;
class Timeline : public wxPanel
{
public:
- Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>);
+ Timeline (wxWindow *, ContentPanel *, boost::shared_ptr<Film>, boost::weak_ptr<FilmViewer> viewer);
boost::shared_ptr<const Film> film () const;
void set_pixels_per_second (double pps);
void set_pixels_per_track (int h);
void zoom_all ();
+ void position_change ();
boost::shared_ptr<TimelineView> event_to_view (wxMouseEvent &);
TimelineContentViewList selected_views () const;
wxScrolledCanvas* _main_canvas;
ContentPanel* _content_panel;
boost::weak_ptr<Film> _film;
+ boost::weak_ptr<FilmViewer> _viewer;
TimelineViewList _views;
boost::shared_ptr<TimelineTimeAxisView> _time_axis_view;
boost::shared_ptr<TimelineReelsView> _reels_view;
boost::signals2::scoped_connection _film_changed_connection;
boost::signals2::scoped_connection _film_content_change_connection;
+ boost::signals2::scoped_connection _viewer_position_change_connection;
};
/*
- Copyright (C) 2013-2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
using std::cout;
using std::string;
using boost::shared_ptr;
+using boost::weak_ptr;
-TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film)
+TimelineDialog::TimelineDialog (ContentPanel* cp, shared_ptr<Film> film, weak_ptr<FilmViewer> viewer)
: wxDialog (
cp->window(),
wxID_ANY,
#endif
)
, _film (film)
- , _timeline (this, cp, film)
+ , _timeline (this, cp, film, viewer)
{
wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
/*
- Copyright (C) 2013-2016 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2013-2019 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
class TimelineDialog : public wxDialog
{
public:
- TimelineDialog (ContentPanel *, boost::shared_ptr<Film>);
+ TimelineDialog (ContentPanel *, boost::shared_ptr<Film>, boost::weak_ptr<FilmViewer> viewer);
void set_selection (ContentList selection);