00001 #ifndef ERIS_TASK_H
00002 #define ERIS_TASK_H
00003
00004 #include <sigc++/trackable.h>
00005 #include <sigc++/signal.h>
00006
00007 #include <map>
00008 #include <string>
00009
00010 namespace Atlas {
00011 namespace Message {
00012 class Element;
00013 typedef std::map<std::string, Element> MapType;
00014 }
00015 }
00016
00017 namespace WFMath { class TimeDiff; }
00018
00019 namespace Eris
00020 {
00021
00022 class Entity;
00023 class View;
00024
00025 class Task : public sigc::trackable
00026 {
00027 public:
00028 virtual ~Task();
00029
00032 const std::string& name() const
00033 { return m_name; }
00034
00039 double progress() const
00040 { return m_progress; }
00041
00044 bool isComplete() const;
00045
00046 sigc::signal<void> Completed;
00047
00048 sigc::signal<void> Cancelled;
00049
00050 sigc::signal<void> Progressed;
00051
00052 private:
00053 void progressChanged();
00054
00055 friend class View;
00056 friend class Entity;
00057
00061 Task(Entity* owner, const std::string& nm);
00062
00063 void updateFromAtlas(const Atlas::Message::MapType& d);
00064
00068 void updatePredictedProgress(const WFMath::TimeDiff& dt);
00069
00070 const std::string m_name;
00071 Entity* m_owner;
00072 double m_progress;
00073
00075 double m_progressRate;
00076 };
00077
00078 }
00079
00080 #endif