Hand-apply 33b76b675d747fd828aba91d9d857227cb8a8244 from master; make sure signals...
[dcpomatic.git] / src / lib / film.h
index 6c3f78895791221297b500ea64b1b4ea730777af..c3ab9f2ff550de1a65cd79a2924b36c13b293122 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #ifndef DCPOMATIC_FILM_H
 #define DCPOMATIC_FILM_H
 
-#include <string>
-#include <vector>
-#include <inttypes.h>
-#include <boost/signals2.hpp>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/filesystem.hpp>
-#include <dcp/key.h>
-#include <dcp/decrypted_kdm.h>
-#include <dcp/encrypted_kdm.h>
 #include "util.h"
 #include "types.h"
 #include "isdcf_metadata.h"
 #include "frame_rate_change.h"
+#include "ratio.h"
+#include <dcp/key.h>
+#include <dcp/encrypted_kdm.h>
+#include <boost/signals2.hpp>
+#include <boost/enable_shared_from_this.hpp>
+#include <boost/filesystem.hpp>
+#include <string>
+#include <vector>
+#include <inttypes.h>
 
 class DCPContentType;
 class Log;
@@ -47,7 +47,7 @@ class Playlist;
 class AudioContent;
 class Scaler;
 class Screen;
-class isdcf_name_test;
+struct isdcf_name_test;
 
 /** @class Film
  *
@@ -60,6 +60,7 @@ class Film : public boost::enable_shared_from_this<Film>, public boost::noncopya
 {
 public:
        Film (boost::filesystem::path, bool log = true);
+       ~Film ();
 
        boost::filesystem::path info_dir () const;
        boost::filesystem::path j2c_path (int, Eyes, bool) const;
@@ -121,7 +122,7 @@ public:
 
        dcp::EncryptedKDM
        make_kdm (
-               boost::shared_ptr<dcp::Certificate> target,
+               dcp::Certificate target,
                boost::filesystem::path cpl_file,
                dcp::LocalTime from,
                dcp::LocalTime until,
@@ -144,6 +145,8 @@ public:
                return _state_version;
        }
 
+       std::string subtitle_language () const;
+
        /** Identifiers for the parts of our state;
            used for signalling changes.
        */
@@ -250,6 +253,7 @@ public:
        void set_directory (boost::filesystem::path);
        void set_name (std::string);
        void set_use_isdcf_name (bool);
+       void examine_content (boost::shared_ptr<Content>);
        void examine_and_add_content (boost::shared_ptr<Content>);
        void add_content (boost::shared_ptr<Content>);
        void remove_content (boost::shared_ptr<Content>);
@@ -282,7 +286,7 @@ public:
 
 private:
 
-       friend class ::isdcf_name_test;
+       friend struct ::isdcf_name_test;
 
        void signal_changed (Property);
        std::string video_identifier () const;
@@ -338,8 +342,12 @@ private:
        /** true if our state has changed since we last saved it */
        mutable bool _dirty;
 
-       friend class paths_test;
-       friend class film_metadata_test;
+       boost::signals2::scoped_connection _playlist_changed_connection;
+       boost::signals2::scoped_connection _playlist_content_changed_connection;
+       std::list<boost::signals2::connection> _job_connections;
+
+       friend struct paths_test;
+       friend struct film_metadata_test;
 };
 
 #endif