Merge branch '1.0' of ssh://carlh.dnsalias.org/home/carl/git/dvdomatic into 1.0
[dcpomatic.git] / src / lib / job.h
index f5175c525024ee6b4636e73c35f24e58cbc6a06f..9b8b14a93a2efc434b70297b9a2dbd51773e895a 100644 (file)
@@ -21,8 +21,8 @@
  *  @brief A parent class to represent long-running tasks which are run in their own thread.
  */
 
-#ifndef DVDOMATIC_JOB_H
-#define DVDOMATIC_JOB_H
+#ifndef DCPOMATIC_JOB_H
+#define DCPOMATIC_JOB_H
 
 #include <string>
 #include <boost/thread/mutex.hpp>
@@ -35,10 +35,10 @@ class Film;
 /** @class Job
  *  @brief A parent class to represent long-running tasks which are run in their own thread.
  */
-class Job : public boost::enable_shared_from_this<Job>
+class Job : public boost::enable_shared_from_this<Job>, public boost::noncopyable
 {
 public:
-       Job (boost::shared_ptr<Film>);
+       Job (boost::shared_ptr<const Film>);
        virtual ~Job() {}
 
        /** @return user-readable name of this job */
@@ -47,6 +47,8 @@ public:
        virtual void run () = 0;
        
        void start ();
+       void pause ();
+       void resume ();
        void cancel ();
 
        bool is_new () const;
@@ -55,6 +57,7 @@ public:
        bool finished_ok () const;
        bool finished_in_error () const;
        bool finished_cancelled () const;
+       bool paused () const;
 
        std::string error_summary () const;
        std::string error_details () const;
@@ -67,8 +70,12 @@ public:
        void ascend ();
        void descend (float);
        float overall_progress () const;
+       bool progress_unknown () const {
+               return _progress_unknown;
+       }
 
-       /** Emitted by the JobManagerView from the UI thread */
+       boost::signals2::signal<void()> Progress;
+       /** Emitted from the UI thread when the job is finished */
        boost::signals2::signal<void()> Finished;
 
 protected:
@@ -77,9 +84,10 @@ protected:
 
        /** Description of a job's state */
        enum State {
-               NEW,            ///< the job hasn't been started yet
-               RUNNING,        ///< the job is running
-               FINISHED_OK,    ///< the job has finished successfully
+               NEW,            ///< the job hasn't been started yet
+               RUNNING,        ///< the job is running
+               PAUSED,         ///< the job has been paused
+               FINISHED_OK,    ///< the job has finished successfully
                FINISHED_ERROR, ///< the job has finished in error
                FINISHED_CANCELLED ///< the job was cancelled
        };
@@ -87,7 +95,7 @@ protected:
        void set_state (State);
        void set_error (std::string s, std::string d);
 
-       boost::shared_ptr<Film> _film;
+       boost::shared_ptr<const Film> _film;
 
 private:
 
@@ -121,6 +129,8 @@ private:
        /** true if this job's progress will always be unknown */
        bool _progress_unknown;
 
+       float _last_set;
+
        int _ran_for;
 };