slider and precision improved
This commit is contained in:
parent
335cd711a3
commit
42be182191
4 changed files with 37 additions and 23 deletions
|
|
@ -2,9 +2,12 @@
|
|||
|
||||
ParameterSlider::ParameterSlider(ParameterObject *parameterobject, bool showDescription)
|
||||
{
|
||||
this->pressed=true;
|
||||
object=parameterobject;
|
||||
setName(QString::fromStdString(object->name));
|
||||
setValue();
|
||||
connect(slider,SIGNAL(sliderPressed()),this,SLOT(onPressed()));
|
||||
connect(slider,SIGNAL(sliderReleased()),this,SLOT(onReleased()));
|
||||
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(onChanged(int)));
|
||||
if(showDescription==true){
|
||||
setDescription(object->description);
|
||||
|
|
@ -16,11 +19,13 @@ ParameterSlider::ParameterSlider(ParameterObject *parameterobject, bool showDesc
|
|||
|
||||
void ParameterSlider::onChanged(int)
|
||||
{
|
||||
object->focus=true;
|
||||
double v = slider->value()*step;
|
||||
this->labelSliderValue->setText(QString::number(v, 'f', decimalPrecision));
|
||||
object->value = ValuePtr(v);
|
||||
emit changed();
|
||||
if(this->pressed){
|
||||
object->focus=true;
|
||||
object->value = ValuePtr(v);
|
||||
emit changed();
|
||||
}
|
||||
}
|
||||
|
||||
void ParameterSlider::setParameterFocus()
|
||||
|
|
@ -29,13 +34,24 @@ void ParameterSlider::setParameterFocus()
|
|||
object->focus=false;
|
||||
}
|
||||
|
||||
void ParameterSlider::onPressed(){
|
||||
this->pressed=false;
|
||||
}
|
||||
|
||||
void ParameterSlider::onReleased(){
|
||||
this->pressed=true;
|
||||
onChanged(0);
|
||||
}
|
||||
|
||||
void ParameterSlider::setValue()
|
||||
{
|
||||
|
||||
setPrecision(object->values->toRange().step_value());
|
||||
step=object->values->toRange().step_value();
|
||||
|
||||
if(object->values->toRange().step_value()>0){
|
||||
setPrecision(object->values->toRange().step_value());
|
||||
step=object->values->toRange().step_value();
|
||||
}else{
|
||||
decimalPrecision=1;
|
||||
step=1;
|
||||
}
|
||||
int min = object->values->toRange().begin_value()/step;
|
||||
int max=object->values->toRange().end_value()/step;
|
||||
int current=object->value->toDouble()/step;
|
||||
|
|
|
|||
|
|
@ -13,9 +13,11 @@ public:
|
|||
|
||||
private:
|
||||
double step;
|
||||
|
||||
bool pressed;
|
||||
protected slots:
|
||||
void onChanged(int);
|
||||
void onReleased();
|
||||
void onPressed();
|
||||
};
|
||||
|
||||
#endif // PARAMETERSLIDER_H
|
||||
|
|
|
|||
|
|
@ -28,14 +28,20 @@ void ParameterSpinBox::setParameterFocus()
|
|||
}
|
||||
|
||||
void ParameterSpinBox::setValue(){
|
||||
setPrecision(object->value->toDouble());
|
||||
|
||||
if(object->values->toDouble()>0){
|
||||
setPrecision(object->values->toDouble());
|
||||
this->doubleSpinBox1->setSingleStep(object->values->toDouble());
|
||||
}
|
||||
else{
|
||||
setPrecision(object->defaultValue->toDouble());
|
||||
this->doubleSpinBox1->setSingleStep(1/pow(10,decimalPrecision));
|
||||
}
|
||||
this->doubleSpinBox1->setDecimals(decimalPrecision);
|
||||
this->stackedWidget->setCurrentWidget(this->pageVector);
|
||||
this->doubleSpinBox1->setRange(object->value->toDouble()-1000,object->value->toDouble()+1000);
|
||||
this->doubleSpinBox1->setValue(object->value->toDouble());
|
||||
if(object->values->toDouble()>0){
|
||||
this->doubleSpinBox1->setSingleStep(object->values->toDouble());
|
||||
}
|
||||
|
||||
this->doubleSpinBox2->hide();
|
||||
this->doubleSpinBox3->hide();
|
||||
this->doubleSpinBox4->hide();
|
||||
|
|
|
|||
|
|
@ -17,22 +17,12 @@ void ParameterVirtualWidget::setPrecision(double number){
|
|||
long double diff, rn; //rn stands for real number
|
||||
unsigned long long intNumber, multi = 1;
|
||||
number=abs(number);
|
||||
while(1){
|
||||
rn=number/multi;
|
||||
intNumber=rn;
|
||||
if(intNumber==0){
|
||||
break;
|
||||
}
|
||||
beforeDecimal++;
|
||||
multi=multi*10;
|
||||
}
|
||||
multi=1;
|
||||
while(1)
|
||||
{
|
||||
rn = (number * multi);
|
||||
intNumber = rn; //the fractional part will be truncated here
|
||||
diff = rn - intNumber;
|
||||
if(diff == 0 || decimalPrecision>15-beforeDecimal){
|
||||
if(diff <=0.0 || decimalPrecision>6){
|
||||
break;
|
||||
}
|
||||
multi = multi * 10;
|
||||
|
|
|
|||
Loading…
Reference in a new issue