QskRangeControl -> QskBoundedValueControl
This commit is contained in:
parent
22230365b7
commit
2aadafc34c
|
@ -14,7 +14,7 @@ QSK_SUBCONTROL( Speedometer, NeedleHead )
|
||||||
QSK_SUBCONTROL( Speedometer, Needle )
|
QSK_SUBCONTROL( Speedometer, Needle )
|
||||||
|
|
||||||
Speedometer::Speedometer( QQuickItem* parent )
|
Speedometer::Speedometer( QQuickItem* parent )
|
||||||
: QskRangeControl( parent )
|
: QskBoundedValueControl( parent )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
#ifndef SPEEDOMETER_H
|
#ifndef SPEEDOMETER_H
|
||||||
#define SPEEDOMETER_H
|
#define SPEEDOMETER_H
|
||||||
|
|
||||||
#include <QskRangeControl.h>
|
#include <QskBoundedValueControl.h>
|
||||||
|
|
||||||
class Speedometer : public QskRangeControl
|
class Speedometer : public QskBoundedValueControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ Slider::Slider( QQuickItem* parentItem )
|
||||||
|
|
||||||
setSkinlet( skinlet );
|
setSkinlet( skinlet );
|
||||||
|
|
||||||
connect( this, &QskRangeControl::valueChanged,
|
connect( this, &QskSlider::valueChanged,
|
||||||
this, &QskControl::focusIndicatorRectChanged );
|
this, &QskControl::focusIndicatorRectChanged );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ QRectF SliderSkinlet::fillRect(
|
||||||
auto r = subControlRect( slider, contentsRect, Slider::Scale );
|
auto r = subControlRect( slider, contentsRect, Slider::Scale );
|
||||||
|
|
||||||
r.setTop( r.bottom() - qskMinorTick );
|
r.setTop( r.bottom() - qskMinorTick );
|
||||||
r.setWidth( r.width() * slider->position() );
|
r.setWidth( r.width() * slider->valueAsRatio() );
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -238,7 +238,7 @@ QSGNode* SliderSkinlet::updateScaleNode(
|
||||||
if ( ticksNode == nullptr )
|
if ( ticksNode == nullptr )
|
||||||
ticksNode = new TicksNode( slider->color( Slider::Scale ) );
|
ticksNode = new TicksNode( slider->color( Slider::Scale ) );
|
||||||
|
|
||||||
const int tickCount = std::floor( slider->range() / slider->stepSize() ) + 1;
|
const int tickCount = std::floor( slider->boundaryLength() / slider->stepSize() ) + 1;
|
||||||
|
|
||||||
auto geometry = ticksNode->geometry();
|
auto geometry = ticksNode->geometry();
|
||||||
geometry->allocate( tickCount * 2 );
|
geometry->allocate( tickCount * 2 );
|
||||||
|
@ -246,7 +246,7 @@ QSGNode* SliderSkinlet::updateScaleNode(
|
||||||
auto vertexData = geometry->vertexDataAsPoint2D();
|
auto vertexData = geometry->vertexDataAsPoint2D();
|
||||||
memset( vertexData, 0, geometry->vertexCount() );
|
memset( vertexData, 0, geometry->vertexCount() );
|
||||||
|
|
||||||
auto stepStride = slider->stepSize() / slider->range() * scaleRect.width();
|
auto stepStride = slider->stepSize() / slider->boundaryLength() * scaleRect.width();
|
||||||
|
|
||||||
auto x = scaleRect.x();
|
auto x = scaleRect.x();
|
||||||
const auto y = scaleRect.bottom();
|
const auto y = scaleRect.bottom();
|
||||||
|
@ -281,11 +281,11 @@ QSGNode* SliderSkinlet::updateDecorationNode(
|
||||||
if ( decorationNode == nullptr )
|
if ( decorationNode == nullptr )
|
||||||
decorationNode = new QSGTransformNode();
|
decorationNode = new QSGTransformNode();
|
||||||
|
|
||||||
const int tickCount = std::floor( slider->range() / slider->stepSize() ) + 1;
|
const int tickCount = std::floor( slider->boundaryLength() / slider->stepSize() ) + 1;
|
||||||
|
|
||||||
auto labelNode = static_cast< QskTextNode* >( decorationNode->firstChild() );
|
auto labelNode = static_cast< QskTextNode* >( decorationNode->firstChild() );
|
||||||
|
|
||||||
auto stepStride = slider->stepSize() / slider->range() * decorationRect.width();
|
auto stepStride = slider->stepSize() / slider->boundaryLength() * decorationRect.width();
|
||||||
|
|
||||||
auto x = decorationRect.x();
|
auto x = decorationRect.x();
|
||||||
const auto y = decorationRect.y();
|
const auto y = decorationRect.y();
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
* This file may be used under the terms of the QSkinny License, Version 1.0
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#include "QskRangeControl.h"
|
#include "QskBoundedValueControl.h"
|
||||||
#include "QskFunctions.h"
|
#include "QskFunctions.h"
|
||||||
#include "QskIntervalF.h"
|
#include "QskIntervalF.h"
|
||||||
|
|
||||||
QSK_SYSTEM_STATE( QskRangeControl, ReadOnly, ( QskAspect::FirstSystemState << 1 ) )
|
QSK_SYSTEM_STATE( QskBoundedValueControl, ReadOnly, ( QskAspect::FirstSystemState << 1 ) )
|
||||||
|
|
||||||
class QskRangeControl::PrivateData
|
class QskBoundedValueControl::PrivateData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PrivateData()
|
PrivateData()
|
||||||
|
@ -30,7 +30,7 @@ class QskRangeControl::PrivateData
|
||||||
bool snap : 1;
|
bool snap : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
QskRangeControl::QskRangeControl( QQuickItem* parent )
|
QskBoundedValueControl::QskBoundedValueControl( QQuickItem* parent )
|
||||||
: QskControl( parent )
|
: QskControl( parent )
|
||||||
, m_data( new PrivateData() )
|
, m_data( new PrivateData() )
|
||||||
{
|
{
|
||||||
|
@ -39,76 +39,66 @@ QskRangeControl::QskRangeControl( QQuickItem* parent )
|
||||||
setWheelEnabled( true );
|
setWheelEnabled( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
QskRangeControl::~QskRangeControl()
|
QskBoundedValueControl::~QskBoundedValueControl()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setMinimum( qreal minimum )
|
void QskBoundedValueControl::setMinimum( qreal minimum )
|
||||||
{
|
{
|
||||||
if ( m_data->minimum == minimum )
|
if ( m_data->minimum == minimum )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto oldRange = range();
|
|
||||||
|
|
||||||
m_data->minimum = minimum;
|
m_data->minimum = minimum;
|
||||||
Q_EMIT minimumChanged( minimum );
|
Q_EMIT minimumChanged( minimum );
|
||||||
|
|
||||||
if ( isComponentComplete() )
|
if ( isComponentComplete() )
|
||||||
adjustRangeAndValue( false );
|
adjustBoundariesAndValue( false );
|
||||||
|
|
||||||
const auto newRange = range();
|
|
||||||
if ( oldRange != newRange )
|
|
||||||
Q_EMIT rangeChanged( newRange );
|
|
||||||
|
|
||||||
|
Q_EMIT boundariesChanged( boundaries() );
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::minimum() const
|
qreal QskBoundedValueControl::minimum() const
|
||||||
{
|
{
|
||||||
return m_data->minimum;
|
return m_data->minimum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setMaximum( qreal maximum )
|
void QskBoundedValueControl::setMaximum( qreal maximum )
|
||||||
{
|
{
|
||||||
if ( m_data->maximum == maximum )
|
if ( m_data->maximum == maximum )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto oldRange = range();
|
|
||||||
|
|
||||||
m_data->maximum = maximum;
|
m_data->maximum = maximum;
|
||||||
Q_EMIT maximumChanged( maximum );
|
Q_EMIT maximumChanged( maximum );
|
||||||
|
|
||||||
if ( isComponentComplete() )
|
if ( isComponentComplete() )
|
||||||
adjustRangeAndValue( true );
|
adjustBoundariesAndValue( true );
|
||||||
|
|
||||||
const auto newRange = range();
|
|
||||||
if ( oldRange != newRange )
|
|
||||||
Q_EMIT rangeChanged( newRange );
|
|
||||||
|
|
||||||
|
Q_EMIT boundariesChanged( boundaries() );
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::maximum() const
|
qreal QskBoundedValueControl::maximum() const
|
||||||
{
|
{
|
||||||
return m_data->maximum;
|
return m_data->maximum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setInterval( qreal min, qreal max )
|
void QskBoundedValueControl::setBoundaries( qreal min, qreal max )
|
||||||
{
|
{
|
||||||
if ( max < min )
|
if ( max < min )
|
||||||
max = min;
|
max = min;
|
||||||
|
|
||||||
if ( min == m_data->minimum && max == m_data->maximum )
|
|
||||||
return;
|
|
||||||
|
|
||||||
const auto oldMin = m_data->minimum;
|
const auto oldMin = m_data->minimum;
|
||||||
const auto oldMax = m_data->maximum;
|
const auto oldMax = m_data->maximum;
|
||||||
|
|
||||||
|
if ( min == oldMin && max == oldMax )
|
||||||
|
return;
|
||||||
|
|
||||||
m_data->minimum = min;
|
m_data->minimum = min;
|
||||||
m_data->maximum = max;
|
m_data->maximum = max;
|
||||||
|
|
||||||
if ( isComponentComplete() )
|
if ( isComponentComplete() )
|
||||||
adjustRangeAndValue( false );
|
adjustBoundariesAndValue( false );
|
||||||
|
|
||||||
if ( m_data->minimum != oldMin )
|
if ( m_data->minimum != oldMin )
|
||||||
Q_EMIT minimumChanged( m_data->minimum );
|
Q_EMIT minimumChanged( m_data->minimum );
|
||||||
|
@ -116,24 +106,21 @@ void QskRangeControl::setInterval( qreal min, qreal max )
|
||||||
if ( m_data->maximum != oldMax )
|
if ( m_data->maximum != oldMax )
|
||||||
Q_EMIT maximumChanged( m_data->maximum );
|
Q_EMIT maximumChanged( m_data->maximum );
|
||||||
|
|
||||||
const auto newRange = range();
|
Q_EMIT boundariesChanged( boundaries() );
|
||||||
if ( newRange != oldMax - oldMin )
|
|
||||||
Q_EMIT rangeChanged( newRange );
|
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setInterval( const QskIntervalF& interval )
|
void QskBoundedValueControl::setBoundaries( const QskIntervalF& boundaries )
|
||||||
{
|
{
|
||||||
setInterval( interval.lowerBound(), interval.upperBound() );
|
setBoundaries( boundaries.lowerBound(), boundaries.upperBound() );
|
||||||
}
|
}
|
||||||
|
|
||||||
QskIntervalF QskRangeControl::interval() const
|
QskIntervalF QskBoundedValueControl::boundaries() const
|
||||||
{
|
{
|
||||||
return QskIntervalF( m_data->minimum, m_data->maximum );
|
return QskIntervalF( m_data->minimum, m_data->maximum );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::adjustRangeAndValue( bool increasing )
|
void QskBoundedValueControl::adjustBoundariesAndValue( bool increasing )
|
||||||
{
|
{
|
||||||
if ( m_data->maximum < m_data->minimum )
|
if ( m_data->maximum < m_data->minimum )
|
||||||
{
|
{
|
||||||
|
@ -163,22 +150,28 @@ void QskRangeControl::adjustRangeAndValue( bool increasing )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::range() const
|
qreal QskBoundedValueControl::boundaryLength() const
|
||||||
{
|
{
|
||||||
return m_data->maximum - m_data->minimum;
|
return m_data->maximum - m_data->minimum;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::position() const
|
qreal QskBoundedValueControl::fixupValue( qreal value ) const
|
||||||
{
|
|
||||||
return ( value() - minimum() ) / range();
|
|
||||||
}
|
|
||||||
|
|
||||||
qreal QskRangeControl::fixupValue( qreal value ) const
|
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setValue( qreal value )
|
void QskBoundedValueControl::setValueAsRatio( qreal ratio )
|
||||||
|
{
|
||||||
|
ratio = qBound( 0.0, ratio, 1.0 );
|
||||||
|
setValue( m_data->minimum + ratio * ( m_data->maximum - m_data->minimum ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
qreal QskBoundedValueControl::valueAsRatio() const
|
||||||
|
{
|
||||||
|
return ( m_data->value - m_data->minimum ) / ( m_data->maximum - m_data->minimum );
|
||||||
|
}
|
||||||
|
|
||||||
|
void QskBoundedValueControl::setValue( qreal value )
|
||||||
{
|
{
|
||||||
if ( isComponentComplete() )
|
if ( isComponentComplete() )
|
||||||
{
|
{
|
||||||
|
@ -199,12 +192,12 @@ void QskRangeControl::setValue( qreal value )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::value() const
|
qreal QskBoundedValueControl::value() const
|
||||||
{
|
{
|
||||||
return m_data->value;
|
return m_data->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setStepSize( qreal stepSize )
|
void QskBoundedValueControl::setStepSize( qreal stepSize )
|
||||||
{
|
{
|
||||||
if ( qskFuzzyCompare( m_data->stepSize, stepSize ) )
|
if ( qskFuzzyCompare( m_data->stepSize, stepSize ) )
|
||||||
return;
|
return;
|
||||||
|
@ -215,12 +208,12 @@ void QskRangeControl::setStepSize( qreal stepSize )
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal QskRangeControl::stepSize() const
|
qreal QskBoundedValueControl::stepSize() const
|
||||||
{
|
{
|
||||||
return m_data->stepSize;
|
return m_data->stepSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setPageSize( int pageSize )
|
void QskBoundedValueControl::setPageSize( int pageSize )
|
||||||
{
|
{
|
||||||
if ( m_data->pageSize == pageSize )
|
if ( m_data->pageSize == pageSize )
|
||||||
return;
|
return;
|
||||||
|
@ -231,12 +224,12 @@ void QskRangeControl::setPageSize( int pageSize )
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
int QskRangeControl::pageSize() const
|
int QskBoundedValueControl::pageSize() const
|
||||||
{
|
{
|
||||||
return m_data->pageSize;
|
return m_data->pageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setSnap( bool snap )
|
void QskBoundedValueControl::setSnap( bool snap )
|
||||||
{
|
{
|
||||||
if ( m_data->snap == snap )
|
if ( m_data->snap == snap )
|
||||||
return;
|
return;
|
||||||
|
@ -250,12 +243,12 @@ void QskRangeControl::setSnap( bool snap )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QskRangeControl::snap() const
|
bool QskBoundedValueControl::snap() const
|
||||||
{
|
{
|
||||||
return m_data->snap;
|
return m_data->snap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::setReadOnly( bool readOnly )
|
void QskBoundedValueControl::setReadOnly( bool readOnly )
|
||||||
{
|
{
|
||||||
if ( readOnly == isReadOnly() )
|
if ( readOnly == isReadOnly() )
|
||||||
return;
|
return;
|
||||||
|
@ -270,32 +263,32 @@ void QskRangeControl::setReadOnly( bool readOnly )
|
||||||
Q_EMIT readOnlyChanged( readOnly );
|
Q_EMIT readOnlyChanged( readOnly );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QskRangeControl::isReadOnly() const
|
bool QskBoundedValueControl::isReadOnly() const
|
||||||
{
|
{
|
||||||
return skinState() & ReadOnly;
|
return skinState() & ReadOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::stepUp()
|
void QskBoundedValueControl::stepUp()
|
||||||
{
|
{
|
||||||
setValue( m_data->value + m_data->stepSize );
|
setValue( m_data->value + m_data->stepSize );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::stepDown()
|
void QskBoundedValueControl::stepDown()
|
||||||
{
|
{
|
||||||
setValue( m_data->value - m_data->stepSize );
|
setValue( m_data->value - m_data->stepSize );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::pageUp()
|
void QskBoundedValueControl::pageUp()
|
||||||
{
|
{
|
||||||
setValue( m_data->value + m_data->stepSize * m_data->pageSize );
|
setValue( m_data->value + m_data->stepSize * m_data->pageSize );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::pageDown()
|
void QskBoundedValueControl::pageDown()
|
||||||
{
|
{
|
||||||
setValue( m_data->value - m_data->stepSize * m_data->pageSize );
|
setValue( m_data->value - m_data->stepSize * m_data->pageSize );
|
||||||
}
|
}
|
||||||
|
|
||||||
void QskRangeControl::keyPressEvent( QKeyEvent* event )
|
void QskBoundedValueControl::keyPressEvent( QKeyEvent* event )
|
||||||
{
|
{
|
||||||
if ( !isReadOnly() )
|
if ( !isReadOnly() )
|
||||||
{
|
{
|
||||||
|
@ -317,7 +310,7 @@ void QskRangeControl::keyPressEvent( QKeyEvent* event )
|
||||||
|
|
||||||
#ifndef QT_NO_WHEELEVENT
|
#ifndef QT_NO_WHEELEVENT
|
||||||
|
|
||||||
void QskRangeControl::wheelEvent( QWheelEvent* event )
|
void QskBoundedValueControl::wheelEvent( QWheelEvent* event )
|
||||||
{
|
{
|
||||||
if ( isReadOnly() )
|
if ( isReadOnly() )
|
||||||
return;
|
return;
|
||||||
|
@ -336,10 +329,10 @@ void QskRangeControl::wheelEvent( QWheelEvent* event )
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void QskRangeControl::componentComplete()
|
void QskBoundedValueControl::componentComplete()
|
||||||
{
|
{
|
||||||
Inherited::componentComplete();
|
Inherited::componentComplete();
|
||||||
adjustRangeAndValue( true );
|
adjustBoundariesAndValue( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_QskRangeControl.cpp"
|
#include "moc_QskBoundedValueControl.cpp"
|
|
@ -3,20 +3,22 @@
|
||||||
* This file may be used under the terms of the QSkinny License, Version 1.0
|
* This file may be used under the terms of the QSkinny License, Version 1.0
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#ifndef QSK_RANGE_CONTROL_H
|
#ifndef QSK_BOUNDED_VALUE_CONTROL_H
|
||||||
#define QSK_RANGE_CONTROL_H
|
#define QSK_BOUNDED_VALUE_CONTROL_H
|
||||||
|
|
||||||
#include "QskControl.h"
|
#include "QskControl.h"
|
||||||
|
|
||||||
class QskIntervalF;
|
class QskIntervalF;
|
||||||
|
|
||||||
class QSK_EXPORT QskRangeControl : public QskControl
|
class QSK_EXPORT QskBoundedValueControl : public QskControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Q_PROPERTY( qreal minimum READ minimum WRITE setMinimum NOTIFY minimumChanged )
|
Q_PROPERTY( qreal minimum READ minimum WRITE setMinimum NOTIFY minimumChanged )
|
||||||
Q_PROPERTY( qreal maximum READ maximum WRITE setMaximum NOTIFY maximumChanged )
|
Q_PROPERTY( qreal maximum READ maximum WRITE setMaximum NOTIFY maximumChanged )
|
||||||
Q_PROPERTY( qreal range READ range NOTIFY rangeChanged )
|
Q_PROPERTY( QskIntervalF boundaries READ boundaries
|
||||||
|
WRITE setBoundaries NOTIFY boundariesChanged )
|
||||||
|
|
||||||
Q_PROPERTY( qreal value READ value WRITE setValue NOTIFY valueChanged )
|
Q_PROPERTY( qreal value READ value WRITE setValue NOTIFY valueChanged )
|
||||||
|
|
||||||
Q_PROPERTY( qreal stepSize READ stepSize WRITE setStepSize NOTIFY stepSizeChanged )
|
Q_PROPERTY( qreal stepSize READ stepSize WRITE setStepSize NOTIFY stepSizeChanged )
|
||||||
|
@ -30,20 +32,22 @@ class QSK_EXPORT QskRangeControl : public QskControl
|
||||||
public:
|
public:
|
||||||
QSK_STATES( ReadOnly )
|
QSK_STATES( ReadOnly )
|
||||||
|
|
||||||
QskRangeControl( QQuickItem* parent = nullptr );
|
QskBoundedValueControl( QQuickItem* parent = nullptr );
|
||||||
~QskRangeControl() override;
|
~QskBoundedValueControl() override;
|
||||||
|
|
||||||
qreal minimum() const;
|
qreal minimum() const;
|
||||||
qreal maximum() const;
|
qreal maximum() const;
|
||||||
|
|
||||||
void setInterval( qreal min, qreal max );
|
qreal boundaryLength() const;
|
||||||
QskIntervalF interval() const;
|
|
||||||
|
|
||||||
qreal range() const;
|
void setBoundaries( qreal min, qreal max );
|
||||||
qreal position() const;
|
QskIntervalF boundaries() const;
|
||||||
|
|
||||||
qreal value() const;
|
qreal value() const;
|
||||||
|
|
||||||
|
// [0.0, 1.0]
|
||||||
|
qreal valueAsRatio() const;
|
||||||
|
|
||||||
qreal stepSize() const;
|
qreal stepSize() const;
|
||||||
int pageSize() const;
|
int pageSize() const;
|
||||||
|
|
||||||
|
@ -55,9 +59,12 @@ class QSK_EXPORT QskRangeControl : public QskControl
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void setValue( qreal );
|
void setValue( qreal );
|
||||||
|
void setValueAsRatio( qreal );
|
||||||
|
|
||||||
void setMinimum( qreal );
|
void setMinimum( qreal );
|
||||||
void setMaximum( qreal );
|
void setMaximum( qreal );
|
||||||
void setInterval( const QskIntervalF& );
|
void setBoundaries( const QskIntervalF& );
|
||||||
|
|
||||||
void setStepSize( qreal );
|
void setStepSize( qreal );
|
||||||
void setPageSize( int );
|
void setPageSize( int );
|
||||||
|
|
||||||
|
@ -67,13 +74,16 @@ class QSK_EXPORT QskRangeControl : public QskControl
|
||||||
void pageDown();
|
void pageDown();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
void valueChanged( qreal );
|
||||||
|
|
||||||
void minimumChanged( qreal );
|
void minimumChanged( qreal );
|
||||||
void maximumChanged( qreal );
|
void maximumChanged( qreal );
|
||||||
void rangeChanged( qreal );
|
void boundariesChanged( const QskIntervalF& );
|
||||||
void valueChanged( qreal );
|
|
||||||
void stepSizeChanged( qreal );
|
void stepSizeChanged( qreal );
|
||||||
void pageSizeChanged( qreal );
|
void pageSizeChanged( qreal );
|
||||||
void snapChanged( bool );
|
void snapChanged( bool );
|
||||||
|
|
||||||
void readOnlyChanged( bool );
|
void readOnlyChanged( bool );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -87,7 +97,7 @@ class QSK_EXPORT QskRangeControl : public QskControl
|
||||||
void componentComplete() override;
|
void componentComplete() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void adjustRangeAndValue( bool );
|
void adjustBoundariesAndValue( bool );
|
||||||
|
|
||||||
class PrivateData;
|
class PrivateData;
|
||||||
std::unique_ptr< PrivateData > m_data;
|
std::unique_ptr< PrivateData > m_data;
|
|
@ -50,13 +50,10 @@ QskSlider::QskSlider( Qt::Orientation orientation, QQuickItem* parent )
|
||||||
else
|
else
|
||||||
initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum );
|
initSizePolicy( QskSizePolicy::Fixed, QskSizePolicy::Minimum );
|
||||||
|
|
||||||
setMetric( QskSlider::Handle | QskAspect::Position, position() );
|
setMetric( QskSlider::Handle | QskAspect::Position, valueAsRatio() );
|
||||||
|
|
||||||
connect( this, &QskRangeControl::rangeChanged,
|
connect( this, &QskSlider::boundariesChanged, [ this ]() { updatePosition(); } );
|
||||||
[ this ]( qreal ) { updatePosition(); } );
|
connect( this, &QskSlider::valueChanged, [ this ]() { updatePosition(); } );
|
||||||
|
|
||||||
connect( this, &QskRangeControl::valueChanged,
|
|
||||||
[ this ]( qreal ) { updatePosition(); } );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QskSlider::~QskSlider()
|
QskSlider::~QskSlider()
|
||||||
|
@ -173,12 +170,12 @@ void QskSlider::mouseMoveEvent( QMouseEvent* event )
|
||||||
if ( m_data->orientation == Qt::Horizontal )
|
if ( m_data->orientation == Qt::Horizontal )
|
||||||
{
|
{
|
||||||
const auto distance = event->localPos().x() - m_data->pressedPos.x();
|
const auto distance = event->localPos().x() - m_data->pressedPos.x();
|
||||||
newValue = m_data->pressedValue + distance / r.width() * range();
|
newValue = m_data->pressedValue + distance / r.width() * boundaryLength();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const auto distance = event->localPos().y() - m_data->pressedPos.y();
|
const auto distance = event->localPos().y() - m_data->pressedPos.y();
|
||||||
newValue = m_data->pressedValue - distance / r.height() * range();
|
newValue = m_data->pressedValue - distance / r.height() * boundaryLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
setValue( newValue );
|
setValue( newValue );
|
||||||
|
@ -199,14 +196,14 @@ void QskSlider::mouseReleaseEvent( QMouseEvent* event )
|
||||||
const qreal w = szHandle.width();
|
const qreal w = szHandle.width();
|
||||||
|
|
||||||
const qreal x = ( pos.x() - rect.x() - w * 0.5 ) / ( rect.width() - w );
|
const qreal x = ( pos.x() - rect.x() - w * 0.5 ) / ( rect.width() - w );
|
||||||
up = x > position();
|
up = x > valueAsRatio();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const qreal h = szHandle.height();
|
const qreal h = szHandle.height();
|
||||||
|
|
||||||
const qreal y = ( pos.y() - rect.y() - h * 0.5 ) / ( rect.height() - h );
|
const qreal y = ( pos.y() - rect.y() - h * 0.5 ) / ( rect.height() - h );
|
||||||
up = y < 1.0 - position();
|
up = y < 1.0 - valueAsRatio();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( up )
|
if ( up )
|
||||||
|
@ -228,9 +225,8 @@ void QskSlider::updatePosition()
|
||||||
|
|
||||||
const Aspect aspect = QskSlider::Handle | Position | Metric;
|
const Aspect aspect = QskSlider::Handle | Position | Metric;
|
||||||
|
|
||||||
const QskAnimationHint hint = animation( aspect | skinState() );
|
const auto hint = animation( aspect | skinState() );
|
||||||
|
const qreal pos = valueAsRatio();
|
||||||
const qreal pos = position();
|
|
||||||
|
|
||||||
if ( hint.duration > 0 )
|
if ( hint.duration > 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
#ifndef QSK_SLIDER_H
|
#ifndef QSK_SLIDER_H
|
||||||
#define QSK_SLIDER_H
|
#define QSK_SLIDER_H
|
||||||
|
|
||||||
#include "QskRangeControl.h"
|
#include "QskBoundedValueControl.h"
|
||||||
|
|
||||||
class QSGNode;
|
class QSGNode;
|
||||||
class QskSkin;
|
class QskSkin;
|
||||||
|
|
||||||
class QSK_EXPORT QskSlider : public QskRangeControl
|
class QSK_EXPORT QskSlider : public QskBoundedValueControl
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ class QSK_EXPORT QskSlider : public QskRangeControl
|
||||||
|
|
||||||
Q_PROPERTY( bool tracking READ isTracking WRITE setTracking NOTIFY trackingChanged )
|
Q_PROPERTY( bool tracking READ isTracking WRITE setTracking NOTIFY trackingChanged )
|
||||||
|
|
||||||
using Inherited = QskRangeControl;
|
using Inherited = QskBoundedValueControl;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QSK_SUBCONTROLS( Panel, Groove, Fill, Scale, Handle )
|
QSK_SUBCONTROLS( Panel, Groove, Fill, Scale, Handle )
|
||||||
|
|
|
@ -110,6 +110,7 @@ HEADERS += \
|
||||||
controls/QskAbstractButton.h \
|
controls/QskAbstractButton.h \
|
||||||
controls/QskAnimationHint.h \
|
controls/QskAnimationHint.h \
|
||||||
controls/QskAnimator.h \
|
controls/QskAnimator.h \
|
||||||
|
controls/QskBoundedValueControl.h \
|
||||||
controls/QskBox.h \
|
controls/QskBox.h \
|
||||||
controls/QskBoxSkinlet.h \
|
controls/QskBoxSkinlet.h \
|
||||||
controls/QskControl.h \
|
controls/QskControl.h \
|
||||||
|
@ -138,7 +139,6 @@ HEADERS += \
|
||||||
controls/QskQuick.h \
|
controls/QskQuick.h \
|
||||||
controls/QskQuickItem.h \
|
controls/QskQuickItem.h \
|
||||||
controls/QskQuickItemPrivate.h \
|
controls/QskQuickItemPrivate.h \
|
||||||
controls/QskRangeControl.h \
|
|
||||||
controls/QskScrollArea.h \
|
controls/QskScrollArea.h \
|
||||||
controls/QskScrollBox.h \
|
controls/QskScrollBox.h \
|
||||||
controls/QskScrollView.h \
|
controls/QskScrollView.h \
|
||||||
|
@ -178,6 +178,7 @@ HEADERS += \
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
controls/QskAbstractButton.cpp \
|
controls/QskAbstractButton.cpp \
|
||||||
controls/QskAnimator.cpp \
|
controls/QskAnimator.cpp \
|
||||||
|
controls/QskBoundedValueControl.cpp \
|
||||||
controls/QskBox.cpp \
|
controls/QskBox.cpp \
|
||||||
controls/QskBoxSkinlet.cpp \
|
controls/QskBoxSkinlet.cpp \
|
||||||
controls/QskControl.cpp \
|
controls/QskControl.cpp \
|
||||||
|
@ -206,7 +207,6 @@ SOURCES += \
|
||||||
controls/QskQuick.cpp \
|
controls/QskQuick.cpp \
|
||||||
controls/QskQuickItem.cpp \
|
controls/QskQuickItem.cpp \
|
||||||
controls/QskQuickItemPrivate.cpp \
|
controls/QskQuickItemPrivate.cpp \
|
||||||
controls/QskRangeControl.cpp \
|
|
||||||
controls/QskScrollArea.cpp \
|
controls/QskScrollArea.cpp \
|
||||||
controls/QskScrollBox.cpp \
|
controls/QskScrollBox.cpp \
|
||||||
controls/QskScrollView.cpp \
|
controls/QskScrollView.cpp \
|
||||||
|
|
Loading…
Reference in New Issue