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