EuroFuckSimulator/src/gui/fancyslider.cpp

57 lines
1.3 KiB
C++
Raw Normal View History

2024-04-06 18:23:28 +01:00
#include "fancyslider.h"
#include "qboxlayout.h"
#include <cmath>
FancySlider::FancySlider(QWidget *parent)
: QWidget{parent}
{
QHBoxLayout* hbox = new QHBoxLayout(this);
hbox->setMargin(0);
hbox->setContentsMargins(0, 0, 0, 0);
setLayout(hbox);
slider = new QSlider();
slider->setOrientation(Qt::Orientation::Horizontal);
slider->setMaximum(sliderResolution);
box = new QDoubleSpinBox();
label = new QLabel();
layout()->addWidget(slider);
layout()->addWidget(box);
layout()->addWidget(label);
connect(box, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &FancySlider::setValue);
connect(slider, &QSlider::valueChanged, this, [&](int v)
{
setValue(((v / (double)sliderResolution) * (max - min)) + min);
});
}
void FancySlider::setValue(double v)
{
if (v != value)
{
value = v;
updateValues();
emit valueChanged(value);
}
}
void FancySlider::updateValues()
{
box->setMaximum(max);
box->setMinimum(min);
if (value != box->value())
box->setValue(value);
slider->setValue(((value - min) / (max - min)) * sliderResolution);
box->setSingleStep((max-min) / sliderResolution);
box->setDecimals(std::ceil(-std::log10(box->singleStep())));
}