diff options
Diffstat (limited to 'src/wx/timeline.cc')
| -rw-r--r-- | src/wx/timeline.cc | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index d4df6d8b2..eba12c47f 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -123,6 +123,10 @@ public: _track = t; } + void unset_track () { + _track = boost::optional<int> (); + } + optional<int> track () const { return _track; } @@ -362,7 +366,8 @@ Timeline::Timeline (wxWindow* parent, FilmEditor* ed, shared_ptr<Film> film) SetMinSize (wxSize (640, tracks() * track_height() + 96)); - _playlist_connection = film->playlist()->Changed.connect (bind (&Timeline::playlist_changed, this)); + _playlist_changed_connection = film->playlist()->Changed.connect (bind (&Timeline::playlist_changed, this)); + _playlist_content_changed_connection = film->playlist()->ContentChanged.connect (bind (&Timeline::playlist_content_changed, this, _2)); } void @@ -414,18 +419,37 @@ Timeline::playlist_changed () } void +Timeline::playlist_content_changed (int property) +{ + ensure_ui_thread (); + + if (property == ContentProperty::POSITION) { + assign_tracks (); + setup_pixels_per_time_unit (); + Refresh (); + } +} + +void Timeline::assign_tracks () { for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) { + shared_ptr<ContentView> c = dynamic_pointer_cast<ContentView> (*i); + if (c) { + c->unset_track (); + } + } + + for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) { shared_ptr<ContentView> cv = dynamic_pointer_cast<ContentView> (*i); if (!cv) { continue; } - + shared_ptr<Content> content = cv->content(); int t = 0; - while (1) { + while (true) { ViewList::iterator j = _views.begin(); while (j != _views.end()) { shared_ptr<ContentView> test = dynamic_pointer_cast<ContentView> (*j); @@ -650,7 +674,7 @@ Timeline::set_position_from_event (wxMouseEvent& ev) if (new_position < 0) { new_position = 0; } - + _down_view->content()->set_position (new_position); shared_ptr<Film> film = _film.lock (); |
