File indexing completed on 2024-05-12 03:48:30

0001 /*
0002  * SPDX-FileCopyrightText: 2006-2011 the LibQxt project <http://libqxt.org, foundation@libqxt.org>
0003  * SPDX-License-Identifier: BSD-3-Clause
0004  */
0005 
0006 #ifndef QXTSPANSLIDER_H
0007 #define QXTSPANSLIDER_H
0008 
0009 #include "qxtglobal.h"
0010 #include "qxtnamespace.h"
0011 #include <QSlider>
0012 
0013 class QxtSpanSliderPrivate;
0014 class QxtSpanSlider;
0015 class QSpinBox;
0016 
0017 /*!
0018  * \brief The SpanSlider class
0019  * Spanslider widget which consists of a spanslider and two spinboxes
0020  * to show minimum and maximum
0021  */
0022 class SpanSlider : public QWidget {
0023     Q_OBJECT
0024 public:
0025     SpanSlider(Qt::Orientation, QWidget* parent = nullptr);
0026 
0027     void setToolTip(const QString&);
0028     void setRange(int, int);
0029     void setSpan(int, int);
0030 
0031 private Q_SLOTS:
0032     void sliderSpanChanged(int, int);
0033     void spinBoxMinChanged(int);
0034     void spinBoxMaxChanged(int);
0035 
0036 Q_SIGNALS:
0037     void spanChanged(int lower, int upper);
0038 
0039 private:
0040     QSpinBox* sbMin{nullptr};
0041     QSpinBox* sbMax{nullptr};
0042     QxtSpanSlider* spanslider{nullptr};
0043     bool m_initializing{false};
0044 };
0045 
0046 class QxtSpanSlider : public QSlider {
0047     Q_OBJECT
0048     QXT_DECLARE_PRIVATE(QxtSpanSlider)
0049     Q_PROPERTY(int lowerValue READ lowerValue WRITE setLowerValue)
0050     Q_PROPERTY(int upperValue READ upperValue WRITE setUpperValue)
0051     Q_PROPERTY(int lowerPosition READ lowerPosition WRITE setLowerPosition)
0052     Q_PROPERTY(int upperPosition READ upperPosition WRITE setUpperPosition)
0053     Q_PROPERTY(HandleMovementMode handleMovementMode READ handleMovementMode WRITE setHandleMovementMode)
0054     Q_ENUMS(HandleMovementMode)
0055 
0056 public:
0057     explicit QxtSpanSlider(QWidget* parent = nullptr);
0058     explicit QxtSpanSlider(Qt::Orientation orientation, QWidget* parent = nullptr);
0059     ~QxtSpanSlider() override;
0060 
0061     enum HandleMovementMode { FreeMovement, NoCrossing, NoOverlapping };
0062     enum SpanHandle { NoHandle, LowerHandle, UpperHandle };
0063 
0064     HandleMovementMode handleMovementMode() const;
0065     void setHandleMovementMode(HandleMovementMode);
0066 
0067     int lowerValue() const;
0068     int upperValue() const;
0069 
0070     int lowerPosition() const;
0071     int upperPosition() const;
0072 
0073 public Q_SLOTS:
0074     void setLowerValue(int lower);
0075     void setUpperValue(int upper);
0076     void setSpan(int lower, int upper);
0077 
0078     void setLowerPosition(int lower);
0079     void setUpperPosition(int upper);
0080 
0081 Q_SIGNALS:
0082     void spanChanged(int lower, int upper);
0083     void lowerValueChanged(int lower);
0084     void upperValueChanged(int upper);
0085 
0086     void lowerPositionChanged(int lower);
0087     void upperPositionChanged(int upper);
0088 
0089     void sliderPressed(QxtSpanSlider::SpanHandle);
0090 
0091 protected:
0092     void keyPressEvent(QKeyEvent*) override;
0093     void mousePressEvent(QMouseEvent*) override;
0094     void mouseMoveEvent(QMouseEvent*) override;
0095     void mouseReleaseEvent(QMouseEvent*) override;
0096     void paintEvent(QPaintEvent*) override;
0097 };
0098 
0099 #endif // QXTSPANSLIDER_H