summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-24 10:06:25 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-24 10:06:25 +0100
commitf3fc4b2a63ccc0a4da61371b3c2b10c8e9b8247d (patch)
tree4f9355d58ad1b7cc596c8cbb53c99e7f451525d5 /src
parente21ed88c5ab6192baa31a433e5ea6f366f74ae99 (diff)
Re-assign timeline tracks when things are moved about.
Diffstat (limited to 'src')
-rw-r--r--src/wx/timeline.cc32
-rw-r--r--src/wx/timeline.h4
2 files changed, 31 insertions, 5 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 ();
diff --git a/src/wx/timeline.h b/src/wx/timeline.h
index 7b4d75d09..fafb09c0e 100644
--- a/src/wx/timeline.h
+++ b/src/wx/timeline.h
@@ -79,6 +79,7 @@ private:
void right_down (wxMouseEvent &);
void mouse_moved (wxMouseEvent &);
void playlist_changed ();
+ void playlist_content_changed (int);
void resized ();
void assign_tracks ();
void set_position_from_event (wxMouseEvent &);
@@ -105,5 +106,6 @@ private:
ContentMenu _menu;
bool _snap;
- boost::signals2::scoped_connection _playlist_connection;
+ boost::signals2::scoped_connection _playlist_changed_connection;
+ boost::signals2::scoped_connection _playlist_content_changed_connection;
};