+ setup_pixels_per_second ();
+}
+
+void
+Timeline::clear_selection ()
+{
+ for (TimelineViewList::iterator i = _views.begin(); i != _views.end(); ++i) {
+ shared_ptr<TimelineContentView> cv = dynamic_pointer_cast<TimelineContentView> (*i);
+ if (cv) {
+ cv->set_selected (false);
+ }
+ }
+}
+
+TimelineContentViewList
+Timeline::selected_views () const
+{
+ TimelineContentViewList sel;
+
+ for (TimelineViewList::const_iterator i = _views.begin(); i != _views.end(); ++i) {
+ shared_ptr<TimelineContentView> cv = dynamic_pointer_cast<TimelineContentView> (*i);
+ if (cv && cv->selected()) {
+ sel.push_back (cv);
+ }
+ }
+
+ return sel;
+}
+
+ContentList
+Timeline::selected_content () const
+{
+ ContentList sel;
+ TimelineContentViewList views = selected_views ();
+
+ for (TimelineContentViewList::const_iterator i = views.begin(); i != views.end(); ++i) {
+ sel.push_back ((*i)->content ());
+ }
+
+ return sel;
+}
+
+void
+Timeline::set_selection (ContentList selection)
+{
+ for (TimelineViewList::iterator i = _views.begin(); i != _views.end(); ++i) {
+ shared_ptr<TimelineContentView> cv = dynamic_pointer_cast<TimelineContentView> (*i);
+ if (cv) {
+ cv->set_selected (find (selection.begin(), selection.end(), cv->content ()) != selection.end ());
+ }
+ }