qavrg 0.0.28
|
00001 #include "qavrgapplication.h" 00002 #include "qavrgwindow.h" 00003 #include "qavrgserver.h" 00004 #include "qavrgserverthread.h" 00005 #include "qavrgspecserver.h" 00006 #include "qavrgspecserverthread.h" 00007 #include "qavrgepicsinterface.h" 00008 #include "qavrgfillpattern.h" 00009 #include "qavrgacquisitionthread.h" 00010 #include "qavrgacquisition.h" 00011 #include "qavrgfitter.h" 00012 #include "qavrgresultsmodel.h" 00013 #include "qavrgscriptingthread.h" 00014 #include "qavrgscriptingengine.h" 00015 #include "qavrgsettings.h" 00016 00017 #include <QMessageBox> 00018 #include <QFileDialog> 00019 00020 #include <qwt_plot.h> 00021 #include <qwt_plot_curve.h> 00022 #include <stdio.h> 00023 00024 int gCEPDebug = 0; 00025 00026 static QavrgApplication* g_Application = NULL; 00027 00028 QavrgApplication::QavrgApplication(int &argc, char **argv) 00029 : QApplication(argc, argv), 00030 m_SettingsSaver(new QcepSettingsSaver(this)), 00031 m_Window(NULL), 00032 m_ServerThread(NULL), 00033 m_Server(NULL), 00034 m_SpecServerThread(NULL), 00035 m_SpecServer(NULL), 00036 m_ScriptingThread(NULL), 00037 m_ScriptingEngine(NULL), 00038 m_AcquisitionThread(NULL), 00039 m_Acquisition(NULL), 00040 m_EpicsInterface(NULL) 00041 { 00042 QcepProperty::registerMetaTypes(); 00043 00044 setObjectName("qavrgapplication"); 00045 00046 g_Application = this; 00047 00048 setOrganizationName("bessrc"); 00049 setOrganizationDomain("xor.aps.anl.gov"); 00050 setApplicationName("qavrg"); 00051 00052 m_Window = new QavrgWindow(this); 00053 00054 m_AcquisitionThread = new QavrgAcquisitionThread(this); 00055 m_Acquisition = m_AcquisitionThread -> acquisition(); 00056 00057 m_Window -> setAcquisition(m_Acquisition); 00058 00059 connect(m_Acquisition, SIGNAL(noDeviceAvailable()), 00060 m_Window, SLOT(showDeviceError()), Qt::QueuedConnection); 00061 00062 m_AcquisitionThread -> start(); 00063 00064 m_ScriptingThread = new QavrgScriptingThread(this, m_Window, m_Acquisition); 00065 m_ScriptingEngine = m_ScriptingThread -> scriptingEngine(); 00066 00067 m_Window -> setScriptingEngine(m_ScriptingEngine); 00068 00069 m_ScriptingThread -> start(); 00070 00071 connect(this, SIGNAL(aboutToQuit()), this, SLOT(writeSettings())); 00072 connect(this, SIGNAL(aboutToQuit()), this, SLOT(shutdownThreads())); 00073 00074 connect(m_Acquisition, SIGNAL(new_RawData()), 00075 m_Window, SLOT(new_RawData())); 00076 connect(m_Acquisition, SIGNAL(new_ReferenceData()), 00077 m_Window, SLOT(new_ReferenceData())); 00078 connect(m_Acquisition, SIGNAL(new_DarkData()), 00079 m_Window, SLOT(new_DarkData())); 00080 connect(m_Acquisition, SIGNAL(new_FitData()), 00081 m_Window, SLOT(new_FitData())); 00082 00083 connect(m_Window->m_ActionSetReferenceData, SIGNAL(triggered()), 00084 m_Acquisition, SLOT(setReferenceData())); 00085 00086 connect(m_Window->m_ActionSetDarkData, SIGNAL(triggered()), 00087 m_Acquisition, SLOT(setDarkData())); 00088 00089 m_EpicsInterface = new QavrgEpicsInterface(this); 00090 00091 connect(m_EpicsInterface -> fillPattern(), SIGNAL(fillPatternChanged()), 00092 m_Acquisition, SLOT(fillPatternChanged())); 00093 00094 QavrgResultsModel *model = new QavrgResultsModel(m_Acquisition); 00095 00096 m_Window->m_FitResultsTable -> setModel(model); 00097 00098 connect(m_Acquisition, SIGNAL(new_FittingResults()), 00099 model, SLOT(new_FittingResults())); 00100 00101 m_ServerThread = new QavrgServerThread(); 00102 m_Server = m_ServerThread -> server(); 00103 00104 m_SpecServerThread = new QavrgSpecServerThread(m_Acquisition); 00105 m_SpecServer = m_SpecServerThread -> server(); 00106 00107 connect(m_Window, SIGNAL(executeCommand(QString)), m_ScriptingEngine, SLOT(evaluateAppCommand(QString))); 00108 connect(m_ScriptingEngine, SIGNAL(appResultAvailable(QScriptValue)), m_Window, SLOT(finishedCommand(QScriptValue))); 00109 00110 connect(m_Server, SIGNAL(executeCommand(QString)), m_ScriptingEngine, SLOT(evaluateServerCommand(QString))); 00111 connect(m_ScriptingEngine, SIGNAL(serverResultAvailable(QScriptValue)), m_Server, SLOT(finishedCommand(QScriptValue))); 00112 00113 connect(m_SpecServer, SIGNAL(executeCommand(QString)), m_ScriptingEngine, SLOT(evaluateSpecCommand(QString))); 00114 connect(m_ScriptingEngine, SIGNAL(specResultAvailable(QScriptValue)), m_SpecServer, SLOT(finishedCommand(QScriptValue))); 00115 00116 connect(m_Server, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00117 connect(m_ServerThread, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00118 connect(m_SpecServer, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00119 connect(m_SpecServerThread, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00120 connect(m_Acquisition, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00121 connect(m_Acquisition, SIGNAL(warningMessage(QString)), m_Window, SLOT(warningMessage(QString))); 00122 connect(m_AcquisitionThread, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00123 connect(m_ScriptingEngine, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00124 connect(m_ScriptingThread, SIGNAL(printMessage(QString)), m_Window, SLOT(printMessage(QString))); 00125 00126 m_ServerThread -> start(); 00127 m_SpecServerThread -> start(); 00128 00129 readSettings(); 00130 m_Window -> show(); 00131 00132 m_Window -> updateGraph(); 00133 } 00134 00135 QavrgApplication::~QavrgApplication() 00136 { 00137 delete m_ScriptingThread; 00138 delete m_AcquisitionThread; 00139 delete m_ServerThread; 00140 delete m_EpicsInterface; 00141 } 00142 00143 void QavrgApplication::possiblyQuit() 00144 { 00145 if (wantToQuit()) { 00146 quit(); 00147 } 00148 } 00149 00150 bool QavrgApplication::wantToQuit() 00151 { 00152 return QMessageBox::question(m_Window, tr("Really Quit?"), 00153 tr("Do you really want to exit the application?"), 00154 QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok; 00155 } 00156 00157 void QavrgApplication::shutdownThreads() 00158 { 00159 m_AcquisitionThread -> shutdown(); 00160 m_ServerThread -> shutdown(); 00161 m_EpicsInterface -> shutdown(); 00162 m_ScriptingThread -> shutdown(); 00163 } 00164 00165 void QavrgApplication::printMessage(QString msg, QDateTime ts) 00166 { 00167 printf("%s\n", qPrintable(msg)); 00168 } 00169 00170 QavrgFillPattern *QavrgApplication::fillPattern() 00171 { 00172 if (m_EpicsInterface) { 00173 return m_EpicsInterface->fillPattern(); 00174 } else { 00175 return NULL; 00176 } 00177 } 00178 00179 void QavrgApplication::loadSettings() 00180 { 00181 QString loadName = QFileDialog::getOpenFileName(m_Window, tr("Load Settings")); 00182 00183 if (!loadName.isNull()) { 00184 readSettings(loadName); 00185 } 00186 } 00187 00188 void QavrgApplication::saveSettings() 00189 { 00190 QString saveName = QFileDialog::getSaveFileName(m_Window, tr("Save Settings")); 00191 00192 if (!saveName.isNull()) { 00193 writeSettings(saveName); 00194 } 00195 } 00196 00197 void QavrgApplication::readSettings() 00198 { 00199 QavrgSettings settings; 00200 00201 this -> readSettings(&settings); 00202 m_Window -> readSettings(&settings); 00203 m_Acquisition -> readSettings(&settings); 00204 } 00205 00206 void QavrgApplication::readSettings(QString filePath) 00207 { 00208 QavrgSettings settings(filePath); 00209 00210 this -> readSettings(&settings); 00211 m_Window -> readSettings(&settings); 00212 m_Acquisition -> readSettings(&settings); 00213 } 00214 00215 void QavrgApplication::writeSettings() 00216 { 00217 QavrgSettings settings; 00218 00219 this -> writeSettings(&settings); 00220 m_Window -> writeSettings(&settings); 00221 m_Acquisition -> writeSettings(&settings); 00222 } 00223 00224 void QavrgApplication::writeSettings(QString filePath) 00225 { 00226 QavrgSettings settings(filePath); 00227 00228 this -> writeSettings(&settings); 00229 m_Window -> writeSettings(&settings); 00230 m_Acquisition -> writeSettings(&settings); 00231 } 00232 00233 QcepSettingsSaverWPtr QavrgApplication::saver() const 00234 { 00235 return m_SettingsSaver; 00236 } 00237 00238 void QavrgApplication::readSettings(QavrgSettings *settings) 00239 { 00240 QcepProperty::readSettings(this, &staticMetaObject, "application", settings); 00241 } 00242 00243 void QavrgApplication::writeSettings(QavrgSettings *settings) 00244 { 00245 QcepProperty::writeSettings(this, &staticMetaObject, "application", settings); 00246 }