#pragma once #include "lts_widgets_export.h" #include #include namespace LtsWidgets { class LTSWIDGETS_EXPORT LtsMultiRangeSpinBox : public QSpinBox { Q_OBJECT public: explicit LtsMultiRangeSpinBox(QWidget *parent = nullptr); ~LtsMultiRangeSpinBox() = default; public slots: void setRanges(const QVector> &ranges); void setRange(int min, int max); void setMinimum(int min); void setMaximum(int max); protected: QValidator::State validate(QString &input, int &pos) const override; void fixup(QString &str) const override; void focusOutEvent(QFocusEvent *event) override; void wheelEvent(QWheelEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; private: static QVector> sortRanges(const QVector > &ranges); QValidator::State validateAll(QString &input, int &pos); int fixupValue(int value) const; int fixupValue(int value, bool higher) const; private: QVector> m_rangesList; int m_curVal = minimum(); QRegExp m_regex; }; }