00001 #ifndef BALL_VIEW_KERNEL_THREADS_H 00002 #define BALL_VIEW_KERNEL_THREADS_H 00003 00004 #ifndef BALL_VIEW_KERNEL_COMMON_H_ 00005 #include <BALL/VIEW/KERNEL/common.h> 00006 #endif 00007 00008 #ifndef BALL_SYSTEM_TCPTRANSFER 00009 # include <BALL/SYSTEM/TCPTransfer.h> 00010 #endif 00011 00012 #include <QtCore/QThread> 00013 #include <QtCore/QEvent> 00014 00015 namespace BALL 00016 { 00017 class EnergyMinimizer; 00018 class MolecularDynamics; 00019 class Composite; 00020 class DockingAlgorithm; 00021 class DCDFile; 00022 00023 namespace VIEW 00024 { 00025 class MainControl; 00026 class FDPBDialog; 00027 class Message; 00028 class Representation; 00029 00034 class BALL_VIEW_EXPORT MessageEvent 00035 : public QEvent 00036 { 00037 public: 00038 00040 MessageEvent(Message* msg = 0) 00041 : QEvent((QEvent::Type)MESSAGE_EVENT), 00042 message_(msg) 00043 {} 00044 00046 void setMessage(Message* msg) { message_ = msg; } 00047 00049 Message* getMessage() { return message_; } 00050 00051 protected: 00052 00053 Message* message_; 00054 }; 00055 00056 00073 class BALL_VIEW_EXPORT BALLThread 00074 : public virtual QThread 00075 { 00076 public: 00077 00079 BALLThread(); 00080 00082 void setMainControl(MainControl* mf) {main_control_ = mf;} 00083 00085 void setComposite(Composite* composite) {composite_ = composite;} 00086 00088 Composite* getComposite() { return composite_;} 00089 00092 virtual void run() {}; 00093 00094 protected: 00095 00099 void sendMessage_(Message* msg); 00100 00107 void updateStructure_(); 00108 00110 void output_(const String& string, bool important = false); 00111 00116 void waitForUpdateOfRepresentations_(); 00117 00118 MainControl* main_control_; 00119 Composite* composite_; 00120 }; 00121 00122 00127 class BALL_VIEW_EXPORT FetchHTMLThread 00128 : public BALLThread 00129 { 00130 public: 00132 FetchHTMLThread(); 00133 00135 void setURL(const String& text); 00136 00138 virtual void run(); 00139 00141 virtual void abort() { tcp_.abort();} 00142 00144 void setFilename(const String& file_name) { file_name_ = file_name;} 00145 00147 const String& getFilename() const { return file_name_;} 00148 00150 TCPTransfer& getTCPTransfer() { return tcp_;} 00151 00153 std::stringstream& getStream() { return stream_;} 00154 00155 protected: 00156 String url_; 00157 String file_name_; 00158 TCPTransfer tcp_; 00159 std::stringstream stream_; 00160 }; 00161 00163 class BALL_VIEW_EXPORT CalculateFDPBThread 00164 : public BALLThread 00165 { 00166 public: 00167 00169 CalculateFDPBThread(); 00170 00172 virtual void run(); 00173 00175 void setFDPBDialog(FDPBDialog* dialog) {dialog_ = dialog;} 00176 00177 protected: 00178 FDPBDialog* dialog_; 00179 }; 00180 00181 00183 class BALL_VIEW_EXPORT UpdateRepresentationThread 00184 : public BALLThread 00185 { 00186 public: 00187 00189 UpdateRepresentationThread(); 00190 00192 virtual void run(); 00193 00195 void setRepresentation(Representation& rep) 00196 { rep_ = &rep;} 00197 00199 Representation* getRepresentation() 00200 { return rep_; } 00201 00202 protected: 00203 00204 Representation* rep_; 00205 }; 00206 00207 00213 class BALL_VIEW_EXPORT SimulationThread 00214 : public BALLThread 00215 { 00216 public: 00217 00219 SimulationThread(); 00220 00222 void setNumberOfStepsBetweenUpdates(Size steps) 00223 { steps_between_updates_ = steps;} 00224 00226 void setDCDFile(DCDFile* file) {dcd_file_ = file;} 00227 00229 DCDFile* getDCDFile() { return dcd_file_;} 00230 00231 protected: 00232 00234 void exportSceneToPNG_(); 00235 00237 void finish_(); 00238 00239 Size steps_between_updates_; 00240 DCDFile* dcd_file_; 00241 }; 00242 00243 00245 class BALL_VIEW_EXPORT EnergyMinimizerThread 00246 : public SimulationThread 00247 { 00248 public: 00249 00251 EnergyMinimizerThread(); 00252 00254 virtual ~EnergyMinimizerThread(); 00255 00257 virtual void run(); 00258 00260 void setEnergyMinimizer(EnergyMinimizer* minimizer); 00261 00262 protected: 00263 EnergyMinimizer* minimizer_; 00264 }; 00265 00266 00268 class BALL_VIEW_EXPORT MDSimulationThread 00269 : public SimulationThread 00270 { 00271 public: 00272 00274 MDSimulationThread(); 00275 00277 virtual ~MDSimulationThread(); 00278 00280 virtual void run() 00281 throw(Exception::NullPointer); 00282 00284 void setMolecularDynamics(MolecularDynamics* md); 00285 00287 void setNumberOfSteps(Size steps) { steps_ = steps;} 00288 00290 void setSaveImages(bool state) { save_images_ = state;} 00291 00292 protected: 00293 MolecularDynamics* md_; 00294 Size steps_; 00295 bool save_images_; 00296 }; 00297 00298 00300 class BALL_VIEW_EXPORT DockingThread 00301 : public BALLThread 00302 { 00303 public: 00305 DockingThread(); 00306 00309 DockingThread(const DockingThread& dock_thread); 00310 00312 virtual ~DockingThread(); 00313 00316 const DockingThread& operator =(const DockingThread& dock_thread); 00317 00319 void setDockingAlgorithm(DockingAlgorithm* dock_alg); 00320 00322 virtual void run() 00323 throw(Exception::NullPointer); 00324 00325 protected: 00326 DockingAlgorithm* dock_alg_; 00327 }; 00328 00329 } 00330 } 00331 #endif //BALL_VIEW_KERNEL_THREADS_H