/** * @RDE_HEADER@ * SpinBox, that corrects values to a valid value that fits minimum() + n * singleStep() = value * $Id$ * $HeadURL$ * $Author$ * * Created by Malte Diers, NLSE, 2018-05-07 */ #pragma once #include "lts_widgets_export.h" #include namespace LtsWidgets { class LTSWIDGETS_EXPORT LtsSpinBox : public QSpinBox { Q_OBJECT public: explicit LtsSpinBox(QWidget *parent = nullptr); ~LtsSpinBox() = default; public slots: void setValue(int val) { QString valStr = QString::number(val); fixup(valStr); QSpinBox::setValue(valStr.toInt()); } bool setExclusionRanges(const QVector > &exclusionRanges, bool preserveCurrentValues = false); bool addExclusionRange(int min, int max); void clearExclusionRanges(); protected: QValidator::State validate(QString &input, int &pos) const override; void fixup(QString &str) const override; private: struct { bool operator()(const QPair &a, const QPair &b) const { return a.first < b.first; } } customless; QVector > m_exclusions; QVector > m_validRanges; // Doubles the information. However, it saves calculation... }; class LTSWIDGETS_EXPORT LtsDoubleSpinBox : public QDoubleSpinBox { Q_OBJECT public: explicit LtsDoubleSpinBox(QWidget *parent = nullptr); ~LtsDoubleSpinBox() = default; public slots: void setValue(double val) { QString valStr = QString::number(val); fixup(valStr); QDoubleSpinBox::setValue(valStr.toDouble()); } protected: QValidator::State validate(QString &input, int &pos) const override; void fixup(QString &str) const override; }; }