bug fixed: constant scan widget: use red label to indicate wrong to, numsteps neednt be an integer

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@72 af1100a4-978c-4157-bff7-07162d2ba061
This commit is contained in:
l_maliakal_d 2012-09-25 12:52:49 +00:00
parent d56780d906
commit 4143c648d8
2 changed files with 84 additions and 33 deletions

View File

@ -130,6 +130,10 @@ int RangeCheckSizeZero();
* */ * */
int RangeCheckNumValid(int &num); int RangeCheckNumValid(int &num);
/**returns fail if to is not exact
* */
int RangeCheckToValid();
/** Sets number of steps if from changed /** Sets number of steps if from changed
* */ * */
void RangeFromChanged(); void RangeFromChanged();

View File

@ -95,6 +95,7 @@ void qScanWidget::SetupWidgetWindow(){
spinFrom->setDecimals(4); spinFrom->setDecimals(4);
lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); lblTo->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
lblTo->setToolTip(rangeTip); lblTo->setToolTip(rangeTip);
lblTo->setFixedWidth(18);
spinTo->setValue(1); spinTo->setValue(1);
spinTo->setToolTip(rangeTip); spinTo->setToolTip(rangeTip);
spinTo->setMaximum(1000000); spinTo->setMaximum(1000000);
@ -227,11 +228,13 @@ void qScanWidget::EnableSizeWidgets(){
radioFile->setToolTip(fileTip); radioFile->setToolTip(fileTip);
dispFile->setToolTip(fileTip); dispFile->setToolTip(fileTip);
btnFile->setToolTip(fileTip); btnFile->setToolTip(fileTip);
lblTo->setPalette(normal);
lblTo->setText("to");
lblTo->setToolTip(rangeTip);
spinTo->setToolTip(rangeTip);
} }
else{ else{
// Steps are enabled for all except Range step size
/**lblSteps->setEnabled(!radioRange->isChecked());
spinSteps->setEnabled(!radioRange->isChecked());*/
//range values //range values
if(radioRange->isChecked()){ if(radioRange->isChecked()){
#ifdef VERBOSE #ifdef VERBOSE
@ -257,6 +260,7 @@ void qScanWidget::EnableSizeWidgets(){
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
spinSteps->setMinimum(2); spinSteps->setMinimum(2);
RangeCheckToValid();
SetRangeSteps(); SetRangeSteps();
} }
//custom values //custom values
@ -272,6 +276,11 @@ void qScanWidget::EnableSizeWidgets(){
dispFile->setToolTip(fileTip); dispFile->setToolTip(fileTip);
btnFile->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. //change it back as this list is what will be loaded.
//also numstpes could have been changed in other modes too //also numstpes could have been changed in other modes too
disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
@ -304,6 +313,11 @@ void qScanWidget::EnableSizeWidgets(){
radioCustom->setToolTip(customTip); radioCustom->setToolTip(customTip);
comboCustom->setToolTip(customTip); comboCustom->setToolTip(customTip);
lblTo->setPalette(normal);
lblTo->setText("to");
lblTo->setToolTip(rangeTip);
spinTo->setToolTip(rangeTip);
stackedLayout->setCurrentIndex(FileValues); stackedLayout->setCurrentIndex(FileValues);
SetFileSteps(); SetFileSteps();
} }
@ -335,9 +349,6 @@ void qScanWidget::SetMode(int mode){
// If anything other than None is selected // If anything other than None is selected
if(mode){ if(mode){
// Steps are enabled for all except Range step size
/**lblSteps->setEnabled(!radioRange->isChecked());
spinSteps->setEnabled(!radioRange->isChecked());*/
lblSteps->setEnabled(true); lblSteps->setEnabled(true);
spinSteps->setEnabled(true); spinSteps->setEnabled(true);
// Custom Script only enables the first layout with addnl parameters etc // 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())); disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
spinSize->setValue( (spinTo->value()-spinFrom->value()) / (spinSteps->value()-1)); spinSize->setValue( (spinTo->value()-spinFrom->value()) / (spinSteps->value()-1));
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged())); connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
RangeCheckToValid();
SetRangeSteps(); SetRangeSteps();
}else if(radioCustom->isChecked()){ }else if(radioCustom->isChecked()){
comboCustom->setMaxCount(spinSteps->value()); comboCustom->setMaxCount(spinSteps->value());
@ -586,13 +597,11 @@ int qScanWidget::RangeCheckNumValid(int &num){
cout << "Entering RangeCheckNumValid()" << endl; cout << "Entering RangeCheckNumValid()" << endl;
#endif #endif
double div = abs(spinTo->value()-spinFrom->value())/(abs(spinSize->value())); double div = abs(spinTo->value()-spinFrom->value())/(abs(spinSize->value()));
cout<<"div:"<<div<<endl;
//num = (to-from)/size +1 , so (to-from)/size should be an integer and >=1 //num = (to-from)/size +1
if((floor(div)==div) && (div>0)){
num = (int)(div) + 1; num = (int)(div) + 1;
return qDefs::OK;
} if(num>=2) return qDefs::OK;
return qDefs::FAIL; 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("<br><br><font color=\"red\"><nobr>"
"<b>To</b> is not exact. Entering <b>Size</b> should recalculate <b>To</b>.</nobr></font>");
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(){ void qScanWidget::RangeFromChanged(){
#ifdef VERYVERBOSE #ifdef VERYVERBOSE
cout << "Entering RangeFromChanged()" << endl; cout << "Entering RangeFromChanged()" << endl;
@ -618,7 +655,8 @@ void qScanWidget::RangeFromChanged(){
qDefs::Message(qDefs::WARNING,"<nobr><b>From</b> cannot be equal to <b>To</b>. Changing <b>From</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>From</b> cannot be equal to <b>To</b>. Changing <b>From</b> back to previous value.</nobr>","Scan");
//check size validity //check size validity
else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) else if(RangeCheckNumValid(numSteps)==qDefs::FAIL)
qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> must be >= 2. Changing <b>From</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> = 1 + (<b> To </b> - <b> From </b>) / <b>Size</b>.</nobr><br>"
"<b>Number of Steps</b> must be >= 2. Changing <b>From</b> back to previous value.</nobr>","Scan");
else change = true; else change = true;
//change it back from = to - size*num + size //change it back from = to - size*num + size
@ -640,6 +678,7 @@ void qScanWidget::RangeFromChanged(){
spinSize->setValue(-1*(spinSize->value())); spinSize->setValue(-1*(spinSize->value()));
} }
RangeCheckToValid();
SetRangeSteps(); SetRangeSteps();
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
@ -667,7 +706,8 @@ void qScanWidget::RangeToChanged(){
qDefs::Message(qDefs::WARNING,"<nobr><b>From</b> cannot be equal to <b>To</b>. Changing <b>To</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>From</b> cannot be equal to <b>To</b>. Changing <b>To</b> back to previous value.</nobr>","Scan");
//check size validity //check size validity
else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) else if(RangeCheckNumValid(numSteps)==qDefs::FAIL)
qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> must be >= 2. Changing <b>To</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> = 1 + (<b> To </b> - <b> From </b>) / <b>Size</b>.</nobr><br>"
"<b>Number of Steps</b> must be >= 2. Changing <b>To</b> back to previous value.</nobr>","Scan");
else change = true; else change = true;
//change it back to = size*num - size + from //change it back to = size*num - size + from
@ -690,6 +730,7 @@ void qScanWidget::RangeToChanged(){
} }
RangeCheckToValid();
SetRangeSteps(); SetRangeSteps();
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
@ -717,7 +758,8 @@ void qScanWidget::RangeSizeChanged(){
qDefs::Message(qDefs::WARNING,"<nobr><b>Size</b> cannot be 0. Changing <b>Size</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>Size</b> cannot be 0. Changing <b>Size</b> back to previous value.</nobr>","Scan");
//check size validity //check size validity
else if(RangeCheckNumValid(numSteps)==qDefs::FAIL) else if(RangeCheckNumValid(numSteps)==qDefs::FAIL)
qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> must be >= 2. Changing <b>To</b> back to previous value.</nobr>","Scan"); qDefs::Message(qDefs::WARNING,"<nobr><b>Number of Steps</b> = 1 + (<b> To </b> - <b> From </b>) / <b>Size</b>.</nobr><br>"
"<b>Number of Steps</b> must be >= 2. Changing <b>Size</b> back to previous value.</nobr>","Scan");
else change = true; else change = true;
//change it back size = (to-from)/(num-1) //change it back size = (to-from)/(num-1)
@ -732,8 +774,13 @@ void qScanWidget::RangeSizeChanged(){
spinSteps->setValue(numSteps); spinSteps->setValue(numSteps);
//in case size changed to negative //in case size changed to negative
spinTo->setValue((spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value()); spinTo->setValue((spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value());
lblTo->setPalette(normal);
lblTo->setText("to");
lblTo->setToolTip(rangeTip);
spinTo->setToolTip(rangeTip);
} }
RangeCheckToValid();
SetRangeSteps(); SetRangeSteps();
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps())); connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));