#ifndef RANGESLIDER_H #define RANGESLIDER_H #include #include #include #include "qad_widgets_export.h" class QAD_WIDGETS_EXPORT RangeSlider : public QWidget { Q_OBJECT Q_FLAGS(Mode) Q_PROPERTY(int minimum READ minimum WRITE setMinimum NOTIFY minimumChanged) Q_PROPERTY(int maximum READ maximum WRITE setMaximum NOTIFY maximumChanged) Q_PROPERTY(int lowerValue READ lowerValue WRITE setLowerValue NOTIFY lowerValueChanged) Q_PROPERTY(int upperValue READ upperValue WRITE setUpperValue NOTIFY upperValueChanged) Q_PROPERTY(Mode mode READ mode WRITE setMode NOTIFY modeChanged) public: enum ModeEnum { NoHandle = 0x0, LeftHandle = 0x1, RightHandle = 0x2, DoubleHandles = LeftHandle | RightHandle }; Q_DECLARE_FLAGS(Mode, ModeEnum) RangeSlider(QWidget* parent = Q_NULLPTR); RangeSlider(Qt::Orientation ori, Mode m = DoubleHandles, QWidget * parent = Q_NULLPTR); int minimum() const {return m_minimum;} int maximum() const {return m_maximum;} int lowerValue() const {return m_lowerValue;} int upperValue() const {return m_upperValue;} QPair value() const {return QPair(m_lowerValue, m_upperValue);} Mode mode() const {return m_mode;} protected: QSize minimumSizeHint() const override; void paintEvent(QPaintEvent *) override; void mousePressEvent(QMouseEvent * e) override; void mouseMoveEvent(QMouseEvent* e) override; void mouseReleaseEvent(QMouseEvent *) override; void changeEvent(QEvent * e) override; QRectF firstHandleRect() const; QRectF secondHandleRect() const; QRectF handleRect(int value) const; signals: void lowerValueChanged(int value); void upperValueChanged(int value); void valueChanged(int lower_value, int upper_value); void rangeChanged(int min, int max); void minimumChanged(int minimum); void maximumChanged(int maximum); void modeChanged(Mode m); public slots: void setLowerValue(int value); void setUpperValue(int value); void setMinimum(int minimum); void setMaximum(int maximum); void setRange(int minimum, int maximum); void setMode(Mode m); private: Q_DISABLE_COPY(RangeSlider) float currentPercentage(); int validLength() const; int interval() const; void init(); int m_minimum; int m_maximum; int m_lowerValue; int m_upperValue; bool mFirstHandlePressed; bool mSecondHandlePressed; int mDelta; Qt::Orientation orientation; Mode m_mode; int scHandleSideLength; int scSliderBarHeight; int scLeftRightMargin; }; Q_DECLARE_OPERATORS_FOR_FLAGS(RangeSlider::Mode) #endif //RANGESLIDER_H