6#include "QskBoundedRangeInput.h"
7#include "QskIntervalF.h"
8#include "QskFunctions.h"
10QskBoundedRangeInput::QskBoundedRangeInput( QQuickItem* parent )
15QskBoundedRangeInput::QskBoundedRangeInput(
22QskBoundedRangeInput::~QskBoundedRangeInput()
26void QskBoundedRangeInput::setLowerValueAsRatio( qreal ratio )
28 ratio = qBound( 0.0, ratio, 1.0 );
29 setLowerValue( minimum() + ratio * boundaryLength() );
32qreal QskBoundedRangeInput::lowerValueAsRatio()
const
34 return ( lowerValue() - minimum() ) / boundaryLength();
37void QskBoundedRangeInput::setUpperValueAsRatio( qreal ratio )
39 ratio = qBound( 0.0, ratio, 1.0 );
40 setUpperValue( minimum() + ratio * boundaryLength() );
43qreal QskBoundedRangeInput::upperValueAsRatio()
const
45 return ( upperValue() - minimum() ) / boundaryLength();
48void QskBoundedRangeInput::setLowerValue( qreal value )
50 if ( isComponentComplete() )
52 value = qMin( value, m_range.upperBound() );
53 value = boundedValue( value );
59qreal QskBoundedRangeInput::lowerValue()
const
61 return m_range.lowerBound();
64void QskBoundedRangeInput::setUpperValue( qreal value )
66 if ( isComponentComplete() )
68 value = qMax( m_range.lowerBound(), value );
69 value = boundedValue( value );
75qreal QskBoundedRangeInput::upperValue()
const
77 return m_range.upperBound();
80void QskBoundedRangeInput::setRange( qreal lowerValue, qreal upperValue )
85void QskBoundedRangeInput::setRange(
const QskIntervalF& range )
87 auto newRange = range;
89 if ( isComponentComplete() )
91 if ( isSnapping() && stepSize() )
92 newRange = newRange.fuzzyAligned( stepSize() );
94 newRange = fixupRange( newRange );
97 setRangeInternal( range );
100void QskBoundedRangeInput::resetRange()
102 if ( m_range.isValid() )
104 m_range.invalidate();
105 Q_EMIT rangeChanged( m_range );
109void QskBoundedRangeInput::setRangeInternal(
const QskIntervalF& range )
111 if ( range != m_range )
113 const auto oldRange = m_range;
116 if ( !qskFuzzyCompare( m_range.lowerBound(), oldRange.lowerBound() ) )
117 Q_EMIT lowerValueChanged( m_range.lowerBound() );
119 if ( !qskFuzzyCompare( m_range.upperBound(), oldRange.upperBound() ) )
120 Q_EMIT upperValueChanged( m_range.upperBound() );
122 Q_EMIT rangeChanged( m_range );
131void QskBoundedRangeInput::alignInput()
133 auto newRange = m_range;
134 if ( isSnapping() && stepSize() )
135 newRange = newRange.fuzzyAligned( stepSize() );
137 setRangeInternal( newRange );
145#include "moc_QskBoundedRangeInput.cpp"