From 76f601f5edbdfceec91ff6f6ce4b310e0d3a6ce9 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 21 Mar 2014 10:25:04 +0000 Subject: [PATCH 1/1] Draw subtitle content in the timeline. --- src/wx/timeline.cc | 89 +++++++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 25 deletions(-) diff --git a/src/wx/timeline.cc b/src/wx/timeline.cc index ac03c75da..e1b507383 100644 --- a/src/wx/timeline.cc +++ b/src/wx/timeline.cc @@ -243,6 +243,25 @@ private: } }; +class SubtitleContentView : public ContentView +{ +public: + SubtitleContentView (Timeline& tl, shared_ptr c) + : ContentView (tl, c) + {} + +private: + wxString type () const + { + return _("subtitles"); + } + + wxColour colour () const + { + return wxColour (163, 255, 154, 255); + } +}; + class TimeAxisView : public View { public: @@ -399,6 +418,9 @@ Timeline::playlist_changed () if (dynamic_pointer_cast (*i)) { _views.push_back (shared_ptr (new AudioContentView (*this, *i))); } + if (dynamic_pointer_cast (*i)) { + _views.push_back (shared_ptr (new SubtitleContentView (*this, *i))); + } } assign_tracks (); @@ -409,38 +431,55 @@ Timeline::playlist_changed () void Timeline::assign_tracks () { + list > video; + list > audio; + list > subtitle; + for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) { - shared_ptr cv = dynamic_pointer_cast (*i); - if (cv) { - cv->set_track (0); - _tracks = 1; + shared_ptr v = dynamic_pointer_cast (*i); + if (v) { + video.push_back (v); + } + + shared_ptr a = dynamic_pointer_cast (*i); + if (a) { + audio.push_back (a); + } + + shared_ptr s = dynamic_pointer_cast (*i); + if (s) { + subtitle.push_back (s); } } - for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) { - shared_ptr acv = dynamic_pointer_cast (*i); - if (!acv) { - continue; + _tracks = 0; + if (!video.empty ()) { + for (list >::iterator i = video.begin(); i != video.end(); ++i) { + (*i)->set_track (_tracks); } + ++_tracks; + } - shared_ptr acv_content = acv->content(); + if (!subtitle.empty ()) { + for (list >::iterator i = subtitle.begin(); i != subtitle.end(); ++i) { + (*i)->set_track (_tracks); + } + ++_tracks; + } + + int const audio_start = _tracks; - int t = 1; + for (list >::iterator i = audio.begin(); i != audio.end(); ++i) { + shared_ptr acv_content = (*i)->content(); + + int t = audio_start; while (1) { - ViewList::iterator j = _views.begin(); - while (j != _views.end()) { - shared_ptr test = dynamic_pointer_cast (*j); - if (!test) { - ++j; - continue; - } - - shared_ptr test_content = test->content(); - - if (test && test->track() == t) { + list >::iterator j = audio.begin (); + while (j != audio.end()) { + if ((*j)->track() == t) { bool const no_overlap = - (acv_content->position() < test_content->position() && acv_content->end() < test_content->position()) || - (acv_content->position() > test_content->end() && acv_content->end() > test_content->end()); + (acv_content->position() < (*j)->content()->position() && acv_content->end() < (*j)->content()->position()) || + (acv_content->position() > (*j)->content()->end() && acv_content->end() > (*j)->content()->end()); if (!no_overlap) { /* we have an overlap on track `t' */ @@ -452,13 +491,13 @@ Timeline::assign_tracks () ++j; } - if (j == _views.end ()) { + if (j == audio.end ()) { /* no overlap on `t' */ break; } } - acv->set_track (t); + (*i)->set_track (t); _tracks = max (_tracks, t + 1); } -- 2.30.2