More fixes for errors / crashes / misbehaviour with content changes
[dcpomatic.git] / src / lib / playlist.h
index 0a5c087dea67ed076f0833e584ef2c5b3359a823..649887f7271f38b2c2fd9c4afdf0f63bb4f0d195 100644 (file)
@@ -46,7 +46,7 @@ public:
        ~Playlist ();
 
        void as_xml (xmlpp::Node *, bool with_content_paths);
-       void set_from_xml (boost::shared_ptr<const Film>, cxml::ConstNodePtr, int, std::list<std::string> &);
+       void set_from_xml (boost::shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, std::list<std::string>& notes);
 
        void add (boost::shared_ptr<Content>);
        void remove (boost::shared_ptr<Content>);
@@ -64,9 +64,10 @@ public:
 
        int best_video_frame_rate () const;
        DCPTime video_end () const;
-       DCPTime subtitle_end () const;
+       DCPTime text_end () const;
        FrameRateChange active_frame_rate_change (DCPTime, int dcp_frame_rate) const;
        std::string content_summary (DCPTimePeriod period) const;
+       std::pair<double, double> speed_up_range (int dcp_video_frame_rate) const;
 
        void set_sequence (bool);
        void maybe_sequence ();
@@ -76,14 +77,19 @@ public:
        /** Emitted when content has been added to or removed from the playlist; implies OrderChanged */
        mutable boost::signals2::signal<void ()> Changed;
        mutable boost::signals2::signal<void ()> OrderChanged;
+
+       mutable boost::signals2::signal<void ()> ContentMayChange;
        /** Emitted when something about a piece of our content has changed;
         *  these emissions include when the position of the content changes.
         *  Third parameter is true if signals are currently being emitted frequently.
         */
        mutable boost::signals2::signal<void (boost::weak_ptr<Content>, int, bool)> ContentChanged;
+       mutable boost::signals2::signal<void ()> ContentNotChanged;
 
 private:
+       void content_may_change ();
        void content_changed (boost::weak_ptr<Content>, int, bool);
+       void content_not_changed ();
        void reconnect ();
 
        /** List of content.  Kept sorted in position order. */