Basic template support (#485).
[dcpomatic.git] / src / lib / film.h
index 3b33aa3058d3c37eb707a1f48b60db3190dd9cee..5fa35b0653d67b46d1bd9845eb86d33b61ad8b19 100644 (file)
@@ -68,7 +68,7 @@ struct isdcf_name_test;
 class Film : public boost::enable_shared_from_this<Film>, public Signaller, public boost::noncopyable
 {
 public:
-       Film (boost::filesystem::path, bool log = true);
+       Film (boost::optional<boost::filesystem::path> dir);
        ~Film ();
 
        boost::filesystem::path info_file (DCPTimePeriod p) const;
@@ -91,9 +91,11 @@ public:
        boost::filesystem::path file (boost::filesystem::path f) const;
        boost::filesystem::path dir (boost::filesystem::path d) const;
 
-       std::list<std::string> read_metadata ();
+       void use_template (std::string name);
+       std::list<std::string> read_metadata (boost::optional<boost::filesystem::path> path = boost::optional<boost::filesystem::path> ());
        void write_metadata () const;
-       boost::shared_ptr<xmlpp::Document> metadata () const;
+       void write_template (boost::filesystem::path path) const;
+       boost::shared_ptr<xmlpp::Document> metadata (bool with_content_paths = true) const;
 
        std::string isdcf_name (bool if_created_now) const;
        std::string dcp_name (bool if_created_now = false) const;
@@ -120,8 +122,7 @@ public:
        int best_video_frame_rate () const;
        FrameRateChange active_frame_rate_change (DCPTime) const;
 
-       dcp::EncryptedKDM
-       make_kdm (
+       dcp::EncryptedKDM make_kdm (
                dcp::Certificate recipient,
                std::vector<dcp::Certificate> trusted_devices,
                boost::filesystem::path cpl_file,
@@ -144,7 +145,11 @@ public:
 
        std::string subtitle_language () const;
 
-       void make_audio_mapping_default (AudioMapping & mapping) const;
+       void make_audio_mapping_default (
+               AudioMapping & mapping,
+               boost::optional<boost::filesystem::path> filename = boost::optional<boost::filesystem::path> ()
+               ) const;
+
        std::vector<std::string> audio_output_names () const;
 
        void repeat_content (ContentList, int);
@@ -154,9 +159,15 @@ public:
        }
 
        std::list<DCPTimePeriod> reels () const;
-
        std::list<int> mapped_audio_channels () const;
 
+       /** @param A period within the DCP
+        *  @return Name of the content which most contributes to the given period.
+        */
+       std::string content_summary (DCPTimePeriod period) const;
+
+       std::list<std::string> fix_conflicting_settings ();
+
        /** Identifiers for the parts of our state;
            used for signalling changes.
        */
@@ -191,7 +202,7 @@ public:
 
        /* GET */
 
-       boost::filesystem::path directory () const {
+       boost::optional<boost::filesystem::path> directory () const {
                return _directory;
        }
 
@@ -332,7 +343,7 @@ private:
        /** Complete path to directory containing the film metadata;
         *  must not be relative.
         */
-       boost::filesystem::path _directory;
+       boost::optional<boost::filesystem::path> _directory;
 
        /** Name for DCP-o-matic */
        std::string _name;
@@ -373,6 +384,8 @@ private:
 
        /** true if our state has changed since we last saved it */
        mutable bool _dirty;
+       /** film being used as a template, or 0 */
+       boost::shared_ptr<Film> _template_film;
 
        boost::signals2::scoped_connection _playlist_changed_connection;
        boost::signals2::scoped_connection _playlist_order_changed_connection;