diff --git a/slsDetectorGui/include/qScanWidget.h b/slsDetectorGui/include/qScanWidget.h index 24e820c14..bcbaba50e 100644 --- a/slsDetectorGui/include/qScanWidget.h +++ b/slsDetectorGui/include/qScanWidget.h @@ -130,6 +130,10 @@ int RangeCheckSizeZero(); * */ int RangeCheckNumValid(int &num); +/**returns fail if to is not exact + * */ +int RangeCheckToValid(); + /** Sets number of steps if from changed * */ void RangeFromChanged(); diff --git a/slsDetectorGui/src/qScanWidget.cpp b/slsDetectorGui/src/qScanWidget.cpp index 3b748a364..5669e9f7d 100644 --- a/slsDetectorGui/src/qScanWidget.cpp +++ b/slsDetectorGui/src/qScanWidget.cpp @@ -95,6 +95,7 @@ void qScanWidget::SetupWidgetWindow(){ spinFrom->setDecimals(4); lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblTo->setToolTip(rangeTip); + lblTo->setFixedWidth(18); spinTo->setValue(1); spinTo->setToolTip(rangeTip); spinTo->setMaximum(1000000); @@ -227,37 +228,40 @@ void qScanWidget::EnableSizeWidgets(){ radioFile->setToolTip(fileTip); dispFile->setToolTip(fileTip); btnFile->setToolTip(fileTip); + + lblTo->setPalette(normal); + lblTo->setText("to"); + lblTo->setToolTip(rangeTip); + spinTo->setToolTip(rangeTip); } else{ - // Steps are enabled for all except Range step size - /**lblSteps->setEnabled(!radioRange->isChecked()); - spinSteps->setEnabled(!radioRange->isChecked());*/ //range values if(radioRange->isChecked()){ #ifdef VERBOSE - cout << "Constant Range Values" << endl; + cout << "Constant Range Values" << endl; #endif - radioCustom->setText("Specific Values"); - radioCustom->setPalette(normal); - radioCustom->setToolTip(customTip); - comboCustom->setToolTip(customTip); + radioCustom->setText("Specific Values"); + radioCustom->setPalette(normal); + radioCustom->setToolTip(customTip); + comboCustom->setToolTip(customTip); - radioFile->setPalette(normal); - radioFile->setText("Values from File:"); - radioFile->setToolTip(fileTip); - dispFile->setToolTip(fileTip); - btnFile->setToolTip(fileTip); + radioFile->setPalette(normal); + radioFile->setText("Values from File:"); + radioFile->setToolTip(fileTip); + dispFile->setToolTip(fileTip); + btnFile->setToolTip(fileTip); - stackedLayout->setCurrentIndex(RangeValues); + stackedLayout->setCurrentIndex(RangeValues); - //recaluculate number of steps - disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); - spinSteps->setValue(1+(int)(abs((spinTo->value() - spinFrom->value()) / spinSize->value()))); - connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); + //recaluculate number of steps + disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); + spinSteps->setValue(1+(int)(abs((spinTo->value() - spinFrom->value()) / spinSize->value()))); + connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); - spinSteps->setMinimum(2); - SetRangeSteps(); + spinSteps->setMinimum(2); + RangeCheckToValid(); + SetRangeSteps(); } //custom values else if(radioCustom->isChecked()){ @@ -272,6 +276,11 @@ void qScanWidget::EnableSizeWidgets(){ dispFile->setToolTip(fileTip); btnFile->setToolTip(fileTip); + lblTo->setPalette(normal); + lblTo->setText("to"); + lblTo->setToolTip(rangeTip); + spinTo->setToolTip(rangeTip); + //change it back as this list is what will be loaded. //also numstpes could have been changed in other modes too disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); @@ -304,6 +313,11 @@ void qScanWidget::EnableSizeWidgets(){ radioCustom->setToolTip(customTip); comboCustom->setToolTip(customTip); + lblTo->setPalette(normal); + lblTo->setText("to"); + lblTo->setToolTip(rangeTip); + spinTo->setToolTip(rangeTip); + stackedLayout->setCurrentIndex(FileValues); SetFileSteps(); } @@ -335,9 +349,6 @@ void qScanWidget::SetMode(int mode){ // If anything other than None is selected if(mode){ - // Steps are enabled for all except Range step size - /**lblSteps->setEnabled(!radioRange->isChecked()); - spinSteps->setEnabled(!radioRange->isChecked());*/ lblSteps->setEnabled(true); spinSteps->setEnabled(true); // Custom Script only enables the first layout with addnl parameters etc @@ -552,7 +563,7 @@ void qScanWidget::SetNSteps(){ disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged())); spinSize->setValue( (spinTo->value()-spinFrom->value()) / (spinSteps->value()-1)); connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged())); - + RangeCheckToValid(); SetRangeSteps(); }else if(radioCustom->isChecked()){ comboCustom->setMaxCount(spinSteps->value()); @@ -586,13 +597,11 @@ int qScanWidget::RangeCheckNumValid(int &num){ cout << "Entering RangeCheckNumValid()" << endl; #endif double div = abs(spinTo->value()-spinFrom->value())/(abs(spinSize->value())); - cout<<"div:"<=1 - if((floor(div)==div) && (div>0)){ - num = (int)(div) + 1; - return qDefs::OK; - } + //num = (to-from)/size +1 + num = (int)(div) + 1; + + if(num>=2) return qDefs::OK; return qDefs::FAIL; } @@ -601,6 +610,34 @@ int qScanWidget::RangeCheckNumValid(int &num){ //------------------------------------------------------------------------------------------------------------------------------------------------- +int qScanWidget::RangeCheckToValid(){ +#ifdef VERYVERBOSE + cout << "Entering RangeCheckToValid()" << endl; +#endif + double to = (spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value(); + + //not exact value + if (abs(to-spinTo->value())>0.01){ + lblTo->setPalette(red); + lblTo->setText("to*"); + QString tip = rangeTip + QString("

" + "To is not exact. Entering Size should recalculate To."); + lblTo->setToolTip(tip); + spinTo->setToolTip(tip); + return qDefs::FAIL; + } + + lblTo->setPalette(normal); + lblTo->setText("to"); + lblTo->setToolTip(rangeTip); + spinTo->setToolTip(rangeTip); + return qDefs::OK; +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + void qScanWidget::RangeFromChanged(){ #ifdef VERYVERBOSE cout << "Entering RangeFromChanged()" << endl; @@ -618,7 +655,8 @@ void qScanWidget::RangeFromChanged(){ qDefs::Message(qDefs::WARNING,"From cannot be equal to To. Changing From back to previous value.","Scan"); //check size validity else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) - qDefs::Message(qDefs::WARNING,"Number of Steps must be >= 2. Changing From back to previous value.","Scan"); + qDefs::Message(qDefs::WARNING,"Number of Steps = 1 + ( To - From ) / Size.
" + "Number of Steps must be >= 2. Changing From back to previous value.","Scan"); else change = true; //change it back from = to - size*num + size @@ -640,6 +678,7 @@ void qScanWidget::RangeFromChanged(){ spinSize->setValue(-1*(spinSize->value())); } + RangeCheckToValid(); SetRangeSteps(); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); @@ -667,7 +706,8 @@ void qScanWidget::RangeToChanged(){ qDefs::Message(qDefs::WARNING,"From cannot be equal to To. Changing To back to previous value.","Scan"); //check size validity else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) - qDefs::Message(qDefs::WARNING,"Number of Steps must be >= 2. Changing To back to previous value.","Scan"); + qDefs::Message(qDefs::WARNING,"Number of Steps = 1 + ( To - From ) / Size.
" + "Number of Steps must be >= 2. Changing To back to previous value.","Scan"); else change = true; //change it back to = size*num - size + from @@ -690,6 +730,7 @@ void qScanWidget::RangeToChanged(){ } + RangeCheckToValid(); SetRangeSteps(); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); @@ -717,7 +758,8 @@ void qScanWidget::RangeSizeChanged(){ qDefs::Message(qDefs::WARNING,"Size cannot be 0. Changing Size back to previous value.","Scan"); //check size validity else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) - qDefs::Message(qDefs::WARNING,"Number of Steps must be >= 2. Changing To back to previous value.","Scan"); + qDefs::Message(qDefs::WARNING,"Number of Steps = 1 + ( To - From ) / Size.
" + "Number of Steps must be >= 2. Changing Size back to previous value.","Scan"); else change = true; //change it back size = (to-from)/(num-1) @@ -732,8 +774,13 @@ void qScanWidget::RangeSizeChanged(){ spinSteps->setValue(numSteps); //in case size changed to negative spinTo->setValue((spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value()); + lblTo->setPalette(normal); + lblTo->setText("to"); + lblTo->setToolTip(rangeTip); + spinTo->setToolTip(rangeTip); } + RangeCheckToValid(); SetRangeSteps(); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));