#include <boost/weak_ptr.hpp>
#include "lib/film.h"
#include "lib/playlist.h"
+#include "lib/image_content.h"
#include "film_editor.h"
#include "timeline.h"
#include "wx_util.h"
_track = t;
}
+ void unset_track () {
+ _track = boost::optional<int> ();
+ }
+
optional<int> track () const {
return _track;
}
gc->StrokePath (path);
gc->FillPath (path);
- wxString name = wxString::Format (wxT ("%s [%s]"), std_to_wx (cont->path_summary()).data(), type().data());
+ wxString name = wxString::Format (wxT ("%s [%s]"), std_to_wx (cont->summary()).data(), type().data());
wxDouble name_width;
wxDouble name_height;
wxDouble name_descent;
wxString type () const
{
- if (dynamic_pointer_cast<FFmpegContent> (content ())) {
- return _("video");
- } else {
+ if (dynamic_pointer_cast<ImageContent> (content ()) && content()->number_of_paths() == 1) {
return _("still");
+ } else {
+ return _("video");
}
}
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
if (dynamic_pointer_cast<AudioContent> (*i)) {
_views.push_back (shared_ptr<View> (new AudioContentView (*this, *i)));
}
- if (dynamic_pointer_cast<SubtitleContent> (*i)) {
+
+ shared_ptr<SubtitleContent> sc = dynamic_pointer_cast<SubtitleContent> (*i);
+ if (sc && sc->has_subtitles ()) {
_views.push_back (shared_ptr<View> (new SubtitleContentView (*this, *i)));
}
}
Refresh ();
}
+void
+Timeline::playlist_content_changed (int property)
+{
+ ensure_ui_thread ();
+
+ if (property == ContentProperty::POSITION) {
+ assign_tracks ();
+ setup_pixels_per_second ();
+ 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) {
if (new_position < DCPTime ()) {
new_position = DCPTime ();
}
-
+
_down_view->content()->set_position (new_position);
shared_ptr<Film> film = _film.lock ();