diff --git a/slsDetectorGui/doxy.config b/slsDetectorGui/doxy.config index 2fabbef2b..877d4c456 100644 --- a/slsDetectorGui/doxy.config +++ b/slsDetectorGui/doxy.config @@ -87,6 +87,10 @@ INPUT = \ src/qTabPlot.cpp\ include/qTabActions.h\ src/qTabActions.cpp\ + include/qActionsWidget.h\ + src/qActionsWidget.cpp\ + include/qScanWidget.h\ + src/qScanWidget.cpp\ include/qTabAdvanced.h\ src/qTabAdvanced.cpp\ include/qTabSettings.h\ diff --git a/slsDetectorGui/forms/form_action.ui b/slsDetectorGui/forms/form_action.ui new file mode 100644 index 000000000..65973ed65 --- /dev/null +++ b/slsDetectorGui/forms/form_action.ui @@ -0,0 +1,163 @@ + + + ActionsObject + + + + 0 + 0 + 680 + 25 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 1000 + 1000 + + + + Form + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + None + + + + + Custom Script + + + + + + + + false + + + + + + + false + + + Additional Parameter: + + + + + + + false + + + Browse + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + false + + + + 0 + 0 + + + + + + + + + diff --git a/slsDetectorGui/forms/form_scan.ui b/slsDetectorGui/forms/form_scan.ui new file mode 100644 index 000000000..2cbd35cd8 --- /dev/null +++ b/slsDetectorGui/forms/form_scan.ui @@ -0,0 +1,403 @@ + + + ScanObject + + + + 0 + 0 + 724 + 125 + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 1000 + 1000 + + + + Form + + + + 0 + + + 5 + + + 0 + + + + + false + + + + 0 + 0 + + + + + 180 + 0 + + + + + + + + 0 + + + 5 + + + 0 + + + + + + + Constant Step Size + + + true + + + + + + + Specific Values + + + false + + + + + + + + 0 + 0 + + + + Values from File + + + false + + + + + + + + + + + + + + + + + + + 0 + + + + + false + + + + 0 + 0 + + + + Precision: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + false + + + + 0 + 0 + + + + 0 + + + 10 + + + 0 + + + + + + + + + 0 + + + + + false + + + + 0 + 0 + + + + Additional Parameter: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + false + + + + 0 + 0 + + + + + + + + + + 0 + + + + + false + + + + 0 + 0 + + + + Number of Steps: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + false + + + + 0 + 0 + + + + 1 + + + 1000000 + + + 2 + + + + + + + + + + None + + + + + Energy Scan + + + + + Threshold Scan + + + + + Trimbits Scan + + + + + Custom Script + + + + + + + + 0 + + + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + + + + + false + + + Browse + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 30 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 40 + 20 + + + + + + + + + diff --git a/slsDetectorGui/forms/form_tab_measurement.ui b/slsDetectorGui/forms/form_tab_measurement.ui index 1452b0986..3abf18353 100644 --- a/slsDetectorGui/forms/form_tab_measurement.ui +++ b/slsDetectorGui/forms/form_tab_measurement.ui @@ -221,13 +221,13 @@ - 0 + 1 2000000000 - 0 + 1 @@ -363,13 +363,13 @@ - 0 + 1 2000000000 - 0 + 1 @@ -417,13 +417,13 @@ - 0 + 1 2000000000 - 0 + 1 diff --git a/slsDetectorGui/forms/form_tab_plot.ui b/slsDetectorGui/forms/form_tab_plot.ui index cf76e55b6..395a73f0e 100644 --- a/slsDetectorGui/forms/form_tab_plot.ui +++ b/slsDetectorGui/forms/form_tab_plot.ui @@ -196,7 +196,7 @@ 10 20 - 356 + 358 26 @@ -219,6 +219,9 @@ + + false + 0 @@ -232,6 +235,9 @@ + + false + 0 @@ -373,6 +379,9 @@ + + false + 0 @@ -402,6 +411,9 @@ + + false + 0 @@ -1054,6 +1066,9 @@ + + false + 0 @@ -1442,6 +1457,9 @@ + + false + 0 diff --git a/slsDetectorGui/include/qActionsWidget.h b/slsDetectorGui/include/qActionsWidget.h index fcf4c6c85..32f35c51a 100644 --- a/slsDetectorGui/include/qActionsWidget.h +++ b/slsDetectorGui/include/qActionsWidget.h @@ -1,5 +1,5 @@ /* - * qTabActions.h + * qActionsWidget.h * * Created on: May 10, 2012 * Author: l_maliakal_d @@ -8,118 +8,60 @@ #ifndef QACTIONSWIDGET_H_ #define QACTIONSWIDGET_H_ - +/** Form Header */ +#include "ui_form_action.h" /** Project Class Headers */ class multiSlsDetector; /** Qt Include Headers */ -#include -class QGridLayout; -class QComboBox; -class QLineEdit; -class QPushButton; -class QLabel; -class QSpinBox; -class QGroupBox; -class QRadioButton; -class QCheckBox; + /** C++ Include Headers */ #include using namespace std; -class ActionsWidget : public QFrame{ +class qActionsWidget : public QWidget,private Ui::ActionsObject{ Q_OBJECT 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, multiSlsDetector*& detector, int scanType, int id); + qActionsWidget(QWidget *parent, multiSlsDetector*& detector); - ~ActionsWidget(); - - /**set variable expand - */ - void SetExpand(bool expanded){expand = expanded;}; - - /**get variable expand - */ - bool isExpanded(){return expand;}; + ~qActionsWidget(); /**to update the widgets*/ void Refresh(); + /**number of action widgets*/ + static int NUM_ACTION_WIDGETS; + - 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; - QLineEdit *dispScript; - QPushButton *btnBrowse; - QLabel *lblParameter; - QLineEdit *dispParameter; - QLabel *lblSteps; - QSpinBox *spinSteps; - QLabel *lblPrecision; - QSpinBox *spinPrecision; - QGroupBox *group; - QRadioButton *radioConstant; - QRadioButton *radioSpecific; - QRadioButton *radioValue; - QLabel *lblFrom; - QSpinBox *spinFrom; - QLabel *lblTo; - QSpinBox *spinTo; - QLabel *lblSize; - QSpinBox *spinSize; - QComboBox *comboSpecific; - QLineEdit *dispValues; - QPushButton *btnValues; - QSpinBox *spinNumPos; - QComboBox *comboPos; - QPushButton *btnDelete; - QCheckBox *chkInvert; - QCheckBox *chkSeparate; - QCheckBox *chkReturn; /** Sets up the widget */ void SetupWidgetWindow(); - /** Sets up all the slots and signals */ + /** 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 - * @param index value chosen*/ + * @param index value chosen + * */ void SetScript(int index); -/** Enables widgets depending on which size is clicked. - * Options: constant size,specific values,values from file */ -void EnableSizeWidgets(); - /** Browse for the script * */ void BrowsePath(); @@ -133,17 +75,6 @@ void SetScriptFile(); * */ void SetParameter(const QString& parameter); -/** Sets the number of positions - * */ -void SetNumPositions(int index); - -/** Deletes current position - * */ -void DeletePosition(); - - -signals: -void EnableScanBox(bool,int); }; diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index 4e6004122..35068feb6 100644 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -212,7 +212,7 @@ private: bool IsXYRange[4]; /** Default timer between plots*/ - static const double PLOT_TIMER_MS = 500; + static const double PLOT_TIMER_MS = 250; /** Specific timer value between plots */ double timerValue; /** every nth frame when to plot */ diff --git a/slsDetectorGui/include/qScanWidget.h b/slsDetectorGui/include/qScanWidget.h new file mode 100644 index 000000000..affa2d31f --- /dev/null +++ b/slsDetectorGui/include/qScanWidget.h @@ -0,0 +1,99 @@ +/* + * qScanWidget.h + * + * Created on: May 10, 2012 + * Author: l_maliakal_d + */ + +#ifndef QSCANWIDGET_H_ +#define QSCANWIDGET_H_ + +/** Form Header */ +#include "ui_form_scan.h" +/** Project Class Headers */ +class multiSlsDetector; +/** Qt Include Headers */ +#include +/** C++ Include Headers */ +#include +using namespace std; + + +class qScanWidget : public QWidget,private Ui::ScanObject{ + Q_OBJECT + +public: + /** \short The constructor + * @param parent is the parent tab widget + * @param detector is the detector returned from the detector tab + */ + qScanWidget(QWidget *parent, multiSlsDetector*& detector); + + ~qScanWidget(); + + /**to update the widgets*/ + void Refresh(); + + /**number of scan widgets*/ + static int NUM_SCAN_WIDGETS; + +private: + /** The sls detector object */ + multiSlsDetector *myDet; + /**id of the scan widget*/ + int id; + + QStackedLayout *stackedLayout; + QLabel *lblFrom; + QSpinBox *spinFrom; + QLabel *lblTo; + QSpinBox *spinTo; + QLabel *lblSize; + QSpinBox *spinSize; + QComboBox *comboSpecific; + QLineEdit *dispValues; + QPushButton *btnValues; + + + /** Sets up the widget + */ + void SetupWidgetWindow(); + + /** Sets up all the slots and signals */ + void Initialization(); + + + +private slots: +/** Sets the scan or script. Accordingly enables, disables other widgets + * @param index value chosen*/ +void SetScript(int index); + +/** Enables widgets depending on which size is clicked. + * Options: constant size,specific values,values from file */ +void EnableSizeWidgets(); + +/** Browse for the script + * */ +void BrowsePath(); + +/** Sets the script file + * */ +void SetScriptFile(); + +/** Set Parameter + * @param parameter is the parameter to be set to + * */ +void SetParameter(const QString& parameter); + + + +signals: +void EnableScanBox(bool,int); +}; + + + + +#endif /* QSCANWIDGET_H_ */ + diff --git a/slsDetectorGui/include/qTabActions.h b/slsDetectorGui/include/qTabActions.h index 85ca2b57c..194990416 100644 --- a/slsDetectorGui/include/qTabActions.h +++ b/slsDetectorGui/include/qTabActions.h @@ -8,12 +8,19 @@ #ifndef QTABACTIONS_H_ #define QTABACTIONS_H_ + +/* Qt Project Class Headers */ +#include "qActionsWidget.h" +#include "qScanWidget.h" /** Project Class Headers */ class multiSlsDetector; -class ActionsWidget; +class qActionsWidget; /** Qt Include Headers */ #include #include +#include +#include +#include #include #include #include @@ -46,16 +53,33 @@ private: /** The sls detector object */ multiSlsDetector *myDet; - static const int NUM_ACTION_WIDGETS = 9; + enum actionIndex{Scan0=1, Scan1, NumPositions=4, NumTotalActions=9}; QGridLayout *gridLayout; QButtonGroup *group; QPalette *palette; - /** action widget objects */ - ActionsWidget *actionWidget[NUM_ACTION_WIDGETS]; - QPushButton *btnExpand[NUM_ACTION_WIDGETS]; - QLabel *lblName[NUM_ACTION_WIDGETS]; + /** all action widget objects */ + qActionsWidget *actionWidget[6]; + qScanWidget *scanWidget[2]; + QWidget *positionWidget; + QPushButton *btnExpand[NumTotalActions]; + QLabel *lblName[NumTotalActions]; + + + /** NumPositions widget */ + QLabel *lblNumPos; + QLabel *lblPosList; + QSpinBox *spinNumPos; + QComboBox *comboPos; + QPushButton *btnDelete; + QCheckBox *chkInvert; + QCheckBox *chkSeparate; + QCheckBox *chkReturn; + + float *positions; + QPalette normal; + /** Sets up the widget */ void SetupWidgetWindow(); @@ -63,12 +87,28 @@ private: /** Sets up all the slots and signals */ void Initialization(); + /** creates the Num Positions object */ + void CreatePositionsWidget(); + /** Returns the index in each of the classes + * of actionwidget and scanwidget + * @param index the index in the list of all widgets + * returns actual index of the class + */ + int GetActualIndex(int index); private slots: -/** To Expand the Action Widget */ +/** To Expand the Action Widget + * */ void Expand(QAbstractButton *button); +/** Sets the positions list and the number of positions + * */ +void SetPosition(); + +/** Deletes current position + * */ +void DeletePosition(); signals: void EnableScanBox(bool,int); diff --git a/slsDetectorGui/slsDetectorGui.pro b/slsDetectorGui/slsDetectorGui.pro index 6c1474409..13a7327ed 100644 --- a/slsDetectorGui/slsDetectorGui.pro +++ b/slsDetectorGui/slsDetectorGui.pro @@ -55,6 +55,7 @@ SOURCES = \ src/qTabPlot.cpp\ src/qTabActions.cpp\ src/qActionsWidget.cpp\ + src/qScanWidget.cpp\ src/qTabAdvanced.cpp\ src/qTabSettings.cpp\ src/qTabDebugging.cpp\ @@ -80,6 +81,7 @@ HEADERS = \ include/qTabPlot.h\ include/qTabActions.h\ include/qActionsWidget.h\ + include/qScanWidget.h\ include/qTabAdvanced.h\ include/qTabSettings.h\ include/qTabDebugging.h\ @@ -97,5 +99,7 @@ FORMS = \ forms/form_tab_advanced.ui\ forms/form_tab_settings.ui\ forms/form_tab_debugging.ui\ - forms/form_tab_developer.ui + forms/form_tab_developer.ui\ # forms/form_tab_messages.ui + forms/form_action.ui\ + forms/form_scan.ui diff --git a/slsDetectorGui/src/qActionsWidget.cpp b/slsDetectorGui/src/qActionsWidget.cpp index 230626210..2c6ba039d 100644 --- a/slsDetectorGui/src/qActionsWidget.cpp +++ b/slsDetectorGui/src/qActionsWidget.cpp @@ -1,5 +1,5 @@ /* - * qTabActions.cpp + * qActionsWidget.cpp * * Created on: May 10, 2012 * Author: l_maliakal_d @@ -11,29 +11,19 @@ #include "qActionsWidget.h" #include "qDefs.h" // Qt Include Headers -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include // C++ Include Headers #include using namespace std; - +//------------------------------------------------------------------------------------------------------------------------------------------------- +int qActionsWidget::NUM_ACTION_WIDGETS(0); //------------------------------------------------------------------------------------------------------------------------------------------------- -ActionsWidget::ActionsWidget(QWidget *parent,multiSlsDetector*& detector, int scanType, int id): - QFrame(parent),myDet(detector),scanType(scanType),id(id),expand(false){ +qActionsWidget::qActionsWidget(QWidget *parent,multiSlsDetector*& detector): + QWidget(parent),myDet(detector){ + setupUi(this); SetupWidgetWindow(); Initialization(); } @@ -42,365 +32,134 @@ ActionsWidget::ActionsWidget(QWidget *parent,multiSlsDetector*& detector, int sc //------------------------------------------------------------------------------------------------------------------------------------------------- -ActionsWidget::~ActionsWidget(){ +qActionsWidget::~qActionsWidget(){ delete myDet; - delete layout; } //------------------------------------------------------------------------------------------------------------------------------------------------- -void ActionsWidget::SetupWidgetWindow(){ - // Widget Settings - //setFrameStyle(QFrame::Box); - //setFrameShadow(QFrame::Raised); - // Main Layout Settings +void qActionsWidget::SetupWidgetWindow(){ + id = NUM_ACTION_WIDGETS; + NUM_ACTION_WIDGETS++; + setFixedHeight(25); - if(scanType) setFixedHeight(125); - 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)); - - - }else{ - // 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(""); - dispScript->setEnabled(false); - layout->addWidget(dispScript,0,2); - 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:"); - lblParameter->setEnabled(false); - layout->addWidget(lblParameter,0,5); - 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:"); - lblSteps->setEnabled(false); - layout->addWidget(lblSteps,1,2); - spinSteps = new QSpinBox(this); - spinSteps->setEnabled(false); - layout->addWidget(spinSteps,1,3); - lblPrecision = new QLabel("Precision:"); - lblPrecision->setEnabled(false); - layout->addWidget(lblPrecision,1,5); - spinPrecision = new QSpinBox(this); - spinPrecision->setEnabled(false); - layout->addWidget(spinPrecision,1,6); - group = new QGroupBox(this); - group->setEnabled(false); - // Fix the size of the groupbox - group->setFixedSize(513,66); - 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); - radioConstant->setChecked(true); - h1->addWidget(radioConstant); - radioSpecific = new QRadioButton("Specific Values",h1Widget); - h1->addWidget(radioSpecific); - 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); - - 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); - h2Constant->addWidget(spinFrom); - lblTo = new QLabel("to",h2ConstantWidget); - lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); - h2Constant->addWidget(lblTo); - spinTo = new QSpinBox(h2ConstantWidget); - h2Constant->addWidget(spinTo); - 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); - h2Constant->addWidget(spinSize); - 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); - h2Specific->addWidget(comboSpecific); - comboSpecific->hide(); - 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); - dispValues->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); - h2Values->addWidget(dispValues); - dispValues->hide(); - 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)); - - } - } - } //------------------------------------------------------------------------------------------------------------------------------------------------- -void ActionsWidget::Initialization(){ - 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){ - connect(radioConstant, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - connect(radioSpecific, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - connect(radioValue, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); - } - } +void qActionsWidget::Initialization(){ + //mode + connect(comboScript, SIGNAL(currentIndexChanged(int)), this,SLOT(SetScript(int))); + //file + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + connect(btnBrowse, SIGNAL(clicked()), this, SLOT(BrowsePath())); + //parameter + connect(dispParameter, SIGNAL(textChanged(const QString&)), this, SLOT(SetParameter(const QString&))); } //------------------------------------------------------------------------------------------------------------------------------------------------- -void ActionsWidget::EnableSizeWidgets(){ - // defaults - lblFrom->hide(); - spinFrom->hide(); - lblTo->hide(); - spinTo->hide(); - lblSize->hide(); - spinSize->hide(); - comboSpecific->hide(); - dispValues->hide(); - btnValues->hide(); - lblSteps->setEnabled(true); - spinSteps->setEnabled(true); - // Constant Step Size - if(radioConstant->isChecked()){ - lblFrom->show(); - spinFrom->show(); - lblTo->show(); - spinTo->show(); - lblSize->show(); - spinSize->show(); - lblSteps->setEnabled(false); - spinSteps->setEnabled(false); - }// Specific Values - else if(radioSpecific->isChecked()) - comboSpecific->show(); - // Values from a File - else{ - dispValues->show(); - btnValues->show(); - } -} - - -//------------------------------------------------------------------------------------------------------------------------------------------------- - - -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)); - +void qActionsWidget::SetScript(int index){ #ifdef VERBOSE cout << "Setting mode of action widget:" << id << " to " << index << endl; #endif + //enabling/disabling + dispScript->setEnabled(index); + btnBrowse->setEnabled(index); + lblParameter->setEnabled(index); + dispParameter->setEnabled(index); + 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{ - + //set the mode + if(index) myDet->setActionScript(id,fName.toAscii().constData()); + else myDet->setActionScript(id,""); + //mode is not set when fname is blank + if(!fName.isEmpty()){ + //check if mode didnt get set + if(index!=myDet->getActionMode(id)){ + qDefs::WarningMessage("The mode could not be changed.","ActionsWidget"); + comboScript->setCurrentIndex(myDet->getActionMode(id)); + }//if mode got set and its custom script + else if(index){ + //when the file name did not get set correctly + if(fName.compare(QString(myDet->getActionScript(id).c_str()))){ + qDefs::WarningMessage("The file path could not be set.","ActionsWidget"); + dispScript->setText(QString(myDet->getActionScript(id).c_str())); + SetScriptFile(); + } + } } - - 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); + tr("Script Files(*.awk);;All Files(*)")); //if empty, set the file name and it calls setscriptfile, else ignore - if (!fName.isEmpty()) + if (!fName.isEmpty()){ dispScript->setText(fName); + SetScriptFile(); + } } //------------------------------------------------------------------------------------------------------------------------------------------------- -void ActionsWidget::SetScriptFile(){ - QString fName = dispScript->text();bool set = false; +void qActionsWidget::SetScriptFile(){ + QString fName = dispScript->text(); #ifdef VERBOSE cout << "Setting script file of action widget:" << id << " to " << fName.toAscii().constData() << endl; #endif disconnect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + bool set = false; + //blank - if(fName.isEmpty()) - set = true; + if(fName.isEmpty()) set = true; + else if(!fName.compare("none")) 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(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())); + dispScript->setText(QString(myDet->getActionScript(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())); + dispScript->setText(QString(myDet->getActionScript(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{ - + //scan and positions wouldnt get here + myDet->setActionScript(id,fName.toAscii().constData()); + if(fName.compare(QString(myDet->getActionScript(id).c_str()))){ + //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(id).c_str())); } } @@ -415,115 +174,33 @@ void ActionsWidget::SetScriptFile(){ //------------------------------------------------------------------------------------------------------------------------------------------------- -void ActionsWidget::SetParameter(const QString& parameter){ +void qActionsWidget::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(); - } + myDet->setActionParameter(id,parameter.toAscii().constData()); } //------------------------------------------------------------------------------------------------------------------------------------------------- -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&))); - } +void qActionsWidget::Refresh(){ + int mode = (myDet->getActionMode(id)>0?1:0); + string script = myDet->getActionScript(id); + string parameter = myDet->getActionParameter(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); #ifdef VERBOSE - cout << "Updated action widget " << id << "\tscript:" << script << "\tparameter:" << parameter << endl; + cout << "Updated action widget " << id << "\tmode:"<progressIndex; - progress=(int)data->progressIndex; - - if(!plotEnable) { - lastImageNumber= currentFrame+1; - currentFrame++; - return 0; - } - - /** Get data from client */ - /**1d*/ - if(plot_in_scope==1){ - /** Persistency */ - if(currentPersistency < persistency)currentPersistency++; - else currentPersistency=persistency; - for(int i=currentPersistency;i>0;i--) - memcpy(yvalues[i],yvalues[i-1],nPixelsX*sizeof(double)); - nHists = currentPersistency+1; - //memcpy(yvalues[0],data->values,nPixelsX*sizeof(double)); - for(int i=0;i<(int)nPixelsX;i++) *(yvalues[0]+i) = (double)*(data->values+i); - } - /**2d*/ - else{ - for(unsigned int px=0;px0;i--) - memcpy(histYAxis[i],histYAxis[i-1],nPixelsX*sizeof(double)); - memcpy(histYAxis[0],yvalues[0],nPixelsX*sizeof(double)); - } - /**2d*/ - else{ - sprintf(temp_title,"Image Number %d",currentFrame); imageTitle = temp_title; - memcpy(lastImageArray,image_data,nPixelsX*nPixelsY*sizeof(double)); - } - pthread_mutex_unlock(&(last_image_complete_mutex)); + /** Get data from client */ + /**1d*/ + if(plot_in_scope==1){ + /** Persistency */ + if(currentPersistency < persistency)currentPersistency++; + else currentPersistency=persistency; + for(int i=currentPersistency;i>0;i--) + memcpy(yvalues[i],yvalues[i-1],nPixelsX*sizeof(double)); + nHists = currentPersistency+1; + //memcpy(yvalues[0],data->values,nPixelsX*sizeof(double)); + for(int i=0;i<(int)nPixelsX;i++) *(yvalues[0]+i) = (double)*(data->values+i); } + /**2d*/ + else{ + for(unsigned int px=0;px0;i--) + memcpy(histYAxis[i],histYAxis[i-1],nPixelsX*sizeof(double)); + memcpy(histYAxis[0],yvalues[0],nPixelsX*sizeof(double)); + } + /**2d*/ + else{ + sprintf(temp_title,"Image Number %d",currentFrame); imageTitle = temp_title; + memcpy(lastImageArray,image_data,nPixelsX*nPixelsY*sizeof(double)); + } + pthread_mutex_unlock(&(last_image_complete_mutex)); + } + } + currentFrame++; + } + /** To make sure plotting locks parameters until it has plotted */ + if(frameFactor){ + if(currentFrame==number_of_exposures) plotLock = true; + else if(!((currentFrame-1)%frameFactor)) plotLock = true; } - currentFrame++; - } - /** To make sure plotting locks parameters until it has plotted */ - if(frameFactor){ - if(currentFrame==number_of_exposures) plotLock = true; - else if(!((currentFrame-1)%frameFactor)) plotLock = true; } #ifdef VERYVERBOSE cout<<"Exiting GetData function"< +#include + +// C++ Include Headers +#include +using namespace std; + + +//------------------------------------------------------------------------------------------------------------------------------------------------- +int qScanWidget::NUM_SCAN_WIDGETS(0); +//------------------------------------------------------------------------------------------------------------------------------------------------- + +qScanWidget::qScanWidget(QWidget *parent,multiSlsDetector*& detector): + QWidget(parent),myDet(detector){ + setupUi(this); + SetupWidgetWindow(); + Initialization(); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +qScanWidget::~qScanWidget(){ + delete myDet; + delete stackedLayout; +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::SetupWidgetWindow(){ + id = NUM_SCAN_WIDGETS; + NUM_SCAN_WIDGETS++; + + setFixedHeight(125); + + //layout for the size widgets + stackedLayout = new QStackedLayout; + stackedLayout->setSpacing(0); + + // Constant Size Layout + QWidget *constantWidget = new QWidget; + QHBoxLayout *layoutConstant = new QHBoxLayout(constantWidget); + layoutConstant->setContentsMargins(0, 0, 0, 0); + layoutConstant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + lblFrom = new QLabel("from",constantWidget); + lblFrom->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layoutConstant->addWidget(lblFrom); + spinFrom = new QSpinBox(constantWidget); + layoutConstant->addWidget(spinFrom); + lblTo = new QLabel("to",constantWidget); + lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layoutConstant->addWidget(lblTo); + spinTo = new QSpinBox(constantWidget); + layoutConstant->addWidget(spinTo); + layoutConstant->addItem(new QSpacerItem(20,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + lblSize = new QLabel("Size",constantWidget); + lblSize->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layoutConstant->addWidget(lblSize); + spinSize = new QSpinBox(constantWidget); + layoutConstant->addWidget(spinSize); + layoutConstant->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + // Specific Values Layout + QWidget *specificWidget = new QWidget; + QHBoxLayout *layoutSpecific = new QHBoxLayout(specificWidget); + layoutSpecific->setContentsMargins(0, 0, 0, 0); + layoutSpecific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + comboSpecific = new QComboBox(specificWidget); + comboSpecific->setEditable(true); + comboSpecific->setCompleter(false); + layoutSpecific->addWidget(comboSpecific); + layoutSpecific->addItem(new QSpacerItem(200,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + // Values From a File Layout + QWidget *valuesWidget = new QWidget; + QHBoxLayout *layoutValues = new QHBoxLayout(valuesWidget); + layoutValues->setContentsMargins(0, 0, 0, 0); + layoutValues->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + dispValues = new QLineEdit("steps.txt",valuesWidget); + dispValues->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); + layoutValues->addWidget(dispValues); + btnValues = new QPushButton("Browse",valuesWidget); + btnValues->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layoutValues->addWidget(btnValues); + layoutValues->addItem(new QSpacerItem(50,20,QSizePolicy::Fixed,QSizePolicy::Fixed)); + + + stackedLayout->addWidget(constantWidget); + stackedLayout->addWidget(specificWidget); + stackedLayout->addWidget(valuesWidget); + stackedWidget->setLayout(stackedLayout); + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::Initialization(){ + //mode + connect(comboScript, SIGNAL(currentIndexChanged(int)), this,SLOT(SetScript(int))); + //file + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + connect(btnBrowse, SIGNAL(clicked()), this, SLOT(BrowsePath())); + //parameter + connect(dispParameter, SIGNAL(textChanged(const QString&)), this, SLOT(SetParameter(const QString&))); + //sizewidgets + connect(radioConstant, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); + connect(radioSpecific, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); + connect(radioValue, SIGNAL(toggled(bool)),this,SLOT(EnableSizeWidgets())); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::EnableSizeWidgets(){ + if(radioConstant->isChecked()) + stackedLayout->setCurrentIndex(0); + else if(radioSpecific->isChecked()) + stackedLayout->setCurrentIndex(1); + else + stackedLayout->setCurrentIndex(2); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::SetScript(int index){ +#ifdef VERBOSE + cout << "Setting mode of scan widget:" << id << " to " << index << endl; +#endif + // defaults + dispScript->setEnabled(false); + btnBrowse->setEnabled(false); + lblParameter->setEnabled(false); + dispParameter->setEnabled(false); + 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(index==4){ + dispScript->setEnabled(true); + btnBrowse->setEnabled(true); + lblParameter->setEnabled(true); + dispParameter->setEnabled(true); + } + 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 in plot tab + emit EnableScanBox(index,id); + + + QString fName = dispScript->text(); + //set the mode + if(index) myDet->setActionScript(id,fName.toAscii().constData()); + else myDet->setActionScript(id,""); + //mode is not set when fname is blank + if(!fName.isEmpty()){ + //check if mode didnt get set + if(index!=myDet->getActionMode(id)){ + qDefs::WarningMessage("The mode could not be changed.","ScanWidget"); + comboScript->setCurrentIndex(myDet->getActionMode(id)); + }//if mode got set and its custom script + else if(index){ + //when the file name did not get set correctly + if(fName.compare(QString(myDet->getActionScript(id).c_str()))){ + qDefs::WarningMessage("The file path could not be set.","ScanWidget"); + dispScript->setText(QString(myDet->getActionScript(id).c_str())); + SetScriptFile(); + } + } + } + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qScanWidget::BrowsePath(){ +#ifdef VERBOSE + cout << "Browsing Script File Path" << endl; +#endif + QString fName = dispScript->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(*)")); + //if empty, set the file name and it calls setscriptfile, else ignore + if (!fName.isEmpty()){ + dispScript->setText(fName); + SetScriptFile(); + } +} + +//------------------------------------------------------------------------------------------------------------------------------------------------- + +void qScanWidget::SetScriptFile(){ + QString fName = dispScript->text();bool set = false; +#ifdef VERBOSE + cout << "Setting script file of scan widget:" << id << " to " << fName.toAscii().constData() << endl; +#endif + disconnect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + + //blank + if(fName.isEmpty()) set = true; + else if(!fName.compare("none")) 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","ScanWidget"); + dispScript->setText(QString(myDet->getActionScript(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","ScanWidget"); + dispScript->setText(QString(myDet->getActionScript(id).c_str())); + } + } + + //if blank or valid file + if(set){ + myDet->setActionScript(id,fName.toAscii().constData()); + if(fName.compare(QString(myDet->getActionScript(id).c_str()))){ + //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.","ScanWidget"); + dispScript->setText(QString(myDet->getActionScript(id).c_str())); + } + + } + + //dont display if theres a none + if(!dispScript->text().compare("none")) dispScript->setText(""); + + connect(dispScript, SIGNAL(editingFinished()), this, SLOT(SetScriptFile())); + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::SetParameter(const QString& parameter){ +#ifdef VERBOSE + cout << "Setting parameter of scan widget:" << id << " to " << parameter.toAscii().constData() << endl; +#endif + + myDet->setActionParameter(id,parameter.toAscii().constData()); + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qScanWidget::Refresh(){ + int mode = (myDet->getScanMode(id)>0?1:0); + string script = myDet->getScanScript(id); + string parameter = myDet->getScanParameter(id); + double precision = myDet->getScanPrecision(id); + + //defaults + if(script == "none") script=""; + if(parameter == "none") parameter=""; + //settings values + dispScript->setText(QString(script.c_str())); + dispParameter->setText(QString(parameter.c_str())); + spinPrecision->setValue(precision); + //set mode which also checks everything + comboScript->setCurrentIndex(mode); + + +#ifdef VERBOSE + cout << "Updated scan widget " << id << "\t" + "mode:"<setFixedSize(20,20); - lblName[i] = new QLabel(""); + btnExpand[i]->setFixedSize(20,20); group->addButton(btnExpand[i],i); + + //Number of positions is only for mythen or gotthard + slsDetectorDefs::detectorType detType = myDet->getDetectorsType(); + if((detType == slsDetectorDefs::EIGER) || (detType == slsDetectorDefs::AGIPD)) { + lblName[NumPositions]->setEnabled(false); + btnExpand[NumPositions]->setEnabled(false); + } + + //add the widgets to the layout , depending on the type create the widgets gridLayout->addWidget(btnExpand[i],(i*2),0); gridLayout->addWidget(lblName[i],(i*2),1); - gridLayout->addWidget(actionWidget[i],(i*2)+1,1,1,2); -/* gridLayout->addWidget(btnExpand[i],(i*2),i); - gridLayout->addWidget(lblName[i],(i*2),i+1); - gridLayout->addWidget(actionWidget[i],(i*2)+1,i+1,1,2);*/ - } + if(i==NumPositions){ + CreatePositionsWidget(); + gridLayout->addWidget(positionWidget,(i*2)+1,1,1,2); + positionWidget->hide(); + }else if((i==Scan0)||(i==Scan1)){ + scanWidget[qScanWidget::NUM_SCAN_WIDGETS] = new qScanWidget(this,myDet); + gridLayout->addWidget(scanWidget[qScanWidget::NUM_SCAN_WIDGETS-1],(i*2)+1,1,1,2); + scanWidget[qScanWidget::NUM_SCAN_WIDGETS-1]->hide(); + }else{ + actionWidget[qActionsWidget::NUM_ACTION_WIDGETS] = new qActionsWidget(this,myDet); + gridLayout->addWidget(actionWidget[qActionsWidget::NUM_ACTION_WIDGETS-1],(i*2)+1,1,1,2); + actionWidget[qActionsWidget::NUM_ACTION_WIDGETS-1]->hide(); + } + //gridLayout->addWidget(btnExpand[i],(i*2),i); + //gridLayout->addWidget(lblName[i],(i*2),i+1); + //gridLayout->addWidget(actionWidget[i],(i*2)+1,i+1,1,2); - // Label Values - 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); } } @@ -109,11 +114,75 @@ void qTabActions::SetupWidgetWindow(){ //------------------------------------------------------------------------------------------------------------------------------------------------- -void qTabActions::Initialization(){ - connect(group, SIGNAL(buttonClicked(QAbstractButton*)), this,SLOT(Expand(QAbstractButton*))); - 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))); +void qTabActions::CreatePositionsWidget(){ + positionWidget = new QWidget; + positionWidget->setFixedHeight(25); + QGridLayout *layout = new QGridLayout(positionWidget); + layout->setContentsMargins(0,0,0,0); + layout->setHorizontalSpacing(0); + layout->setVerticalSpacing(5); + + lblNumPos = new QLabel("Number of Positions:"); + lblNumPos->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layout->addWidget(lblNumPos,0,0); + layout->addItem(new QSpacerItem(5,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,1); + spinNumPos = new QSpinBox(this); + layout->addWidget(spinNumPos,0,2); + layout->addItem(new QSpacerItem(80,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,3); + lblPosList = new QLabel("List of Positions:"); + lblPosList->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + lblPosList->setEnabled(false); + lblPosList->setToolTip("Enter the positions at which the detector should be moved.
" + "Number of entries is restricted to Number of Positions field."); + layout->addWidget(lblPosList,0,4); + layout->addItem(new QSpacerItem(5,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,5); + comboPos = new QComboBox(this); + comboPos->setEditable(true); + comboPos->setCompleter(false); + normal = comboPos->palette(); + comboPos->setEnabled(false); + QDoubleValidator *validate = new QDoubleValidator(comboPos); + comboPos->setValidator(validate); + layout->addWidget(comboPos,0,6); + layout->addItem(new QSpacerItem(5,20,QSizePolicy::Fixed,QSizePolicy::Fixed),0,7); + btnDelete = new QPushButton("Delete"); + btnDelete->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); + layout->addWidget(btnDelete,0,8); + + //might be included at some point +/* QGroupBox *w = new QGroupBox; + layout->addWidget(w,1,0,1,9); + 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)); + w->setLayout(l1);*/ + + positionWidget->setLayout(layout); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabActions::Initialization(){ + //expand + connect(group, SIGNAL(buttonClicked(QAbstractButton*)), this,SLOT(Expand(QAbstractButton*))); + //enable scan box in plot tab + for(int i=0;itext(), "-")){ palette->setColor(QPalette::WindowText,Qt::black); lblName[index]->setPalette(*palette); - actionWidget[index]->hide(); button->setText("+"); - if((index==ActionsWidget::Scan0)||(index==ActionsWidget::Scan1)){ + + if(index==NumPositions) { + positionWidget->hide(); + setFixedHeight(height()-30);//-80 if the checkboxes are included + } + else if((index==Scan0)||(index==Scan1)) { + scanWidget[GetActualIndex(index)]->hide(); setFixedHeight(height()-130); } - else if(index==ActionsWidget::NumPositions) - setFixedHeight(height()-80); - else + else { + actionWidget[GetActualIndex(index)]->hide(); setFixedHeight(height()-30); + } }else{ // Expand palette->setColor(QPalette::WindowText,QColor(0,0,200,255)); lblName[index]->setPalette(*palette); - actionWidget[index]->show(); button->setText("-"); - if((index==ActionsWidget::Scan0)||(index==ActionsWidget::Scan1)){ + if(index==NumPositions){ + positionWidget->show(); + setFixedHeight(height()+30);//+80 if the checkboxes are included + } + else if((index==Scan0)||(index==Scan1)){ + scanWidget[GetActualIndex(index)]->show(); setFixedHeight(height()+130); } - else if(index==ActionsWidget::NumPositions) - setFixedHeight(height()+80); - else + else{ + actionWidget[GetActualIndex(index)]->show(); setFixedHeight(height()+30); + } + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabActions::SetPosition(){ +#ifdef VERBOSE + cout << "Entering SetPosition\tnum Pos:" << spinNumPos->value() << "\tlist count:" << comboPos->count() << endl; +#endif + //get number of positions + int numPos = spinNumPos->value(); + comboPos->setMaxCount(numPos); + comboPos->setEnabled(numPos); + lblPosList->setEnabled(numPos); + + //deleting too many or not entering enough + if(numPos>comboPos->count()){ + + QPalette red = QPalette(); + red.setColor(QPalette::Active,QPalette::WindowText,Qt::red); + lblPosList->setPalette(red); + QString tip = QString("Enter the positions at which the detector should be moved.
" + "Number of entries is restricted to Number of Positions field.

")+ + QString("Add ")+ + (QString("%1").arg(((numPos)-(comboPos->count()))))+ + QString(" more positions to the list to match Number of Positions."); + lblPosList->setToolTip(tip); + lblPosList->setText("List of Positions:*"); + }else{ + lblPosList->setText("List of Positions:"); + lblPosList->setPalette(normal); + lblPosList->setToolTip("Enter the positions at which the detector should be moved.
" + "Number of entries is restricted to Number of Positions field."); + //delete existing positions + if (positions) delete [] positions; + positions=new float[numPos]; + //copying the list + for(int i=0;iitemText(i).toDouble(); + //setting the list and catching error + if(myDet->setPositions(numPos,positions)!=numPos) + qDefs::WarningMessage("The positions list was not set for some reason.","Actions"); + } + +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabActions::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; + } + } + if(found){ +#ifdef VERBOSE + cout << "Deleting Position " << endl; +#endif } } @@ -157,12 +302,64 @@ void qTabActions::Expand(QAbstractButton *button ){ void qTabActions::Refresh(){ #ifdef VERBOSE - cout << "Updating action widgets " << endl; + cout << "Updating all action widgets " << endl; #endif - for(int i=0;iisEnabled()){ + //delete existing positions + if (positions) delete [] positions; + //get number of positions + int numPos=myDet->getPositions(); + comboPos->setMaxCount(numPos); + + //set the number of positions in the gui + disconnect(spinNumPos, SIGNAL(valueChanged(int)), this, SLOT(SetPosition())); + spinNumPos->setValue(numPos); + connect(spinNumPos, SIGNAL(valueChanged(int)), this, SLOT(SetPosition())); + + positions=new float[numPos]; + //load the positions + myDet->getPositions(positions); + + //delete the combolist and reload it + disconnect(comboPos,SIGNAL(currentIndexChanged(int)), this, SLOT(SetPosition())); + comboPos->setEnabled(numPos); + lblPosList->setEnabled(numPos); + lblPosList->setText("List of Positions:"); + lblPosList->setPalette(normal); + for(int i=0;icount();i++) + comboPos->removeItem(i); + for(int i=0;iinsertItem(i,QString("%1").arg(positions[i])); + connect(comboPos, SIGNAL(currentIndexChanged(int)), this, SLOT(SetPosition())); + + +#ifdef VERBOSE + cout << "Updated position widget\tnum:" << numPos << endl; +#endif + } + for(int i=0;iRefresh(); + for(int i=0;iRefresh(); } //------------------------------------------------------------------------------------------------------------------------------------------------- + +int qTabActions::GetActualIndex(int index){ + switch(index){ + case 0: return slsDetectorDefs::startScript; + case Scan0: return 0; + case Scan1: return 1; + case 3: return slsDetectorDefs::scriptBefore; + case 5: return slsDetectorDefs::headerBefore; + case 6: return slsDetectorDefs::headerAfter; + case 7: return slsDetectorDefs::scriptAfter; + case 8: return slsDetectorDefs::stopScript; + default: return -1; + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index 5b6b6a172..ae835b4fb 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -639,8 +639,8 @@ void qTabMeasurement::setTimingMode(int mode){ // to let qdrawplot know that triggers or frames are used - myPlot->setFrameEnabled(lblNumTriggers->isEnabled()); - myPlot->setTriggerEnabled(lblNumFrames->isEnabled()); + myPlot->setFrameEnabled(lblNumFrames->isEnabled()); + myPlot->setTriggerEnabled(lblNumTriggers->isEnabled()); return; } @@ -660,8 +660,8 @@ void qTabMeasurement::Refresh(){ SetupTimingMode(); // to let qdrawplot know that triggers or frames are used - myPlot->setFrameEnabled(lblNumTriggers->isEnabled()); - myPlot->setTriggerEnabled(lblNumFrames->isEnabled()); + myPlot->setFrameEnabled(lblNumFrames->isEnabled()); + myPlot->setTriggerEnabled(lblNumTriggers->isEnabled()); } diff --git a/slsDetectorGui/src/qTabPlot.cpp b/slsDetectorGui/src/qTabPlot.cpp index 43312db8a..cf6f800c5 100644 --- a/slsDetectorGui/src/qTabPlot.cpp +++ b/slsDetectorGui/src/qTabPlot.cpp @@ -86,7 +86,7 @@ void qTabPlot::SetupWidgetWindow(){ spinTimeGap->setMinimum(0); spinTimeGap->setDecimals(3); spinTimeGap->setMaximum(999999); - spinTimeGap->setValue(500.00); + spinTimeGap->setValue(myPlot->GetMinimumPlotTimer()); comboTimeGapUnit = new QComboBox; comboTimeGapUnit->addItem("hr"); comboTimeGapUnit->addItem("min"); @@ -362,8 +362,8 @@ void qTabPlot::SetPlot(){ if(radioNoPlot->isChecked()){ myPlot->EnablePlot(false); /**if enable is true, disable everything */ - box1D->hide(); - box2D->hide(); + if(isOneD) {box1D->show(); box1D->setEnabled(false); box2D->hide();} + if(!isOneD){box2D->show(); box2D->setEnabled(false); box1D->hide();} boxSnapshot->setEnabled(false); boxSave->setEnabled(false); boxFrequency->setEnabled(false); @@ -372,8 +372,8 @@ void qTabPlot::SetPlot(){ }else { myPlot->EnablePlot(true); /**if enable is true, disable everything */ - if(isOneD) box1D->show(); else box1D->hide(); - if(!isOneD) box2D->show(); else box2D->hide(); + if(isOneD) {box1D->show();box1D->setEnabled(true);} else box1D->hide(); + if(!isOneD){box2D->show();box2D->setEnabled(true);} else box2D->hide(); boxSnapshot->setEnabled(true); boxSave->setEnabled(true); boxFrequency->setEnabled(true); @@ -428,7 +428,7 @@ void qTabPlot::SetFrequency(){ if(timeMSPlot Tab: Interval between Plots - The nth Image must be larger.

" - "Condition to be satisfied:\n(Acquisition Period)*(nth Image) >= 500ms." + "Condition to be satisfied:\n(Acquisition Period)*(nth Image) >= 250ms." "

Nth image adjusted to minimum, " "for the chosen Acquisition Period.","Plot"); spinNthFrame->setValue(minFrame);