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);
/**returns fail if to is not exact
* */
int RangeCheckToValid();
/** Sets number of steps if from changed
* */
void RangeFromChanged();

View File

@ -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:"<<div<<endl;
//num = (to-from)/size +1 , so (to-from)/size should be an integer and >=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("<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(){
#ifdef VERYVERBOSE
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");
//check size validity
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;
//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,"<nobr><b>From</b> cannot be equal to <b>To</b>. Changing <b>To</b> back to previous value.</nobr>","Scan");
//check size validity
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;
//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,"<nobr><b>Size</b> cannot be 0. Changing <b>Size</b> back to previous value.</nobr>","Scan");
//check size validity
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;
//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()));