qavrg 0.0.28
qavrgapplication.cpp
Go to the documentation of this file.
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 }