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);