diff --git a/slsDetectorGui/include/qActionsWidget.h b/slsDetectorGui/include/qActionsWidget.h index 8dd0ad07a..fcf4c6c85 100644 --- a/slsDetectorGui/include/qActionsWidget.h +++ b/slsDetectorGui/include/qActionsWidget.h @@ -7,6 +7,11 @@ #ifndef QACTIONSWIDGET_H_ #define QACTIONSWIDGET_H_ + + +/** Project Class Headers */ +class multiSlsDetector; +/** Qt Include Headers */ #include class QGridLayout; class QComboBox; @@ -16,6 +21,11 @@ class QLabel; class QSpinBox; class QGroupBox; class QRadioButton; +class QCheckBox; +/** C++ Include Headers */ +#include +using namespace std; + class ActionsWidget : public QFrame{ @@ -24,18 +34,38 @@ class ActionsWidget : public QFrame{ public: /** \short The constructor * @param parent is the parent tab widget + * @param detector is the detector returned from the detector tab * @param scanType is if its an energy/threshold scan type * @param id is the id of the widget. to know which one was emitting it */ - ActionsWidget(QWidget *parent, int scanType, int id); + ActionsWidget(QWidget *parent, multiSlsDetector*& detector, int scanType, int id); ~ActionsWidget(); + /**set variable expand + */ + void SetExpand(bool expanded){expand = expanded;}; + + /**get variable expand + */ + bool isExpanded(){return expand;}; + + /**to update the widgets*/ + void Refresh(); + + + enum actions{Start,Scan0,Scan1,ActionBefore,NumPositions, + HeaderBefore,HeaderAfter,ActionAfter,Stop}; + private: + /** The sls detector object */ + multiSlsDetector *myDet; /**if its a scan type*/ int scanType; /**id of the action widget*/ int id; + /**if this widget has been expanded*/ + bool expand; QGridLayout *layout; QComboBox *comboScript; @@ -60,6 +90,12 @@ private: QComboBox *comboSpecific; QLineEdit *dispValues; QPushButton *btnValues; + QSpinBox *spinNumPos; + QComboBox *comboPos; + QPushButton *btnDelete; + QCheckBox *chkInvert; + QCheckBox *chkSeparate; + QCheckBox *chkReturn; /** Sets up the widget */ @@ -68,6 +104,12 @@ private: /** Sets up all the slots and signals */ void Initialization(); + /**Gets the sls class action index using the gui index + * @param index gui index + */ + int GetActionIndex(int gIndex); + + private slots: /** Sets the scan or script. Accordingly enables, disables other widgets @@ -82,10 +124,26 @@ void EnableSizeWidgets(); * */ void BrowsePath(); +/** Sets the script file + * */ +void SetScriptFile(); + +/** Set Parameter + * @param parameter is the parameter to be set to + * */ +void SetParameter(const QString& parameter); + +/** Sets the number of positions + * */ +void SetNumPositions(int index); + +/** Deletes current position + * */ +void DeletePosition(); + + signals: void EnableScanBox(bool,int); -void SetScriptSignal(QString&,int); - }; diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index e4c86eac6..4e6004122 100644 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -91,7 +91,13 @@ public: void StartStopDaqToggle(bool stop_if_running=0); /** Set number of measurements * @param num number of measurements to be set */ - void setNumMeasurements(int num); + void setNumMeasurements(int num){number_of_measurements = num;}; + /** Set frame enabled + * @param enable enable*/ + void setFrameEnabled(bool enable){isFrameEnabled = enable;}; + /** Set trigger enabled + * @param enable enable */ + void setTriggerEnabled(bool enable){isTriggerEnabled = enable;}; private: @@ -212,6 +218,10 @@ private: /** every nth frame when to plot */ int frameFactor; bool plotLock; + /**if frame is enabled in measurement tab */ + bool isFrameEnabled; + /**if trigger is enabled in measurement tab */ + bool isTriggerEnabled; /** Initializes all its members and the thread */ diff --git a/slsDetectorGui/include/qTabActions.h b/slsDetectorGui/include/qTabActions.h index 8fc824fca..85ca2b57c 100644 --- a/slsDetectorGui/include/qTabActions.h +++ b/slsDetectorGui/include/qTabActions.h @@ -11,7 +11,7 @@ /** Project Class Headers */ class multiSlsDetector; class ActionsWidget; - +/** Qt Include Headers */ #include #include #include @@ -57,9 +57,6 @@ private: QPushButton *btnExpand[NUM_ACTION_WIDGETS]; QLabel *lblName[NUM_ACTION_WIDGETS]; - enum{Start,Scan0,Scan1,ActionBefore,NumPositions, - HeaderBefore,HeaderAfter,ActionAfter,Stop}; - /** Sets up the widget */ void SetupWidgetWindow(); @@ -67,14 +64,11 @@ private: void Initialization(); + private slots: /** To Expand the Action Widget */ void Expand(QAbstractButton *button); -/** To set the script of action widget - * @param fName name of script - * @param index id of action widget*/ -void SetScript(const QString& fName,int index); signals: void EnableScanBox(bool,int); diff --git a/slsDetectorGui/include/qTabDebugging.h b/slsDetectorGui/include/qTabDebugging.h index f604d2161..8b9ad1820 100644 --- a/slsDetectorGui/include/qTabDebugging.h +++ b/slsDetectorGui/include/qTabDebugging.h @@ -53,9 +53,6 @@ private: */ void Initialization(); - /** Enables/Disables all the widgets - */ - void Enable(bool enable); }; diff --git a/slsDetectorGui/src/qActionsWidget.cpp b/slsDetectorGui/src/qActionsWidget.cpp index 7eaceaba4..230626210 100644 --- a/slsDetectorGui/src/qActionsWidget.cpp +++ b/slsDetectorGui/src/qActionsWidget.cpp @@ -4,9 +4,12 @@ * Created on: May 10, 2012 * Author: l_maliakal_d */ - +// Project Class Headers +#include "slsDetector.h" +#include "multiSlsDetector.h" // Qt Project Class Headers #include "qActionsWidget.h" +#include "qDefs.h" // Qt Include Headers #include #include @@ -20,6 +23,7 @@ #include #include #include +#include // C++ Include Headers #include using namespace std; @@ -28,8 +32,8 @@ using namespace std; //------------------------------------------------------------------------------------------------------------------------------------------------- -ActionsWidget::ActionsWidget(QWidget *parent, int scanType, int id): - QFrame(parent),scanType(scanType),id(id){ +ActionsWidget::ActionsWidget(QWidget *parent,multiSlsDetector*& detector, int scanType, int id): + QFrame(parent),myDet(detector),scanType(scanType),id(id),expand(false){ SetupWidgetWindow(); Initialization(); } @@ -39,6 +43,7 @@ ActionsWidget::ActionsWidget(QWidget *parent, int scanType, int id): ActionsWidget::~ActionsWidget(){ + delete myDet; delete layout; } @@ -50,136 +55,169 @@ void ActionsWidget::SetupWidgetWindow(){ // Widget Settings //setFrameStyle(QFrame::Box); //setFrameShadow(QFrame::Raised); + // Main Layout Settings setFixedHeight(25); if(scanType) setFixedHeight(125); - - - // Main Layout Settings layout = new QGridLayout(this); setLayout(layout); layout->setContentsMargins(0,0,0,0); if(scanType) layout->setVerticalSpacing(5); + if(id==NumPositions){ + setFixedHeight(75); + QLabel *lblNumPos = new QLabel("Number of Positions:"); + lblNumPos->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layout->addWidget(lblNumPos,0,0); + spinNumPos = new QSpinBox(this); + layout->addWidget(spinNumPos,0,1); + layout->addItem(new QSpacerItem(80,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,2); + QLabel *lblPosList = new QLabel("List of Positions:"); + lblPosList->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layout->addWidget(lblPosList,0,3); + comboPos = new QComboBox(this); + comboPos->setEditable(true); + comboPos->setCompleter(0); + layout->addWidget(comboPos,0,4); + btnDelete = new QPushButton("Delete"); + btnDelete->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layout->addWidget(btnDelete,0,5); + + QGroupBox *w = new QGroupBox; + layout->addWidget(w,1,0,1,6); + QHBoxLayout *l1 = new QHBoxLayout(w); + l1->setContentsMargins(0,0,0,0); + l1->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + chkInvert = new QCheckBox("Invert Angles"); + l1->addWidget(chkInvert); + chkSeparate = new QCheckBox("Separate Two Halves"); + l1->addWidget(chkSeparate); + chkReturn = new QCheckBox("Return to Start Position"); + chkReturn->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + l1->addWidget(chkReturn); + l1->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + - // Main Widgets - comboScript = new QComboBox(this); - if(!scanType){ - comboScript->addItem("None"); - comboScript->addItem("Custom Script"); }else{ - comboScript->addItem("None"); - comboScript->addItem("Energy Scan"); - comboScript->addItem("Threshold Scan"); - comboScript->addItem("Trimbits Scan"); - comboScript->addItem("Custom Script"); - } + // Main Widgets + comboScript = new QComboBox(this); + if(!scanType){ + comboScript->addItem("None"); + comboScript->addItem("Custom Script"); + }else{ + comboScript->addItem("None"); + comboScript->addItem("Energy Scan"); + comboScript->addItem("Threshold Scan"); + comboScript->addItem("Trimbits Scan"); + comboScript->addItem("Custom Script"); + } layout->addWidget(comboScript,0,0); - layout->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1); - dispScript = new QLineEdit("None"); + layout->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1); + dispScript = new QLineEdit(""); dispScript->setEnabled(false); layout->addWidget(dispScript,0,2); - btnBrowse = new QPushButton("Browse"); + btnBrowse = new QPushButton("Browse"); btnBrowse->setEnabled(false); layout->addWidget(btnBrowse,0,3); - layout->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,4); - lblParameter = new QLabel("Additional Parameter:"); + layout->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,4); + lblParameter = new QLabel("Additional Parameter:"); lblParameter->setEnabled(false); layout->addWidget(lblParameter,0,5); - dispParameter = new QLineEdit("None"); + dispParameter = new QLineEdit(""); dispParameter->setEnabled(false); dispParameter->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); layout->addWidget(dispParameter,0,6); - // Scan Levels Widgets - if(scanType){ - lblSteps = new QLabel("Number of Steps:"); + // Scan Levels Widgets + if(scanType){ + lblSteps = new QLabel("Number of Steps:"); lblSteps->setEnabled(false); layout->addWidget(lblSteps,1,2); - spinSteps = new QSpinBox(this); + spinSteps = new QSpinBox(this); spinSteps->setEnabled(false); layout->addWidget(spinSteps,1,3); - lblPrecision = new QLabel("Precision:"); + lblPrecision = new QLabel("Precision:"); lblPrecision->setEnabled(false); layout->addWidget(lblPrecision,1,5); - spinPrecision = new QSpinBox(this); + spinPrecision = new QSpinBox(this); spinPrecision->setEnabled(false); layout->addWidget(spinPrecision,1,6); - group = new QGroupBox(this); + group = new QGroupBox(this); group->setEnabled(false); // Fix the size of the groupbox group->setFixedSize(513,66); - layout->addWidget(group,2,2,1,5); + layout->addWidget(group,2,2,1,6); - // Group Box for step size - // Radio Buttons Layout - QWidget *h1Widget = new QWidget(group); - h1Widget->setGeometry(QRect(10, 5, group->width()-20, 23)); - QHBoxLayout *h1 = new QHBoxLayout(h1Widget); - h1->setContentsMargins(0, 0, 0, 0); - radioConstant = new QRadioButton("Constant Step Size",h1Widget); + // Group Box for step size + // Radio Buttons Layout + QWidget *h1Widget = new QWidget(group); + h1Widget->setGeometry(QRect(10, 5, group->width()-20, 23)); + QHBoxLayout *h1 = new QHBoxLayout(h1Widget); + h1->setContentsMargins(0, 0, 0, 0); + radioConstant = new QRadioButton("Constant Step Size",h1Widget); radioConstant->setChecked(true); h1->addWidget(radioConstant); - radioSpecific = new QRadioButton("Specific Values",h1Widget); + radioSpecific = new QRadioButton("Specific Values",h1Widget); h1->addWidget(radioSpecific); - radioValue = new QRadioButton("Values from File",h1Widget); + radioValue = new QRadioButton("Values from File",h1Widget); radioValue->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); h1->addWidget(radioValue); - // Constant Size Layout - QWidget *h2ConstantWidget = new QWidget(group); - h2ConstantWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); - QHBoxLayout *h2Constant = new QHBoxLayout(h2ConstantWidget); - h2Constant->setContentsMargins(0, 0, 0, 0); + // Constant Size Layout + QWidget *h2ConstantWidget = new QWidget(group); + h2ConstantWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); + QHBoxLayout *h2Constant = new QHBoxLayout(h2ConstantWidget); + h2Constant->setContentsMargins(0, 0, 0, 0); - h2Constant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - lblFrom = new QLabel("from",h2ConstantWidget); + h2Constant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + lblFrom = new QLabel("from",h2ConstantWidget); lblFrom->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); h2Constant->addWidget(lblFrom); - spinFrom = new QSpinBox(h2ConstantWidget); + spinFrom = new QSpinBox(h2ConstantWidget); h2Constant->addWidget(spinFrom); - lblTo = new QLabel("to",h2ConstantWidget); + lblTo = new QLabel("to",h2ConstantWidget); lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); h2Constant->addWidget(lblTo); - spinTo = new QSpinBox(h2ConstantWidget); + spinTo = new QSpinBox(h2ConstantWidget); h2Constant->addWidget(spinTo); - h2Constant->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - lblSize = new QLabel("Size",h2ConstantWidget); + h2Constant->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + lblSize = new QLabel("Size",h2ConstantWidget); lblSize->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); h2Constant->addWidget(lblSize); - spinSize = new QSpinBox(h2ConstantWidget); + spinSize = new QSpinBox(h2ConstantWidget); h2Constant->addWidget(spinSize); - h2Constant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + h2Constant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - // Specific Values Layout - QWidget *h2SpecificWidget = new QWidget(group); - h2SpecificWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); - QHBoxLayout *h2Specific = new QHBoxLayout(h2SpecificWidget); - h2Specific->setContentsMargins(0, 0, 0, 0); - h2Specific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - comboSpecific = new QComboBox(h2SpecificWidget); + // Specific Values Layout + QWidget *h2SpecificWidget = new QWidget(group); + h2SpecificWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); + QHBoxLayout *h2Specific = new QHBoxLayout(h2SpecificWidget); + h2Specific->setContentsMargins(0, 0, 0, 0); + h2Specific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + comboSpecific = new QComboBox(h2SpecificWidget); h2Specific->addWidget(comboSpecific); comboSpecific->hide(); - h2Specific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + h2Specific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - // Values From a File Layout - QWidget *h2ValuesWidget = new QWidget(group); - h2ValuesWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); - QHBoxLayout *h2Values = new QHBoxLayout(h2ValuesWidget); - h2Values->setContentsMargins(0, 0, 0, 0); - h2Values->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); - dispValues = new QLineEdit("steps.txt",h2ValuesWidget); + // Values From a File Layout + QWidget *h2ValuesWidget = new QWidget(group); + h2ValuesWidget->setGeometry(QRect(10, 30, group->width()-20, 31)); + QHBoxLayout *h2Values = new QHBoxLayout(h2ValuesWidget); + h2Values->setContentsMargins(0, 0, 0, 0); + h2Values->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + dispValues = new QLineEdit("steps.txt",h2ValuesWidget); dispValues->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); h2Values->addWidget(dispValues); dispValues->hide(); - btnValues = new QPushButton("Browse",h2ValuesWidget); + btnValues = new QPushButton("Browse",h2ValuesWidget); btnValues->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); h2Values->addWidget(btnValues); btnValues->hide(); - h2Values->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + h2Values->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + } } } @@ -189,55 +227,20 @@ void ActionsWidget::SetupWidgetWindow(){ void ActionsWidget::Initialization(){ - connect(comboScript,SIGNAL(currentIndexChanged(int)),this,SLOT(SetScript(int))); - if(scanType){ - connect(radioConstant,SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - connect(radioSpecific,SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - connect(radioValue,SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - } - connect(btnBrowse, SIGNAL(clicked()), this, SLOT(BrowsePath())); - - -} - - -//------------------------------------------------------------------------------------------------------------------------------------------------- - - -void ActionsWidget::SetScript(int index){ - // defaults - dispScript->setEnabled(false); - btnBrowse->setEnabled(false); - lblParameter->setEnabled(false); - dispParameter->setEnabled(false); - if(scanType){ - group->setEnabled(false); - lblSteps->setEnabled(false); - spinSteps->setEnabled(false); - lblPrecision->setEnabled(false); - spinPrecision->setEnabled(false); - } - // If anything other than None is selected - if(index){ - // Custom Script only enables the first layout with addnl parameters etc - if(!comboScript->currentText().compare("Custom Script")){ - dispScript->setEnabled(true); - btnBrowse->setEnabled(true); - lblParameter->setEnabled(true); - dispParameter->setEnabled(true); - } - // If this group includes Energy scan , threhold scan etc + if(id==NumPositions){ + connect(spinNumPos, SIGNAL(valueChanged(int)), this, SLOT(SetNumPositions(int))); + connect(btnDelete, SIGNAL(clicked()), this, SLOT(DeletePosition())); + }else{ + connect(comboScript, SIGNAL(currentIndexChanged(int)), this,SLOT(SetScript(int))); + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + connect(btnBrowse, SIGNAL(clicked()), this, SLOT(BrowsePath())); + connect(dispParameter, SIGNAL(textChanged(const QString&)), this, SLOT(SetParameter(const QString&))); if(scanType){ - group->setEnabled(true); - lblPrecision->setEnabled(true); - spinPrecision->setEnabled(true); - // Steps are enabled only if constant step size is not checked - lblSteps->setEnabled(!radioConstant->isChecked()); - spinSteps->setEnabled(!radioConstant->isChecked()); + connect(radioConstant, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); + connect(radioSpecific, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); + connect(radioValue, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); } } - //emit signal to enable scanbox and the radiobuttons - if(scanType) emit EnableScanBox(index,((id==2)?1:0)); } @@ -278,17 +281,249 @@ void ActionsWidget::EnableSizeWidgets(){ } +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void ActionsWidget::SetScript(int index){ + // defaults + dispScript->setEnabled(false); + btnBrowse->setEnabled(false); + lblParameter->setEnabled(false); + dispParameter->setEnabled(false); + if(scanType){ + group->setEnabled(false); + lblSteps->setEnabled(false); + spinSteps->setEnabled(false); + lblPrecision->setEnabled(false); + spinPrecision->setEnabled(false); + } + // If anything other than None is selected + if(index){ + // Custom Script only enables the first layout with addnl parameters etc + if(!comboScript->currentText().compare("Custom Script")){ + dispScript->setEnabled(true); + btnBrowse->setEnabled(true); + lblParameter->setEnabled(true); + dispParameter->setEnabled(true); + } + // If this group includes Energy scan , threhold scan etc + if(scanType){ + group->setEnabled(true); + lblPrecision->setEnabled(true); + spinPrecision->setEnabled(true); + // Steps are enabled only if constant step size is not checked + lblSteps->setEnabled(!radioConstant->isChecked()); + spinSteps->setEnabled(!radioConstant->isChecked()); + } + } + //emit signal to enable scanbox and the radiobuttons + if(scanType) emit EnableScanBox(index,((id==2)?1:0)); + +#ifdef VERBOSE + cout << "Setting mode of action widget:" << id << " to " << index << endl; +#endif + QString fName = dispScript->text(); + //script + if((id!=Scan0)&&(id!=Scan1)) + //scan and positions wouldnt get here + if(index) myDet->setActionScript(GetActionIndex(id),fName.toAscii().constData()); + else myDet->setActionScript(GetActionIndex(id),""); + //scan + else{ + + } + + cout<<"mode:"<getActionMode(GetActionIndex(id))<<" " + "script:"<getActionScript(GetActionIndex(id))<<" " + "parameter:"<getActionParameter(GetActionIndex(id))<text(); QString dir = fName.section('/',0,-2,QString::SectionIncludeLeadingSep); if(dir.isEmpty()) dir = "/home"; + //dialog fName = QFileDialog::getOpenFileName(this, tr("Load Script File"),dir, tr("Script Files(*.awk);;All Files(*)"));//,0,QFileDialog::ShowDirsOnly); - if (!fName.isEmpty()){ + //if empty, set the file name and it calls setscriptfile, else ignore + if (!fName.isEmpty()) dispScript->setText(fName); - emit SetScriptSignal(fName,id); +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void ActionsWidget::SetScriptFile(){ + QString fName = dispScript->text();bool set = false; +#ifdef VERBOSE + cout << "Setting script file of action widget:" << id << " to " << fName.toAscii().constData() << endl; +#endif + disconnect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + + //blank + if(fName.isEmpty()) + set = true; + //not blank + else{ + QString file = dispScript->text().section('/',-1); + //is a file + if(file.contains('.')){ + //check if it exists and set the script file + if(QFile::exists(fName)) + set = true; + //if the file doesnt exist, set it to what it was before + else{ + qDefs::WarningMessage("The script file entered does not exist","ActionsWidget"); + dispScript->setText(QString(myDet->getActionScript(GetActionIndex(id)).c_str())); + } + }//not a file, set it to what it was before + else { + qDefs::WarningMessage("The script file path entered is not a file","ActionsWidget"); + dispScript->setText(QString(myDet->getActionScript(GetActionIndex(id)).c_str())); + } + } + + //if blank or valid file + if(set){ + //script + if((id!=Scan0)&&(id!=Scan1)){ + //scan and positions wouldnt get here + if(!myDet->setActionScript(GetActionIndex(id),fName.toAscii().constData())){ + //did not get set, write what is was before + if(!fName.isEmpty()) + qDefs::WarningMessage("The script file could not be set. Reverting to previous file.","ActionsWidget"); + dispScript->setText(QString(myDet->getActionScript(GetActionIndex(id)).c_str())); + } + } + //scan + else{ + + } + } + + //dont display if theres a none + if(!dispScript->text().compare("none")) dispScript->setText(""); + + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void ActionsWidget::SetParameter(const QString& parameter){ +#ifdef VERBOSE + cout << "Setting parameter of action widget:" << id << " to " << parameter.toAscii().constData() << endl; +#endif + //script + if((id!=ActionsWidget::Scan0)&&(id!=ActionsWidget::Scan1)) + //scan and positions wouldnt get here + myDet->setActionParameter(GetActionIndex(id),parameter.toAscii().constData()); + //scan + else{ + } } + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void ActionsWidget::SetNumPositions(int index){ + //comboPos->setEnabled(index); + //if there arent enough positions + if((index) && (comboPos->count()setValue(comboPos->count()); + }else{ + //emit SetPositionsSignal(); + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void ActionsWidget::DeletePosition(){ + QString pos = comboPos->currentText(); + bool found = false; + //loops through to find the index and to make sure its in the list + for(int i=0;icount();i++){ + if(!comboPos->itemText(i).compare(pos)){ + found = true; + comboPos->removeItem(i); + break; + } + } + //give the warning only when you try to delete stuff that arent there + if((!found)&&(comboPos->count())) qDefs::WarningMessage("This position cannot be deleted as it doesn't exist in the list anyway","ActionsWidget"); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void ActionsWidget::Refresh(){ + //disabling signals and slots + if(id==NumPositions){ + + }else{ + disconnect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + disconnect(dispParameter, SIGNAL(textChanged(const QString&)),this, SLOT(SetParameter(const QString&))); + } + + + int mode;string script,parameter; + if((id == Scan0)||(id == Scan1)){ + + }else if(id == NumPositions){ + + }else{ + mode = (myDet->getActionMode(GetActionIndex(id))>0?1:0); + script = myDet->getActionScript(GetActionIndex(id)); + parameter = myDet->getActionParameter(GetActionIndex(id)); + //defaults + if(script == "none") script=""; + if(parameter == "none") parameter=""; + //settings values + dispScript->setText(QString(script.c_str())); + dispParameter->setText(QString(parameter.c_str())); + //set mode which also checks everything + comboScript->setCurrentIndex(mode); + } + + + //enabling signals and slots + if(id==NumPositions){ + + }else{ + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + connect(dispParameter, SIGNAL(textChanged(const QString&)),this, SLOT(SetParameter(const QString&))); + } +#ifdef VERBOSE + cout << "Updated action widget " << id << "\tscript:" << script << "\tparameter:" << parameter << endl; +#endif +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +int ActionsWidget::GetActionIndex(int gIndex){ + switch(gIndex){ + case Start: return slsDetectorDefs::startScript; + case ActionBefore: return slsDetectorDefs::scriptBefore; + case HeaderBefore: return slsDetectorDefs::headerBefore; + case HeaderAfter: return slsDetectorDefs::headerAfter; + case ActionAfter: return slsDetectorDefs::scriptAfter; + case Stop: return slsDetectorDefs::stopScript; + default: return -1; + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index a2f6d5e81..1995add10 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -27,7 +27,8 @@ using namespace std; //------------------------------------------------------------------------------------------------------------------------------------------------- -qDrawPlot::qDrawPlot(QWidget *parent,multiSlsDetector*& detector):QWidget(parent),myDet(detector){ +qDrawPlot::qDrawPlot(QWidget *parent,multiSlsDetector*& detector): + QWidget(parent),myDet(detector){ SetupWidgetWindow(); Initialization(); StartStopDaqToggle(); //as default @@ -79,6 +80,8 @@ void qDrawPlot::SetupWidgetWindow(){ timerValue = PLOT_TIMER_MS; frameFactor=0; plotLock = false; + isFrameEnabled = false; + isTriggerEnabled = false; /** This is so that it initially stop and plots */ running = 1; for(int i=0;isetTimer(slsDetectorDefs::FRAME_NUMBER,-1); + int numFrames = (isFrameEnabled)*((int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1)); + int numTriggers = (isTriggerEnabled)*((int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1)); + + numFrames = ((numFrames==0)?1:numFrames); + numTriggers = ((numTriggers==0)?1:numTriggers); + + + number_of_exposures= numFrames * numTriggers; cout<<"\tNumber of Exposures:"<setTimer(slsDetectorDefs::ACQUISITION_TIME,-1))*1E-9); @@ -351,12 +361,6 @@ int qDrawPlot::GetData(detectorData *data){ //------------------------------------------------------------------------------------------------------------------------------------------------- -void qDrawPlot::setNumMeasurements(int num){ - number_of_measurements = num; -} - -//------------------------------------------------------------------------------------------------------------------------------------------------- - void qDrawPlot::SelectPlot(int i){ //1 for 1D otherwise 2D if(i==1){ plot1D->SetXTitle(histXAxisTitle.toAscii().constData()); diff --git a/slsDetectorGui/src/qTabActions.cpp b/slsDetectorGui/src/qTabActions.cpp index ec6818dff..691f16ccc 100644 --- a/slsDetectorGui/src/qTabActions.cpp +++ b/slsDetectorGui/src/qTabActions.cpp @@ -18,6 +18,7 @@ using namespace std; +//------------------------------------------------------------------------------------------------------------------------------------------------- qTabActions::qTabActions(QWidget *parent,multiSlsDetector*& detector): @@ -27,6 +28,7 @@ qTabActions::qTabActions(QWidget *parent,multiSlsDetector*& detector): } +//------------------------------------------------------------------------------------------------------------------------------------------------- qTabActions::~qTabActions(){ @@ -34,11 +36,12 @@ qTabActions::~qTabActions(){ } +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabActions::SetupWidgetWindow(){ // Window Settings - setFixedSize(705,350); + setFixedSize(710,350); setContentsMargins(0,0,0,0); // Scroll Area Settings @@ -56,13 +59,14 @@ void qTabActions::SetupWidgetWindow(){ group = new QButtonGroup(this); palette = new QPalette(); + // For each level of Actions for(int i=0;isetFixedSize(20,20); @@ -78,36 +82,43 @@ void qTabActions::SetupWidgetWindow(){ } // Label Values - lblName[Start]->setText("Action at Start"); - lblName[Scan0]->setText("Scan Level 0"); - lblName[Scan1]->setText("Scan Level 1"); - lblName[ActionBefore]->setText("Action before each Frame"); - lblName[NumPositions]->setText("Number of Positions"); - lblName[HeaderBefore]->setText("Header before Frame"); - lblName[HeaderAfter]->setText("Header after Frame"); - lblName[ActionAfter]->setText("Action after each Frame"); - lblName[Stop]->setText("Action at Stop"); + lblName[ActionsWidget::Start]->setText("Action at Start"); + lblName[ActionsWidget::Scan0]->setText("Scan Level 0"); + lblName[ActionsWidget::Scan1]->setText("Scan Level 1"); + lblName[ActionsWidget::ActionBefore]->setText("Action before each Frame"); + lblName[ActionsWidget::NumPositions]->setText("Positions"); + lblName[ActionsWidget::HeaderBefore]->setText("Header before Frame"); + lblName[ActionsWidget::HeaderAfter]->setText("Header after Frame"); + lblName[ActionsWidget::ActionAfter]->setText("Action after each Frame"); + lblName[ActionsWidget::Stop]->setText("Action at Stop"); // initially hide all the widgets for(int i=0;ihide(); + //Number of positions is only for mythen or gotthard + slsDetectorDefs::detectorType detType = myDet->getDetectorsType(); + if((detType == slsDetectorDefs::EIGER) || (detType == slsDetectorDefs::AGIPD)) { + lblName[ActionsWidget::NumPositions]->setEnabled(false); + btnExpand[ActionsWidget::NumPositions]->setEnabled(false); + } + } +//------------------------------------------------------------------------------------------------------------------------------------------------- + void qTabActions::Initialization(){ connect(group, SIGNAL(buttonClicked(QAbstractButton*)), this,SLOT(Expand(QAbstractButton*))); - connect(actionWidget[Scan0],SIGNAL(EnableScanBox(bool,int)), this,SIGNAL(EnableScanBox(bool,int))); - connect(actionWidget[Scan1],SIGNAL(EnableScanBox(bool,int)), this,SIGNAL(EnableScanBox(bool,int))); + connect(actionWidget[ActionsWidget::Scan0],SIGNAL(EnableScanBox(bool,int)), this,SIGNAL(EnableScanBox(bool,int))); + connect(actionWidget[ActionsWidget::Scan1],SIGNAL(EnableScanBox(bool,int)), this,SIGNAL(EnableScanBox(bool,int))); - for(int i=0;iid(button); @@ -117,8 +128,11 @@ void qTabActions::Expand(QAbstractButton *button ){ lblName[index]->setPalette(*palette); actionWidget[index]->hide(); button->setText("+"); - if((index==Scan0)||(index==Scan1)) + if((index==ActionsWidget::Scan0)||(index==ActionsWidget::Scan1)){ setFixedHeight(height()-130); + } + else if(index==ActionsWidget::NumPositions) + setFixedHeight(height()-80); else setFixedHeight(height()-30); }else{ @@ -127,29 +141,28 @@ void qTabActions::Expand(QAbstractButton *button ){ lblName[index]->setPalette(*palette); actionWidget[index]->show(); button->setText("-"); - if((index==Scan0)||(index==Scan1)) + if((index==ActionsWidget::Scan0)||(index==ActionsWidget::Scan1)){ setFixedHeight(height()+130); + } + else if(index==ActionsWidget::NumPositions) + setFixedHeight(height()+80); else setFixedHeight(height()+30); } } -//------------------------------------------------------------------------------------------------------------------------------------------------- - - -void qTabActions::SetScript(const QString& fName,int index){ -#ifdef VERBOSE - cout << "Setting script file of action widget:" << index << " to " << fName.toAscii().constData() << endl; -#endif - -} - //------------------------------------------------------------------------------------------------------------------------------------------------- + void qTabActions::Refresh(){ - +#ifdef VERBOSE + cout << "Updating action widgets " << endl; +#endif + for(int i=0;iRefresh(); } + //------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/slsDetectorGui/src/qTabDebugging.cpp b/slsDetectorGui/src/qTabDebugging.cpp index 451201ca0..7e77113ec 100644 --- a/slsDetectorGui/src/qTabDebugging.cpp +++ b/slsDetectorGui/src/qTabDebugging.cpp @@ -15,6 +15,8 @@ using namespace std; +//------------------------------------------------------------------------------------------------------------------------------------------------- + qTabDebugging::qTabDebugging(QWidget *parent,multiSlsDetector*& detector):QWidget(parent),myDet(detector){ setupUi(this); @@ -23,6 +25,7 @@ qTabDebugging::qTabDebugging(QWidget *parent,multiSlsDetector*& detector):QWidge } +//------------------------------------------------------------------------------------------------------------------------------------------------- qTabDebugging::~qTabDebugging(){ @@ -30,6 +33,7 @@ qTabDebugging::~qTabDebugging(){ } +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabDebugging::SetupWidgetWindow(){ @@ -49,6 +53,7 @@ void qTabDebugging::SetupWidgetWindow(){ } } +//------------------------------------------------------------------------------------------------------------------------------------------------- void qTabDebugging::Initialization(){ @@ -56,12 +61,6 @@ void qTabDebugging::Initialization(){ -void qTabDebugging::Enable(bool enable){ - //this->setEnabled(enable); - -} - - //------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index 6120ef36f..5b6b6a172 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -634,10 +634,14 @@ void qTabMeasurement::setTimingMode(int mode){ #endif } - /** To reconnect all the signals after changing their values*/ Initialization(1); + + // to let qdrawplot know that triggers or frames are used + myPlot->setFrameEnabled(lblNumTriggers->isEnabled()); + myPlot->setTriggerEnabled(lblNumFrames->isEnabled()); + return; } @@ -654,6 +658,11 @@ void qTabMeasurement::Refresh(){ lblProgressIndex->setText(QString::number(myDet->getFileIndex())); /** Timing mode**/ SetupTimingMode(); + + // to let qdrawplot know that triggers or frames are used + myPlot->setFrameEnabled(lblNumTriggers->isEnabled()); + myPlot->setTriggerEnabled(lblNumFrames->isEnabled()); + } diff --git a/slsDetectorGui/src/qTabSettings.cpp b/slsDetectorGui/src/qTabSettings.cpp index 1f61f8ce5..572667919 100644 --- a/slsDetectorGui/src/qTabSettings.cpp +++ b/slsDetectorGui/src/qTabSettings.cpp @@ -211,7 +211,7 @@ void qTabSettings::SetDynamicRange(int index){ #endif ret=myDet->setDynamicRange(dr); if(ret!=dr){ - qDefs::WarningMessage("Dynamic Range cannot be set for this value.","Settings"); + qDefs::WarningMessage("Dynamic Range cannot be set to this value.","Settings"); #ifdef VERBOSE cout << "ERROR: Setting dynamic range to "<< ret << endl; #endif