From 3d9fdcf7e6a5d775a2688a071b69264b1a6971c7 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 19 Jul 2013 13:39:14 +0100 Subject: Allow repeat of multiple stuff. --- src/lib/playlist.cc | 23 +++++++++++++++++------ src/lib/playlist.h | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'src/lib') diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 31b16b646..e4494acb0 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -42,6 +42,7 @@ using std::min; using std::max; using std::string; using std::stringstream; +using std::pair; using boost::optional; using boost::shared_ptr; using boost::weak_ptr; @@ -291,14 +292,24 @@ Playlist::content () const } void -Playlist::repeat (shared_ptr c, int n) +Playlist::repeat (list > c, int n) { - Time pos = c->end (); + pair range (TIME_MAX, 0); + for (list >::iterator i = c.begin(); i != c.end(); ++i) { + range.first = min (range.first, (*i)->start ()); + range.second = max (range.second, (*i)->start ()); + range.first = min (range.first, (*i)->end ()); + range.second = max (range.second, (*i)->end ()); + } + + Time pos = range.second; for (int i = 0; i < n; ++i) { - shared_ptr copy = c->clone (); - copy->set_start (pos); - _content.push_back (copy); - pos = copy->end (); + for (list >::iterator i = c.begin(); i != c.end(); ++i) { + shared_ptr copy = (*i)->clone (); + copy->set_start (pos + copy->start() - range.first); + _content.push_back (copy); + } + pos += range.second - range.first; } reconnect (); diff --git a/src/lib/playlist.h b/src/lib/playlist.h index e949de0ea..1d69c34ba 100644 --- a/src/lib/playlist.h +++ b/src/lib/playlist.h @@ -77,7 +77,7 @@ public: void set_sequence_video (bool); void maybe_sequence_video (); - void repeat (boost::shared_ptr, int); + void repeat (std::list >, int); mutable boost::signals2::signal Changed; /** Third parameter is true if signals are currently being emitted frequently */ -- cgit v1.2.3