From 05c4be184f1f27bea15ee14c46d3fae863c5f422 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Wed, 22 Jul 2020 11:49:28 +0200 Subject: [PATCH] using intervals --- src/controls/QskRangeControl.cpp | 41 ++++++++++++++++++++++++++++++++ src/controls/QskRangeControl.h | 6 +++++ 2 files changed, 47 insertions(+) diff --git a/src/controls/QskRangeControl.cpp b/src/controls/QskRangeControl.cpp index 43f65269..5e75140f 100644 --- a/src/controls/QskRangeControl.cpp +++ b/src/controls/QskRangeControl.cpp @@ -5,6 +5,7 @@ #include "QskRangeControl.h" #include "QskFunctions.h" +#include "QskIntervalF.h" QSK_SYSTEM_STATE( QskRangeControl, ReadOnly, ( QskAspect::FirstSystemState << 1 ) ) @@ -92,6 +93,46 @@ qreal QskRangeControl::maximum() const return m_data->maximum; } +void QskRangeControl::setInterval( qreal min, qreal max ) +{ + if ( max < min ) + max = min; + + if ( min == m_data->minimum && max == m_data->maximum ) + return; + + const auto oldMin = m_data->minimum; + const auto oldMax = m_data->maximum; + + m_data->minimum = min; + m_data->maximum = max; + + if ( isComponentComplete() ) + adjustRangeAndValue( false ); + + if ( m_data->minimum != oldMin ) + Q_EMIT minimumChanged( m_data->minimum ); + + if ( m_data->maximum != oldMax ) + Q_EMIT maximumChanged( m_data->maximum ); + + const auto newRange = range(); + if ( newRange != oldMax - oldMin ) + Q_EMIT rangeChanged( newRange ); + + update(); +} + +void QskRangeControl::setInterval( const QskIntervalF& interval ) +{ + setInterval( interval.lowerBound(), interval.upperBound() ); +} + +QskIntervalF QskRangeControl::interval() const +{ + return QskIntervalF( m_data->minimum, m_data->maximum ); +} + void QskRangeControl::adjustRangeAndValue( bool increasing ) { if ( m_data->maximum < m_data->minimum ) diff --git a/src/controls/QskRangeControl.h b/src/controls/QskRangeControl.h index 72f9f2dc..fad38f6c 100644 --- a/src/controls/QskRangeControl.h +++ b/src/controls/QskRangeControl.h @@ -8,6 +8,8 @@ #include "QskControl.h" +class QskIntervalF; + class QSK_EXPORT QskRangeControl : public QskControl { Q_OBJECT @@ -36,6 +38,9 @@ class QSK_EXPORT QskRangeControl : public QskControl qreal minimum() const; qreal maximum() const; + void setInterval( qreal min, qreal max ); + QskIntervalF interval() const; + qreal range() const; qreal position() const; @@ -54,6 +59,7 @@ class QSK_EXPORT QskRangeControl : public QskControl void setValue( qreal ); void setMinimum( qreal ); void setMaximum( qreal ); + void setInterval( const QskIntervalF& ); void setStepSize( qreal ); void setPageSize( int );