From c5f8c549d3e45d33a863ce80a9b20ce261838e31 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Wed, 23 Oct 2024 11:15:47 +0200 Subject: [PATCH] decimals moved from QskSpinBox to QskBoundedValueInput --- src/controls/QskBoundedValueInput.cpp | 48 +++++++++++++++++++++------ src/controls/QskBoundedValueInput.h | 11 ++++-- src/controls/QskSpinBox.cpp | 26 --------------- src/controls/QskSpinBox.h | 10 ------ 4 files changed, 46 insertions(+), 49 deletions(-) diff --git a/src/controls/QskBoundedValueInput.cpp b/src/controls/QskBoundedValueInput.cpp index 4fa8c226..098f7ff4 100644 --- a/src/controls/QskBoundedValueInput.cpp +++ b/src/controls/QskBoundedValueInput.cpp @@ -7,9 +7,18 @@ #include "QskFunctions.h" #include +#include + +class QskBoundedValueInput::PrivateData +{ + public: + qreal value = 0.0; + int decimals = 2; +}; QskBoundedValueInput::QskBoundedValueInput( QQuickItem* parent ) - : QskBoundedInput( parent ) + : Inherited( parent ) + , m_data( new PrivateData ) { } @@ -17,9 +26,26 @@ QskBoundedValueInput::~QskBoundedValueInput() { } +void QskBoundedValueInput::setDecimals( int decimals ) +{ + decimals = qBound( 0, decimals, DBL_MAX_10_EXP + DBL_DIG ); + if ( decimals != m_data->decimals ) + { + m_data->decimals = decimals; + + update(); + resetImplicitSize(); + } +} + +int QskBoundedValueInput::decimals() const +{ + return m_data->decimals; +} + void QskBoundedValueInput::alignInput() { - auto value = alignedValue( m_value ); + auto value = alignedValue( m_data->value ); value = fixupValue( value ); setValueInternal( value ); @@ -38,7 +64,7 @@ void QskBoundedValueInput::setValueAsRatio( qreal ratio ) qreal QskBoundedValueInput::valueAsRatio() const { - return valueAsRatio( m_value ); + return valueAsRatio( m_data->value ); } void QskBoundedValueInput::setValue( qreal value ) @@ -54,19 +80,19 @@ void QskBoundedValueInput::setValue( qreal value ) qreal QskBoundedValueInput::value() const { - return m_value; + return m_data->value; } void QskBoundedValueInput::increment( qreal offset ) { - setValue( m_value + offset ); + setValue( m_data->value + offset ); } void QskBoundedValueInput::setValueInternal( qreal value ) { - if ( !qskFuzzyCompare( value, m_value ) ) + if ( !qskFuzzyCompare( value, m_data->value ) ) { - m_value = value; + m_data->value = value; Q_EMIT valueChanged( value ); update(); @@ -74,13 +100,13 @@ void QskBoundedValueInput::setValueInternal( qreal value ) } QString QskBoundedValueInput::valueText() const -{ +{ return textFromValue( value() ); } - + QString QskBoundedValueInput::textFromValue( qreal value ) const -{ - return locale().toString( value ); +{ + return locale().toString( value, 'f', m_data->decimals ); } #include "moc_QskBoundedValueInput.cpp" diff --git a/src/controls/QskBoundedValueInput.h b/src/controls/QskBoundedValueInput.h index 388f1b34..bd63b7e5 100644 --- a/src/controls/QskBoundedValueInput.h +++ b/src/controls/QskBoundedValueInput.h @@ -20,6 +20,9 @@ class QSK_EXPORT QskBoundedValueInput : public QskBoundedInput Q_PROPERTY( QString valueText READ valueText NOTIFY valueChanged ) + Q_PROPERTY( int decimals READ decimals + WRITE setDecimals NOTIFY decimalsChanged ) + using Inherited = QskBoundedInput; public: @@ -35,6 +38,9 @@ class QSK_EXPORT QskBoundedValueInput : public QskBoundedInput QString valueText() const; virtual QString textFromValue( qreal ) const; + void setDecimals( int ); + int decimals() const; + public Q_SLOTS: void setValue( qreal ); void setValueAsRatio( qreal ); @@ -42,6 +48,7 @@ class QSK_EXPORT QskBoundedValueInput : public QskBoundedInput Q_SIGNALS: void valueChanged( qreal ); + void decimalsChanged( int ); protected: virtual qreal fixupValue( qreal ) const; @@ -49,9 +56,9 @@ class QSK_EXPORT QskBoundedValueInput : public QskBoundedInput private: void setValueInternal( qreal ); - void adjustValue(); - qreal m_value = 0.0; + class PrivateData; + std::unique_ptr< PrivateData > m_data; }; #endif diff --git a/src/controls/QskSpinBox.cpp b/src/controls/QskSpinBox.cpp index d3bfb1eb..2e628b4c 100644 --- a/src/controls/QskSpinBox.cpp +++ b/src/controls/QskSpinBox.cpp @@ -9,8 +9,6 @@ #include -#include - QSK_SUBCONTROL( QskSpinBox, Panel ) QSK_SUBCONTROL( QskSpinBox, TextPanel ) @@ -109,8 +107,6 @@ class QskSpinBox::PrivateData this->repeatTimer.stop(); } - int decimals = 2; - int autoRepeatDelay = 300; int autoRepeatInterval = 100; @@ -184,28 +180,6 @@ bool QskSpinBox::isWrapping() const return m_data->wrapping; } -void QskSpinBox::setDecimals( int decimals ) -{ - decimals = qBound( 0, decimals, DBL_MAX_10_EXP + DBL_DIG ); - if ( decimals != m_data->decimals ) - { - m_data->decimals = decimals; - - update(); - resetImplicitSize(); - } -} - -int QskSpinBox::decimals() const -{ - return m_data->decimals; -} - -QString QskSpinBox::textFromValue( qreal value ) const -{ - return locale().toString( value, 'f', m_data->decimals ); -} - void QskSpinBox::increment( qreal offset ) { if ( m_data->wrapping ) diff --git a/src/controls/QskSpinBox.h b/src/controls/QskSpinBox.h index ffd5aa05..4083f9e6 100644 --- a/src/controls/QskSpinBox.h +++ b/src/controls/QskSpinBox.h @@ -19,9 +19,6 @@ class QSK_EXPORT QskSpinBox : public QskBoundedValueInput Q_PROPERTY( Decoration decoration READ decoration WRITE setDecoration RESET resetDecoration NOTIFY decorationChanged ) - Q_PROPERTY( int decimals READ decimals - WRITE setDecimals NOTIFY decimalsChanged ) - public: QSK_SUBCONTROLS( Panel, TextPanel, Text, UpPanel, UpIndicator, DownPanel, DownIndicator ) @@ -51,18 +48,11 @@ class QSK_EXPORT QskSpinBox : public QskBoundedValueInput void setWrapping( bool ); bool isWrapping() const; - void setDecimals( int ); - int decimals() const; - - virtual QString textFromValue( qreal ) const override; - void increment( qreal ) override; Q_SIGNALS: void decorationChanged( Decoration ); void wrappingChanged( bool ); - void decimalsChanged( int ); - void textChanged(); protected: void timerEvent( QTimerEvent* ) override;