diff --git a/slsDetectorGui/forms/form_tab_messages.ui b/slsDetectorGui/forms/form_tab_messages.ui new file mode 100644 index 000000000..1f75475e5 --- /dev/null +++ b/slsDetectorGui/forms/form_tab_messages.ui @@ -0,0 +1,82 @@ + + + TabMessagesObject + + + + 0 + 0 + 775 + 345 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Form + + + + + + + + TextLabel + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + + + TextLabel + + + + + + + + + + + + + + + + diff --git a/slsDetectorGui/forms/form_tab_plot.ui b/slsDetectorGui/forms/form_tab_plot.ui index f8b21cde4..9fc9064d3 100644 --- a/slsDetectorGui/forms/form_tab_plot.ui +++ b/slsDetectorGui/forms/form_tab_plot.ui @@ -35,7 +35,7 @@ 10 - 135 + 200 751 141 @@ -73,7 +73,26 @@ - + + + + 0 + 0 + + + + + 250 + 0 + + + + QLineEdit::Normal + + + false + + @@ -392,10 +411,10 @@ - 150 + 315 70 - 466 - 46 + 446 + 51 @@ -466,7 +485,7 @@ - 210 + 180 20 @@ -478,10 +497,10 @@ - 150 + 315 10 - 466 - 46 + 446 + 51 @@ -499,7 +518,7 @@ 10 20 254 - 23 + 21 @@ -575,8 +594,8 @@ - 420 - 12 + 395 + 15 40 28 @@ -608,7 +627,7 @@ 10 - 290 + 135 751 51 @@ -634,6 +653,12 @@ + + + 0 + 0 + + File Name: @@ -645,7 +670,20 @@ 0 - + + + + 0 + 0 + + + + + 250 + 0 + + + @@ -687,6 +725,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + @@ -710,10 +764,10 @@ - 655 - 10 - 106 - 106 + 10 + 70 + 261 + 51 @@ -725,28 +779,16 @@ false - + 5 - 19 - 96 - 81 + 21 + 251 + 21 - - - 28 - - - 8 - - - 0 - - - 0 - + @@ -762,11 +804,11 @@ Create - false + true - + @@ -780,6 +822,28 @@ Close All + + true + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Save All + + + true + @@ -793,8 +857,8 @@ 10 10 - 106 - 106 + 261 + 51 @@ -806,16 +870,16 @@ false - + 10 - 14 - 93 - 96 + 20 + 246 + 21 - + @@ -823,14 +887,14 @@ - + Data Graph - + Histogram diff --git a/slsDetectorGui/forms/form_tab_settings.ui b/slsDetectorGui/forms/form_tab_settings.ui index d1b7ad2d5..89d6214fe 100644 --- a/slsDetectorGui/forms/form_tab_settings.ui +++ b/slsDetectorGui/forms/form_tab_settings.ui @@ -115,7 +115,7 @@ - + -1 @@ -139,10 +139,10 @@ - + - + diff --git a/slsDetectorGui/include/qDetectorMain.h b/slsDetectorGui/include/qDetectorMain.h index c7ac27275..ed1307d7a 100644 --- a/slsDetectorGui/include/qDetectorMain.h +++ b/slsDetectorGui/include/qDetectorMain.h @@ -19,6 +19,7 @@ class qTabAdvanced; class qTabSettings; class qTabDebugging; class qTabDeveloper; +class qTabMessages; /** Project Class Headers */ class slsDetectorUtils; #include "sls_detector_defs.h" @@ -80,25 +81,27 @@ private: /** The default tab heading color */ QColor defaultTabColor; /** enumeration of the tabs */ - enum {Measurement, Settings, DataOutput, Plot, Actions, Advanced, Debugging, Developer, NumberOfTabs }; + enum {Measurement, Settings, DataOutput, Plot, Actions, Advanced, Debugging, Developer, Messages, NumberOfTabs }; /* Scroll Area for the tabs**/ QScrollArea *scroll[NumberOfTabs]; /**Measurement tab */ - qTabMeasurement *tab_measurement; + qTabMeasurement *tab_measurement; /**DataOutput tab */ - qTabDataOutput *tab_dataoutput; + qTabDataOutput *tab_dataoutput; /**Plot tab */ - qTabPlot *tab_plot; + qTabPlot *tab_plot; /**Actions tab */ - qTabActions *tab_actions; + qTabActions *tab_actions; /**Settings tab */ - qTabSettings *tab_settings; + qTabSettings *tab_settings; /**Advanced tab */ - qTabAdvanced *tab_advanced; + qTabAdvanced *tab_advanced; /**Debugging tab */ - qTabDebugging *tab_debugging; + qTabDebugging *tab_debugging; /**Developer tab */ - qTabDeveloper *tab_developer; + qTabDeveloper *tab_developer; + /**Messages tab */ + qTabMessages *tab_messages; /**if the developer tab should be enabled,known from command line */ int isDeveloper; diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h index e926ad9dd..c43b808d7 100644 --- a/slsDetectorGui/include/qTabMeasurement.h +++ b/slsDetectorGui/include/qTabMeasurement.h @@ -53,6 +53,10 @@ private: */ void SetupWidgetWindow(); + /** Sets up the timing mode + */ + void SetupTimingMode(); + /** Sets up all the slots and signals * @param timingChange only some of the signals are disconnected when timing mode is changed * This method is to reconnect them again. diff --git a/slsDetectorGui/include/qTabMessages.h b/slsDetectorGui/include/qTabMessages.h new file mode 100644 index 000000000..e61eecb9d --- /dev/null +++ b/slsDetectorGui/include/qTabMessages.h @@ -0,0 +1,68 @@ +/* + * qTabMessages.h + * + * Created on: Jun 26, 2012 + * Author: l_maliakal_d + */ + +#ifndef QTABMESSAGES_H_ +#define QTABMESSAGES_H_ + + + +/** Project Class Headers */ +class slsDetectorUtils; +/** Qt Include Headers */ +#include +#include +#include + +/** + *@short sets up the Messages parameters + */ +class qTabMessages:public QWidget{ + Q_OBJECT + +public: + /** \short The constructor + * @param parent is the parent tab widget + * @param detector is the detector returned from the detector tab + */ + qTabMessages(QWidget *parent,slsDetectorUtils*& detector); + + /** Destructor + */ + ~qTabMessages(); + + +private: + /** The sls detector object */ + slsDetectorUtils *myDet; + + /** Log of executed commands */ + QTextEdit *dispLog; + + /** Command display */ + QLineEdit *dispCommand; + + /** Path display */ + QLineEdit *dispPath; + +/** methods */ + /** Sets up the widget */ + void SetupWidgetWindow(); + + /** Sets up all the slots and signals */ + void Initialization(); + + +private slots: + void executeCommand(); + +}; + + + + + +#endif /* QTABMESSAGES_H_ */ diff --git a/slsDetectorGui/include/qTabSettings.h b/slsDetectorGui/include/qTabSettings.h index 23c5ecd6b..0a587022b 100644 --- a/slsDetectorGui/include/qTabSettings.h +++ b/slsDetectorGui/include/qTabSettings.h @@ -12,6 +12,9 @@ #include "ui_form_tab_settings.h" /** Project Class Headers */ class slsDetectorUtils; +#include "sls_detector_defs.h" +/** Qt Include Headers */ +#include /** *@short sets up the Settings parameters @@ -35,15 +38,26 @@ public: private: /** The sls detector object */ slsDetectorUtils *myDet; - - /** sls detector id */ + /**etector id */ int detID; + /** detector type */ + slsDetectorDefs::detectorType detType; + enum{Standard,Fast,HighGain,DynamicGain,LowGain,MediumGain,VeryHighGain,Undefined,Uninitialized,NumSettings}; + + /** To be able to index items on a combo box */ + QStandardItemModel* model; + QModelIndex index[NumSettings]; + QStandardItem* item[NumSettings]; /** Sets up the widget */ void SetupWidgetWindow(); + /** Sets up the detector settings + */ + void SetupDetectorSettings(); + /** Sets up all the slots and signals */ void Initialization(); diff --git a/slsDetectorGui/slsDetectorGui.pro b/slsDetectorGui/slsDetectorGui.pro index 6046b23e6..10f51bafc 100644 --- a/slsDetectorGui/slsDetectorGui.pro +++ b/slsDetectorGui/slsDetectorGui.pro @@ -58,7 +58,8 @@ SOURCES = \ src/qTabAdvanced.cpp\ src/qTabSettings.cpp\ src/qTabDebugging.cpp\ - src/qTabDeveloper.cpp + src/qTabDeveloper.cpp\ + src/qTabMessages.cpp HEADERS = \ slsDetectorPlotting/include/SlsQt1DPlot.h\ @@ -82,6 +83,7 @@ HEADERS = \ include/qTabSettings.h\ include/qTabDebugging.h\ include/qTabDeveloper.h\ + include/qTabMessages.h\ ../slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -95,3 +97,4 @@ FORMS = \ forms/form_tab_settings.ui\ forms/form_tab_debugging.ui\ forms/form_tab_developer.ui +# forms/form_tab_messages.ui diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp index 718281802..aaebe0f3b 100644 --- a/slsDetectorGui/src/qDetectorMain.cpp +++ b/slsDetectorGui/src/qDetectorMain.cpp @@ -10,6 +10,7 @@ #include "qTabSettings.h" #include "qTabDebugging.h" #include "qTabDeveloper.h" +#include "qTabMessages.h" /** Project Class Headers */ #include "slsDetector.h" #include "multiSlsDetector.h" @@ -93,6 +94,7 @@ void qDetectorMain::SetUpWidgetWindow(){ tab_advanced = new qTabAdvanced (this, myDet); tab_debugging = new qTabDebugging (this, myDet); tab_developer = new qTabDeveloper (this, myDet); + tab_messages = new qTabMessages (this, myDet); /** creating the scroll area widgets for the tabs */ for(int i=0;iinsertTab(Advanced, scroll[Advanced], "Advanced"); tabs->insertTab(Debugging, scroll[Debugging], "Debugging"); tabs->insertTab(Developer, scroll[Developer], "Developer"); + /** Prefer this to expand and not have scroll buttons*/ + tabs->insertTab(Messages, tab_messages, "Messages"); /** mode setup - to set up the tabs initially as disabled, not in form so done here */ SetDebugMode(false); @@ -404,6 +408,7 @@ void qDetectorMain::EnableTabs(){ tabs->setTabEnabled(DataOutput,enable); tabs->setTabEnabled(Actions,enable); tabs->setTabEnabled(Settings,enable); + tabs->setTabEnabled(Messages,enable); /** special tabs */ if(enable==false){ diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index 23e597325..b0da22efe 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -12,9 +12,8 @@ /** Project Class Headers */ #include "slsDetector.h" #include "multiSlsDetector.h" - +/** Qt Include Headers */ #include - /** C++ Include Headers */ #include using namespace std; @@ -63,8 +62,15 @@ void qTabMeasurement::SetupWidgetWindow(){ progressBar->setValue(0); /** timing mode*/ + SetupTimingMode(); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qTabMeasurement::SetupTimingMode(){ /** Get timing mode from detector*/ slsDetectorDefs::externalCommunicationMode mode = myDet->setExternalCommunicationMode(); + /** To be able to index items on a combo box */ QStandardItemModel* model = qobject_cast(comboTimingMode->model()); QModelIndex index[NumTimingModes]; @@ -112,15 +118,15 @@ void qTabMeasurement::SetupWidgetWindow(){ * then the timing mode is 'None'. * This is for the inexperienced user */ if(mode==slsDetectorDefs::AUTO_TIMING){ - int frames = (int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1); - int triggers = (int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1); - if((frames==1)&&(triggers==1)){ - comboTimingMode->setCurrentIndex((int)None); - setTimingMode((int)None); - }else{ - comboTimingMode->setCurrentIndex((int)Auto); - setTimingMode((int)Auto); - } + int frames = (int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1); + int triggers = (int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1); + if((frames==1)&&(triggers==1)){ + comboTimingMode->setCurrentIndex((int)None); + setTimingMode((int)None); + }else{ + comboTimingMode->setCurrentIndex((int)Auto); + setTimingMode((int)Auto); + } }else{ /** mode +1 since the detector class has no timingmode as "None" */ comboTimingMode->setCurrentIndex((int)mode+1); @@ -128,7 +134,7 @@ void qTabMeasurement::SetupWidgetWindow(){ } } /** Mode NOT ENABLED. - * This should not happen only if the server and gui has a mismatch + * This should not happen -only if the server and gui has a mismatch * on which all modes are allowed in detectors */ else{ qDefs::ErrorMessage("ERROR: Unknown Timing Mode detected from detector." diff --git a/slsDetectorGui/src/qTabMessages.cpp b/slsDetectorGui/src/qTabMessages.cpp new file mode 100644 index 000000000..25894f492 --- /dev/null +++ b/slsDetectorGui/src/qTabMessages.cpp @@ -0,0 +1,129 @@ +/* + * qTabMessages.cpp + * + * Created on: Jun 26, 2012 + * Author: l_maliakal_d + */ + +#include "qTabMessages.h" +/** Project Class Headers */ +#include "slsDetector.h" +#include "multiSlsDetector.h" +/** Qt Include Headers */ +#include +#include +#include +#include +#include +#include +/** C++ Include Headers */ +#include +using namespace std; + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +qTabMessages::qTabMessages(QWidget *parent,slsDetectorUtils*& detector): + QWidget(parent),myDet(detector){ + SetupWidgetWindow(); + Initialization(); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +qTabMessages::~qTabMessages(){ + delete myDet; + delete dispLog; + delete dispCommand; + delete dispPath; +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qTabMessages::SetupWidgetWindow(){ + /** Layout */ + QGridLayout *gridLayout = new QGridLayout(this); + QLabel *lblCommand = new QLabel("System Command:",this); + QLabel *lblPath = new QLabel("Working Directory:",this); + QSpacerItem *hSpacer= new QSpacerItem(20, 20, QSizePolicy::Fixed, QSizePolicy::Minimum); + dispLog = new QTextEdit(this); + dispCommand = new QLineEdit(this); + dispPath = new QLineEdit(this); + dispLog->setReadOnly(true); + dispPath->setReadOnly(true); + dispLog->setFocusPolicy(Qt::NoFocus); + dispPath->setFocusPolicy(Qt::NoFocus); + gridLayout->addWidget(dispLog, 0, 0, 1, 3); + gridLayout->addWidget(lblCommand, 1, 0, 1, 1); + gridLayout->addItem(hSpacer, 1, 1, 1, 1); + gridLayout->addWidget(dispCommand, 1, 2, 1, 1); + gridLayout->addWidget(lblPath, 2, 0, 1, 1); + gridLayout->addWidget(dispPath, 2, 2, 1, 1); + + /** Command & Path*/ + dispCommand->setText("Insert your command here"); + dispPath->setText(QDir("./").absolutePath()); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qTabMessages::Initialization(){ + connect(dispCommand,SIGNAL(returnPressed()),this,SLOT(executeCommand())); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qTabMessages::executeCommand(){ +#ifdef VERBOSE + cout<<"Calling: "<< dispCommand->text().toAscii().constData()<text()).absolutePath()); +#ifdef VERBOSE + //std::cout <<"working directory is " << proc.workingDirectory().absPath() << std::endl; + cout<<"Current Working Directory: "<text())); +#ifdef VERBOSE +/* QStringList list = proc.arguments(); + QStringList::Iterator it = list.begin(); + while( it != list.end() ) { + cout<<*it< using namespace std; - +//------------------------------------------------------------------------------------------------------------------------------------------------- qTabSettings::qTabSettings(QWidget *parent,slsDetectorUtils*& detector,int detID): QWidget(parent),myDet(detector),detID(detID){ + setupUi(this); SetupWidgetWindow(); Initialization(); } - - +//------------------------------------------------------------------------------------------------------------------------------------------------- qTabSettings::~qTabSettings(){ delete myDet; } - - +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabSettings::SetupWidgetWindow(){ + /** Detector Type*/ + detType=myDet->getDetectorsType(); + /** Settings */ + SetupDetectorSettings(); comboSettings->setCurrentIndex(myDet->getSettings(detID)); + + } +//------------------------------------------------------------------------------------------------------------------------------------------------- +void qTabSettings::SetupDetectorSettings(){ + /** Get detector settings from detector*/ + slsDetectorDefs::detectorSettings sett = myDet->getSettings(detID); + + /** To be able to index items on a combo box */ + model = qobject_cast(comboSettings->model()); + if (model) { + for(int i=0;iindex(i, comboSettings->modelColumn(), comboSettings->rootModelIndex()); + item[i] = model->itemFromIndex(index[i]); + } + /** Enabling/Disabling depending on the detector type + Undefined and uninitialized are enabled for all detectors*/ + if(sett==slsDetectorDefs::UNDEFINED) + item[(int)Uninitialized]->setEnabled(false); + else if(sett==slsDetectorDefs::UNINITIALIZED) + item[(int)Undefined]->setEnabled(false); + else{ + item[(int)Uninitialized]->setEnabled(false); + item[(int)Undefined]->setEnabled(false); + } + switch(detType){ + case slsDetectorDefs::MYTHEN: + item[(int)Standard]->setEnabled(true); + item[(int)Fast]->setEnabled(true); + item[(int)HighGain]->setEnabled(true); + item[(int)DynamicGain]->setEnabled(false); + item[(int)LowGain]->setEnabled(false); + item[(int)MediumGain]->setEnabled(false); + item[(int)VeryHighGain]->setEnabled(false); + break; + case slsDetectorDefs::EIGER: + item[(int)Standard]->setEnabled(false); + item[(int)Fast]->setEnabled(false); + item[(int)HighGain]->setEnabled(false); + item[(int)DynamicGain]->setEnabled(false); + item[(int)LowGain]->setEnabled(false); + item[(int)MediumGain]->setEnabled(false); + item[(int)VeryHighGain]->setEnabled(false); + break; + case slsDetectorDefs::GOTTHARD: + item[(int)Standard]->setEnabled(false); + item[(int)Fast]->setEnabled(false); + item[(int)HighGain]->setEnabled(true); + item[(int)DynamicGain]->setEnabled(true); + item[(int)LowGain]->setEnabled(true); + item[(int)MediumGain]->setEnabled(true); + item[(int)VeryHighGain]->setEnabled(true); + break; + default: + qDefs::ErrorMessage("ERROR: Unknown detector type.","Settings: ERROR"); + exit(-1); + break; + } + /** detector settings selected NOT ENABLED. + * This should not happen -only if the server and gui has a mismatch + * on which all modes are allowed in detectors */ + if(!(item[(int)sett]->isEnabled())){ + qDefs::ErrorMessage("ERROR: Unknown Detector Settings retrieved from detector. " + "Exiting GUI.","Settings: ERROR"); +#ifdef VERBOSE + cout<<"ERROR: Unknown Detector Settings retrieved from detector."<setCurrentIndex((int)sett); + + } + } +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabSettings::Initialization(){ /** Settings */ connect(comboSettings,SIGNAL(currentIndexChanged(int)),this,SLOT(setSettings(int))); } - +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabSettings::setSettings(int index){ + /** The first time settings is changed from undefined or uninitialized to a proper setting, + * then undefined/uninitialized should be disabled */ + if(item[(int)Undefined]->isEnabled()){ + /**Do not disable it if this wasnt selected again by mistake*/ + if(index!=(int)Undefined) + item[(int)Undefined]->setEnabled(false); + }else if(item[(int)Uninitialized]->isEnabled()){ + /**Do not disable it if this wasnt selected again by mistake*/ + if(index!=(int)Uninitialized) + item[(int)Uninitialized]->setEnabled(false); + } slsDetectorDefs::detectorSettings sett = myDet->setSettings((slsDetectorDefs::detectorSettings)index,detID); #ifdef VERBOSE cout<<"Settings have been set to "<slsDetectorBase::getDetectorSettings(sett)<