mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-25 15:50:03 +02:00
fixed constant scan widget problem
git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@69 af1100a4-978c-4157-bff7-07162d2ba061
This commit is contained in:
parent
a79c5c6183
commit
bf8a1ec0d2
@ -121,19 +121,42 @@ void SetPrecision(int value);
|
|||||||
* */
|
* */
|
||||||
void SetNSteps();
|
void SetNSteps();
|
||||||
|
|
||||||
/** Range type: If size is changed,
|
/**Checks if size is zero and return FAIL if it does
|
||||||
* the Number of steps is calculated
|
|
||||||
* */
|
* */
|
||||||
void RangeCalculateNumSteps();
|
int RangeCheckSizeZero();
|
||||||
|
|
||||||
/** Range type: If size is changed, the To is calculated
|
/**returns ok and number of steps if valid
|
||||||
|
* @param number of steps
|
||||||
* */
|
* */
|
||||||
void RangeCalculateTo();
|
int RangeCheckNumValid(int &num);
|
||||||
|
|
||||||
|
/** Sets number of steps if from changed
|
||||||
|
* */
|
||||||
|
void RangeFromChanged();
|
||||||
|
|
||||||
|
/** Sets number of steps if to changed
|
||||||
|
* */
|
||||||
|
void RangeToChanged();
|
||||||
|
|
||||||
|
/** Sets s of steps if size changed
|
||||||
|
* */
|
||||||
|
void RangeSizeChanged();
|
||||||
|
|
||||||
/** Set range for scan
|
/** Set range for scan
|
||||||
* */
|
* */
|
||||||
void SetRangeSteps();
|
void SetRangeSteps();
|
||||||
|
|
||||||
|
|
||||||
|
/** Range type: If size is changed,
|
||||||
|
* the Number of steps is calculated
|
||||||
|
* */
|
||||||
|
//void RangeCalculateNumSteps();
|
||||||
|
|
||||||
|
/** Range type: If size is changed, the To is calculated
|
||||||
|
* */
|
||||||
|
//void RangeCalculateTo();
|
||||||
|
|
||||||
|
|
||||||
/** Set custom steps
|
/** Set custom steps
|
||||||
* returns OK if set properly
|
* returns OK if set properly
|
||||||
* */
|
* */
|
||||||
|
@ -89,6 +89,7 @@ void qScanWidget::SetupWidgetWindow(){
|
|||||||
spinFrom->setValue(0);
|
spinFrom->setValue(0);
|
||||||
spinFrom->setToolTip(rangeTip);
|
spinFrom->setToolTip(rangeTip);
|
||||||
spinFrom->setMaximum(1000000);
|
spinFrom->setMaximum(1000000);
|
||||||
|
spinFrom->setMinimum(-1000000);
|
||||||
spinFrom->setKeyboardTracking(false);
|
spinFrom->setKeyboardTracking(false);
|
||||||
spinFrom->setFixedWidth(80);
|
spinFrom->setFixedWidth(80);
|
||||||
spinFrom->setDecimals(4);
|
spinFrom->setDecimals(4);
|
||||||
@ -97,6 +98,7 @@ void qScanWidget::SetupWidgetWindow(){
|
|||||||
spinTo->setValue(1);
|
spinTo->setValue(1);
|
||||||
spinTo->setToolTip(rangeTip);
|
spinTo->setToolTip(rangeTip);
|
||||||
spinTo->setMaximum(1000000);
|
spinTo->setMaximum(1000000);
|
||||||
|
spinTo->setMinimum(-1000000);
|
||||||
spinTo->setKeyboardTracking(false);
|
spinTo->setKeyboardTracking(false);
|
||||||
spinTo->setFixedWidth(80);
|
spinTo->setFixedWidth(80);
|
||||||
spinTo->setDecimals(4);
|
spinTo->setDecimals(4);
|
||||||
@ -104,12 +106,15 @@ void qScanWidget::SetupWidgetWindow(){
|
|||||||
lblSize->setToolTip(rangeTip);
|
lblSize->setToolTip(rangeTip);
|
||||||
lblSize->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
|
lblSize->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
|
||||||
lblSize->setFixedWidth(67);
|
lblSize->setFixedWidth(67);
|
||||||
|
spinSize->setMaximum(1000000);
|
||||||
|
spinSize->setMinimum(-1000000);
|
||||||
spinSize->setValue(1);
|
spinSize->setValue(1);
|
||||||
spinSize->setSingleStep(0.1);
|
spinSize->setSingleStep(0.1);
|
||||||
spinSize->setToolTip(rangeTip);
|
spinSize->setToolTip(rangeTip);
|
||||||
spinSize->setKeyboardTracking(false);
|
spinSize->setKeyboardTracking(false);
|
||||||
spinSize->setDecimals(4);
|
spinSize->setDecimals(4);
|
||||||
spinSize->setMinimum(0.0001);
|
|
||||||
|
//spinSize->setMinimum(0.0001);
|
||||||
layoutRange->addItem(new QSpacerItem(40,20,QSizePolicy::Fixed,QSizePolicy::Fixed));
|
layoutRange->addItem(new QSpacerItem(40,20,QSizePolicy::Fixed,QSizePolicy::Fixed));
|
||||||
layoutRange->addWidget(lblFrom);
|
layoutRange->addWidget(lblFrom);
|
||||||
layoutRange->addItem(new QSpacerItem(5,20,QSizePolicy::Fixed,QSizePolicy::Fixed));
|
layoutRange->addItem(new QSpacerItem(5,20,QSizePolicy::Fixed,QSizePolicy::Fixed));
|
||||||
@ -188,9 +193,9 @@ void qScanWidget::Initialization(){
|
|||||||
//precision
|
//precision
|
||||||
connect(spinPrecision, SIGNAL(valueChanged(int)), this, SLOT(SetPrecision(int)));
|
connect(spinPrecision, SIGNAL(valueChanged(int)), this, SLOT(SetPrecision(int)));
|
||||||
//range values
|
//range values
|
||||||
connect(spinFrom, SIGNAL(valueChanged(double)), this, SLOT(RangeCalculateNumSteps()));
|
connect(spinFrom, SIGNAL(valueChanged(double)), this, SLOT(RangeFromChanged()));
|
||||||
connect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeCalculateNumSteps()));
|
connect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeToChanged()));
|
||||||
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeCalculateTo()));
|
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
//custom values
|
//custom values
|
||||||
connect(comboCustom, SIGNAL(currentIndexChanged(int)), this, SLOT(SetCustomSteps()));
|
connect(comboCustom, SIGNAL(currentIndexChanged(int)), this, SLOT(SetCustomSteps()));
|
||||||
connect(btnCustom, SIGNAL(clicked()), this, SLOT(DeleteCustomSteps()));
|
connect(btnCustom, SIGNAL(clicked()), this, SLOT(DeleteCustomSteps()));
|
||||||
@ -246,11 +251,13 @@ void qScanWidget::EnableSizeWidgets(){
|
|||||||
|
|
||||||
stackedLayout->setCurrentIndex(RangeValues);
|
stackedLayout->setCurrentIndex(RangeValues);
|
||||||
|
|
||||||
int oldNumSteps = spinSteps->value();
|
//recaluculate number of steps
|
||||||
//if the steps change, it calls SetRangeSteps on its own.
|
disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
RangeCalculateNumSteps();
|
spinSteps->setValue(1+(int)(abs((spinTo->value() - spinFrom->value()) / spinSize->value())));
|
||||||
if(oldNumSteps==spinSteps->value()) SetRangeSteps();
|
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
|
||||||
spinSteps->setMinimum(2);
|
spinSteps->setMinimum(2);
|
||||||
|
SetRangeSteps();
|
||||||
}
|
}
|
||||||
//custom values
|
//custom values
|
||||||
else if(radioCustom->isChecked()){
|
else if(radioCustom->isChecked()){
|
||||||
@ -542,12 +549,11 @@ void qScanWidget::SetNSteps(){
|
|||||||
|
|
||||||
//check if its ok
|
//check if its ok
|
||||||
if(radioRange->isChecked()){
|
if(radioRange->isChecked()){
|
||||||
double oldSize = spinSize->value();
|
disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
//calculate size = (to - from)/(num-1)
|
spinSize->setValue( (spinTo->value()-spinFrom->value()) / (spinSteps->value()-1));
|
||||||
double size = (abs((spinTo->value())-(spinFrom->value()))) / (spinSteps->value()-1);
|
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
spinSize->setValue(size);
|
|
||||||
//set these positions
|
SetRangeSteps();
|
||||||
if(oldSize==size) SetRangeSteps();
|
|
||||||
}else if(radioCustom->isChecked()){
|
}else if(radioCustom->isChecked()){
|
||||||
comboCustom->setMaxCount(spinSteps->value());
|
comboCustom->setMaxCount(spinSteps->value());
|
||||||
SetCustomSteps();
|
SetCustomSteps();
|
||||||
@ -561,39 +567,178 @@ void qScanWidget::SetNSteps(){
|
|||||||
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
void qScanWidget::RangeCalculateNumSteps(){
|
int qScanWidget::RangeCheckSizeZero(){
|
||||||
#ifdef VERYVERBOSE
|
#ifdef VERYVERBOSE
|
||||||
cout << "Entering RangeCalculateNumSteps()" << endl;
|
cout << "Entering RangeCheckSizeZero()" << endl;
|
||||||
#endif
|
#endif
|
||||||
//check if to=from
|
if((spinTo->value()-spinFrom->value())/(spinSteps->value()-1))
|
||||||
if(spinTo->value()==spinFrom->value()){
|
return qDefs::OK;
|
||||||
spinTo->setValue( ((spinSize->value())*(spinSteps->value())) - (spinSize->value()) + (spinFrom->value()) );
|
|
||||||
SetRangeSteps();
|
|
||||||
}else{
|
|
||||||
//num = ((to-from)/(size)) +1
|
|
||||||
double size = spinSize->value();
|
|
||||||
double numerator = abs((spinTo->value())-(spinFrom->value()));
|
|
||||||
//check if (to-from)/size is an int and that its =1 cuz numSteps minimum=2
|
|
||||||
bool valid = (fmod(numerator,size)==0) && ((numerator/size)>0);
|
|
||||||
|
|
||||||
if(valid) //calculate num steps
|
return qDefs::FAIL;
|
||||||
spinSteps->setValue( (int)(numerator / size) + 1);
|
|
||||||
else //change size instead
|
|
||||||
spinSize->setValue(numerator / (spinSteps->value()-1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
void qScanWidget::RangeCalculateTo(){
|
int qScanWidget::RangeCheckNumValid(int &num){
|
||||||
#ifdef VERYVERBOSE
|
#ifdef VERYVERBOSE
|
||||||
cout << "Entering RangeCalculateTo()" << endl;
|
cout << "Entering RangeCheckNumValid()" << endl;
|
||||||
#endif
|
#endif
|
||||||
//to = size*num - size + from
|
double div = abs(spinTo->value()-spinFrom->value())/(abs(spinSize->value()));
|
||||||
spinTo->setValue( ((spinSize->value())*(spinSteps->value())) - (spinSize->value()) + (spinFrom->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;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qDefs::FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
void qScanWidget::RangeFromChanged(){
|
||||||
|
#ifdef VERYVERBOSE
|
||||||
|
cout << "Entering RangeFromChanged()" << endl;
|
||||||
|
#endif
|
||||||
|
bool change = false;
|
||||||
|
int numSteps;
|
||||||
|
|
||||||
|
disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
disconnect(spinFrom, SIGNAL(valueChanged(double)), this, SLOT(RangeFromChanged()));
|
||||||
|
disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
|
||||||
|
|
||||||
|
//check size validity
|
||||||
|
if(RangeCheckSizeZero()==qDefs::FAIL)
|
||||||
|
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");
|
||||||
|
else change = true;
|
||||||
|
|
||||||
|
//change it back from = to - size*num + size
|
||||||
|
if(!change) {
|
||||||
|
spinFrom->setValue(spinTo->value() - (spinSize->value() * spinSteps->value()) + spinSize->value());
|
||||||
|
#ifdef VERBOSE
|
||||||
|
cout << "Changing From back:"<< spinFrom->value() << endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//change num steps
|
||||||
|
else{
|
||||||
|
spinSteps->setValue(numSteps);
|
||||||
|
//size will lnever be zero here
|
||||||
|
//size should be positive
|
||||||
|
if(spinTo->value()>spinFrom->value())
|
||||||
|
spinSize->setValue(abs(spinSize->value()));
|
||||||
|
//size should be negative
|
||||||
|
else if(spinSize->value()>0)
|
||||||
|
spinSize->setValue(-1*(spinSize->value()));
|
||||||
|
}
|
||||||
|
|
||||||
SetRangeSteps();
|
SetRangeSteps();
|
||||||
|
|
||||||
|
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
connect(spinFrom, SIGNAL(valueChanged(double)), this, SLOT(RangeFromChanged()));
|
||||||
|
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
void qScanWidget::RangeToChanged(){
|
||||||
|
#ifdef VERYVERBOSE
|
||||||
|
cout << "Entering RangeToChanged()" << endl;
|
||||||
|
#endif
|
||||||
|
bool change = false;
|
||||||
|
int numSteps;
|
||||||
|
|
||||||
|
disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
disconnect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeToChanged()));
|
||||||
|
disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
|
||||||
|
//check size validity
|
||||||
|
if(RangeCheckSizeZero()==qDefs::FAIL)
|
||||||
|
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");
|
||||||
|
else change = true;
|
||||||
|
|
||||||
|
//change it back to = size*num - size + from
|
||||||
|
if(!change) {
|
||||||
|
spinTo->setValue((spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value());
|
||||||
|
#ifdef VERBOSE
|
||||||
|
cout << "Changing To back:"<< spinTo->value() << endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//change num steps
|
||||||
|
else{
|
||||||
|
spinSteps->setValue(numSteps);
|
||||||
|
//size will lnever be zero here
|
||||||
|
//size should be positive
|
||||||
|
if(spinTo->value()>spinFrom->value())
|
||||||
|
spinSize->setValue(abs(spinSize->value()));
|
||||||
|
//size should be negative
|
||||||
|
else if(spinSize->value()>0)
|
||||||
|
spinSize->setValue(-1*(spinSize->value()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SetRangeSteps();
|
||||||
|
|
||||||
|
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
connect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeToChanged()));
|
||||||
|
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
void qScanWidget::RangeSizeChanged(){
|
||||||
|
#ifdef VERYVERBOSE
|
||||||
|
cout << "Entering RangeSizeChanged()" << endl;
|
||||||
|
#endif
|
||||||
|
bool change = false;
|
||||||
|
int numSteps;
|
||||||
|
|
||||||
|
disconnect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
disconnect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
disconnect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeToChanged()));
|
||||||
|
|
||||||
|
//check size validity
|
||||||
|
if(!spinSize->value())
|
||||||
|
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");
|
||||||
|
else change = true;
|
||||||
|
|
||||||
|
//change it back size = (to-from)/(num-1)
|
||||||
|
if(!change) {
|
||||||
|
spinSize->setValue((spinTo->value()-spinFrom->value())/(spinSteps->value()-1));
|
||||||
|
#ifdef VERBOSE
|
||||||
|
cout << "Changing Size back:"<< spinSize->value() << endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
//change num steps
|
||||||
|
else{
|
||||||
|
spinSteps->setValue(numSteps);
|
||||||
|
//in case size changed to negative
|
||||||
|
spinTo->setValue((spinSize->value() * spinSteps->value()) - spinSize->value() + spinFrom->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
SetRangeSteps();
|
||||||
|
|
||||||
|
connect(spinSteps, SIGNAL(valueChanged(int)), this, SLOT(SetNSteps()));
|
||||||
|
connect(spinSize, SIGNAL(valueChanged(double)), this, SLOT(RangeSizeChanged()));
|
||||||
|
connect(spinTo, SIGNAL(valueChanged(double)), this, SLOT(RangeToChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user