shared_ptr<Content>
-Content::clone (shared_ptr<const Film> film) const
+Content::clone () const
{
/* This is a bit naughty, but I can't think of a compelling reason not to do it ... */
xmlpp::Document doc;
/* notes is unused here (we assume) */
list<string> notes;
- return content_factory (film, cxml::NodePtr(new cxml::Node(node)), Film::current_state_version, notes);
+ return content_factory (cxml::NodePtr(new cxml::Node(node)), Film::current_state_version, notes);
}
string
*/
virtual std::list<DCPTime> reel_split_points () const;
- boost::shared_ptr<Content> clone (boost::shared_ptr<const Film> film) const;
+ boost::shared_ptr<Content> clone () const;
void set_paths (std::vector<boost::filesystem::path> paths);
* @return Content object, or 0 if no content was recognised in the XML.
*/
shared_ptr<Content>
-content_factory (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
+content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
{
string const type = node->string_child ("Type");
content.reset (new AtmosMXFContent (node, version));
}
- /* See if this content should be nudged to start on a video frame */
- DCPTime const old_pos = content->position();
- content->set_position(film, old_pos);
- if (old_pos != content->position()) {
- string note = _("Your project contains video content that was not aligned to a frame boundary.");
- note += " ";
- if (old_pos < content->position()) {
- note += String::compose(
- _("The file %1 has been moved %2 milliseconds later."),
- content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
- );
- } else {
- note += String::compose(
- _("The file %1 has been moved %2 milliseconds earlier."),
- content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
- );
- }
- notes.push_back (note);
- }
-
- /* ...or have a start trim which is an integer number of frames */
- ContentTime const old_trim = content->trim_start();
- content->set_trim_start(old_trim);
- if (old_trim != content->trim_start()) {
- string note = _("Your project contains video content whose trim was not aligned to a frame boundary.");
- note += " ";
- if (old_trim < content->trim_start()) {
- note += String::compose(
- _("The file %1 has been trimmed by %2 milliseconds more."),
- content->path_summary(), ContentTime(content->trim_start() - old_trim).seconds() * 1000
- );
- } else {
- note += String::compose(
- _("The file %1 has been trimmed by %2 milliseconds less."),
- content->path_summary(), ContentTime(old_trim - content->trim_start()).seconds() * 1000
- );
- }
- notes.push_back (note);
- }
-
return content;
}
class Film;
class Content;
-extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, cxml::ConstNodePtr, int, std::list<std::string> &);
+extern boost::shared_ptr<Content> content_factory (cxml::ConstNodePtr, int, std::list<std::string> &);
extern std::list<boost::shared_ptr<Content> > content_factory (boost::filesystem::path);
#include "config.h"
#include "util.h"
#include "digester.h"
+#include "compose.hpp"
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/shared_ptr.hpp>
Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
{
BOOST_FOREACH (cxml::NodePtr i, node->node_children ("Content")) {
- _content.push_back (content_factory (film, i, version, notes));
+ shared_ptr<Content> content = content_factory (i, version, notes);
+
+ /* See if this content should be nudged to start on a video frame */
+ DCPTime const old_pos = content->position();
+ content->set_position(film, old_pos);
+ if (old_pos != content->position()) {
+ string note = _("Your project contains video content that was not aligned to a frame boundary.");
+ note += " ";
+ if (old_pos < content->position()) {
+ note += String::compose(
+ _("The file %1 has been moved %2 milliseconds later."),
+ content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
+ );
+ } else {
+ note += String::compose(
+ _("The file %1 has been moved %2 milliseconds earlier."),
+ content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
+ );
+ }
+ notes.push_back (note);
+ }
+
+ /* ...or have a start trim which is an integer number of frames */
+ ContentTime const old_trim = content->trim_start();
+ content->set_trim_start(old_trim);
+ if (old_trim != content->trim_start()) {
+ string note = _("Your project contains video content whose trim was not aligned to a frame boundary.");
+ note += " ";
+ if (old_trim < content->trim_start()) {
+ note += String::compose(
+ _("The file %1 has been trimmed by %2 milliseconds more."),
+ content->path_summary(), ContentTime(content->trim_start() - old_trim).seconds() * 1000
+ );
+ } else {
+ note += String::compose(
+ _("The file %1 has been trimmed by %2 milliseconds less."),
+ content->path_summary(), ContentTime(old_trim - content->trim_start()).seconds() * 1000
+ );
+ }
+ notes.push_back (note);
+ }
+
+ _content.push_back (content);
}
/* This shouldn't be necessary but better safe than sorry (there could be old files) */
DCPTime pos = range.second;
for (int i = 0; i < n; ++i) {
BOOST_FOREACH (shared_ptr<Content> j, c) {
- shared_ptr<Content> copy = j->clone (film);
+ shared_ptr<Content> copy = j->clone ();
copy->set_position (film, pos + copy->position() - range.first);
_content.push_back (copy);
}
{
ContentList const sel = _film_editor->content_panel()->selected();
DCPOMATIC_ASSERT (sel.size() == 1);
- _clipboard = sel.front()->clone(_film);
+ _clipboard = sel.front()->clone();
}
void edit_paste ()
void
Controls::add_clicked ()
{
- shared_ptr<Content> sel = selected_content()->clone(_film);
+ shared_ptr<Content> sel = selected_content()->clone();
DCPOMATIC_ASSERT (sel);
_film->examine_and_add_content (sel);
bool const ok = display_progress (_("DCP-o-matic"), _("Loading DCP"));