00001 00031 #ifndef _Q_DRIVER_H_ 00032 #define _Q_DRIVER_H_ 00033 00034 #include "QBaseModule.hh" 00035 #include "QOptions.hh" 00036 #include <vector> 00037 00038 using namespace Cuore; 00039 00040 class QDriver : public QBaseModule { 00041 00042 public: 00043 00044 QDriver(const std::string&, QSequence *s); 00045 00046 virtual ~QDriver(); 00047 00048 bool StopRun() { return fStopRun; } 00049 00050 void SetModulesList(const std::vector<QBaseModule*>& modList) { fModules = modList; } 00051 00052 const std::vector<QBaseModule*>& GetModulesList() const { return fModules; }; 00053 protected: 00054 00055 00056 00057 std::map<std::string, QVdt*> GetModuleParameters(const std::string& mod, int occ) { return QOptions::GetInstance().GetModuleParameters(GetSequence().GetName(), mod,occ);} 00058 00059 00061 const QError& JumpToEvent(unsigned int event) { return GetSequence().JumpToEvent(event,this) ;} 00062 enum ActionId { 00063 ACT_NONE, 00064 ACT_NEXTEV, 00065 ACT_PREVEV, 00066 ACT_GOTOEV, 00067 ACT_RERUN, 00068 ACT_QUIT, 00069 }; 00070 00071 class Action { 00072 public: 00073 Action() {}; 00074 Action(ActionId id) { fActionId = id; } 00075 00076 ActionId fActionId; 00077 int fEventNumber; 00078 }; 00079 00081 virtual Action Init() = 0; 00082 00084 virtual Action Do(QEvent* ev) = 0; 00085 00087 virtual Action Done() = 0; 00088 00089 00090 private: 00092 void Begin(); 00093 00095 QEvent* Process( QEvent* ev); 00096 00098 void End(); 00099 00100 void HandleAction(Action action); 00101 00102 Action fLastAction; 00103 bool fStopRun; 00104 int fCurrentEventNumber; 00105 std::vector<QBaseModule*> fModules; 00106 00107 }; 00108 00109 #undef REGISTER_MODULE 00110 #define REGISTER_MODULE(clazz) REGISTER_MOD(clazz,QDriver) 00111 00112 #endif