mod_geo-tp/src/double_input.cpp

60 lines
1.4 KiB
C++

#include "double_input.h"
double DoubleInput::intToDouble(int value) const {
return static_cast<double>(value) / _slider_resolution
* (_max - _min) + _min;
}
int DoubleInput::doubleToInt(double value) const {
return (value - _min) / (_max - _min) * _slider_resolution;
}
void DoubleInput::onSpinBoxValueChanged(double value) {
emit valueChanged(value);
if (_propagate) {
_propagate = false;
_slider->setValue(doubleToInt(value));
} else {
_propagate = true;
}
}
void DoubleInput::onSliderValueChanged(int value) {
if (_propagate) {
_propagate = false;
_spin_box->setValue(intToDouble(value));
} else {
_propagate = true;
}
}
DoubleInput::DoubleInput(QObject *parent, double min, double max,
double value,
int slider_resolution)
:QObject(parent),
_min(min),
_max(max),
_slider_resolution(slider_resolution),
_spin_box(new QDoubleSpinBox()),
_slider(new QSlider(Qt::Horizontal)) {
_spin_box->setRange(_min, _max);
_spin_box->setValue(value);
_slider->setMaximum(_slider_resolution);
_slider->setValue(doubleToInt(value));
_slider->setTracking(false);
connect(_slider, &QSlider::valueChanged,
this, &DoubleInput::onSliderValueChanged);
connect(_spin_box, QOverload<double>::of(&QDoubleSpinBox::valueChanged),
this, &DoubleInput::onSpinBoxValueChanged);
}
void DoubleInput::setValue(double value) {
_spin_box->setValue(value);
}