#pragma once #include "lts_widgets_export.h" #include #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; }; 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; }; } // namespace LtsWidgets