slider and precision improved

This commit is contained in:
amarjeetkapoor1 2016-08-10 20:08:09 +05:30
parent 335cd711a3
commit 42be182191
4 changed files with 37 additions and 23 deletions

View file

@ -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;

View file

@ -13,9 +13,11 @@ public:
private:
double step;
bool pressed;
protected slots:
void onChanged(int);
void onReleased();
void onPressed();
};
#endif // PARAMETERSLIDER_H

View file

@ -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();

View file

@ -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;