00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef CONTROLLERTHREADHOST_H
00026 #define CONTROLLERTHREADHOST_H
00027
00028
00029 #include <QThread>
00030
00031 #include <QCoreApplication>
00032
00033 #include "abstractcontroller.h"
00034 #include "abstractmodel.h"
00035
00036
00037 template <class T>
00038 class ControllerThreadHost : public QThread {
00039
00040 public:
00041 ControllerThreadHost( QObject* parent = 0 )
00042 : QThread(parent),
00043 m_initialModel(0) {}
00044
00045 ControllerThreadHost( AbstractModel* model, QObject* parent = 0 )
00046 : QThread(parent),
00047 m_initialModel(model) {}
00048
00049 virtual ~ControllerThreadHost() {
00050 quit();
00051 wait();
00052
00053 }
00054
00055 T* controller() const { return m_controller; }
00056
00057
00058 protected:
00059 virtual void run()
00060 {
00061
00062
00063
00064
00065 m_controller = new T;
00066 if ( m_initialModel != 0 )
00067 QCoreApplication::postEvent( m_controller,
00068 new CChangeModelEvent(m_initialModel,this) );
00069 exec();
00070 delete m_controller;
00071 m_controller = 0;
00072 }
00073
00074
00075 private:
00076 T* m_controller;
00077 AbstractModel* m_initialModel;
00078 };
00079
00080
00081 #endif // ! CONTROLLERTHREADHOST_H