| 1 | /* | 
|---|
| 2 | * Process.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Feb 17, 2010 | 
|---|
| 5 | *      Author: crueger | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 |  | 
|---|
| 9 | /** | 
|---|
| 10 | * A Process is an action that might take some time and therfore contains methods | 
|---|
| 11 | * that allows showing how much is done. | 
|---|
| 12 | */ | 
|---|
| 13 | #ifndef PROCESS_HPP_ | 
|---|
| 14 | #define PROCESS_HPP_ | 
|---|
| 15 |  | 
|---|
| 16 | // include config.h | 
|---|
| 17 | #ifdef HAVE_CONFIG_H | 
|---|
| 18 | #include <config.h> | 
|---|
| 19 | #endif | 
|---|
| 20 |  | 
|---|
| 21 |  | 
|---|
| 22 | #include <set> | 
|---|
| 23 |  | 
|---|
| 24 | #include "CodePatterns/Observer/Observable.hpp" | 
|---|
| 25 | #include "CodePatterns/Observer/Observer.hpp" | 
|---|
| 26 | #include "Actions/Action.hpp" | 
|---|
| 27 |  | 
|---|
| 28 | namespace MoleCuilder { | 
|---|
| 29 |  | 
|---|
| 30 | /** | 
|---|
| 31 | * A Process is an Action that might take some time and therefore has special | 
|---|
| 32 | * methods to allow communication with progress indicators. Indicators | 
|---|
| 33 | * can sign on at a global place and will be notified when any process is doing | 
|---|
| 34 | * a calculation. | 
|---|
| 35 | * | 
|---|
| 36 | * A Process has four states: | 
|---|
| 37 | *  - starting: It is in the process of setting itself up, and wants everybody to know that it will start | 
|---|
| 38 | *              the calculation soon. Indicators should set up anything they need for displaying the progress | 
|---|
| 39 | *              when they are notified by a process in this state. | 
|---|
| 40 | *  - active:   The process is currently doing it's thing and wants any indicator to know it's status, i.e. | 
|---|
| 41 | *              the percentage done. | 
|---|
| 42 | *  - stopping: The process has fullfilled it's purpose and is shutting down. Indicators recieving this status | 
|---|
| 43 | *              should also use it to shut down their indication mechanism and delete any objects allocated for | 
|---|
| 44 | *              this Process | 
|---|
| 45 | *  - inactive: This Process is currently sleeping. If a Process is sending out any signals in this state, there | 
|---|
| 46 | *              is something seriously wrong. | 
|---|
| 47 | */ | 
|---|
| 48 | class Process : public Action, public Observable | 
|---|
| 49 | { | 
|---|
| 50 | public: | 
|---|
| 51 | Process(int _maxSteps, const ActionTrait &_trait, bool _doRegister=true); | 
|---|
| 52 | virtual ~Process(); | 
|---|
| 53 |  | 
|---|
| 54 | bool  isRunning(); | 
|---|
| 55 | bool  doesStart(); | 
|---|
| 56 | bool  doesStop(); | 
|---|
| 57 | int   getCurrStep(); | 
|---|
| 58 | void  setCurrStep(int _currStep); | 
|---|
| 59 | float getDoneRatio(); | 
|---|
| 60 | int   getMaxSteps(); | 
|---|
| 61 | void  setMaxSteps(int _maxSteps); | 
|---|
| 62 |  | 
|---|
| 63 | protected: | 
|---|
| 64 | void start(); | 
|---|
| 65 | void step(); | 
|---|
| 66 | void stop(); | 
|---|
| 67 |  | 
|---|
| 68 | private: | 
|---|
| 69 | int currStep; | 
|---|
| 70 | int maxSteps; | 
|---|
| 71 | bool active; | 
|---|
| 72 | bool starts; | 
|---|
| 73 | bool stops; | 
|---|
| 74 |  | 
|---|
| 75 | // some global static stuff to allow general Observers that can show progresses | 
|---|
| 76 | public: | 
|---|
| 77 | static void AddObserver(Observer *); | 
|---|
| 78 | static void RemoveObserver(Observer *); | 
|---|
| 79 | private: | 
|---|
| 80 | static std::set<Observer*> processObservers; | 
|---|
| 81 | }; | 
|---|
| 82 |  | 
|---|
| 83 | } | 
|---|
| 84 |  | 
|---|
| 85 | #endif /* PROCESS_HPP_ */ | 
|---|