1 /* 2 * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr> 3 * 4 * SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef breezespinbox_data_h 8 #define breezespinbox_data_h 9 10 #include "breezeanimationdata.h" 11 12 #include <QStyle> 13 14 namespace Breeze 15 { 16 17 //* handles spinbox arrows hover 18 class SpinBoxData: public AnimationData 19 { 20 21 Q_OBJECT 22 23 //* declare opacity property 24 Q_PROPERTY( qreal upArrowOpacity READ upArrowOpacity WRITE setUpArrowOpacity ) 25 Q_PROPERTY( qreal downArrowOpacity READ downArrowOpacity WRITE setDownArrowOpacity ) 26 27 public: 28 29 //* constructor 30 SpinBoxData( QObject*, QWidget*, int ); 31 32 //* animation state updateState(QStyle::SubControl subControl,bool value)33 bool updateState( QStyle::SubControl subControl, bool value ) 34 { 35 if( subControl == QStyle::SC_SpinBoxUp ) return _upArrowData.updateState( value ); 36 else if( subControl == QStyle::SC_SpinBoxDown ) return _downArrowData.updateState( value ); 37 else return false; 38 } 39 40 //* animation state isAnimated(QStyle::SubControl subControl)41 bool isAnimated( QStyle::SubControl subControl ) const 42 { 43 return( 44 ( subControl == QStyle::SC_SpinBoxUp && upArrowAnimation().data()->isRunning() ) || 45 ( subControl == QStyle::SC_SpinBoxDown && downArrowAnimation().data()->isRunning() ) ); 46 } 47 48 //* opacity opacity(QStyle::SubControl subControl)49 qreal opacity( QStyle::SubControl subControl ) const 50 { 51 if( subControl == QStyle::SC_SpinBoxUp ) return upArrowOpacity(); 52 else if( subControl == QStyle::SC_SpinBoxDown ) return downArrowOpacity(); 53 else return OpacityInvalid; 54 } 55 56 //* duration setDuration(int duration)57 void setDuration( int duration ) override 58 { 59 upArrowAnimation().data()->setDuration( duration ); 60 downArrowAnimation().data()->setDuration( duration ); 61 } 62 63 //*@name up arrow animation 64 //@{ 65 66 //* opacity upArrowOpacity()67 qreal upArrowOpacity() const 68 { return _upArrowData._opacity; } 69 70 //* opacity setUpArrowOpacity(qreal value)71 void setUpArrowOpacity( qreal value ) 72 { 73 value = digitize( value ); 74 if( _upArrowData._opacity == value ) return; 75 _upArrowData._opacity = value; 76 setDirty(); 77 } 78 79 //* animation upArrowAnimation()80 Animation::Pointer upArrowAnimation() const 81 { return _upArrowData._animation; } 82 83 //@} 84 85 //*@name down arrow animation 86 //@{ 87 88 //* opacity downArrowOpacity()89 qreal downArrowOpacity() const 90 { return _downArrowData._opacity; } 91 92 //* opacity setDownArrowOpacity(qreal value)93 void setDownArrowOpacity( qreal value ) 94 { 95 value = digitize( value ); 96 if( _downArrowData._opacity == value ) return; 97 _downArrowData._opacity = value; 98 setDirty(); 99 } 100 101 //* animation downArrowAnimation()102 Animation::Pointer downArrowAnimation() const 103 { return _downArrowData._animation; } 104 105 //@} 106 107 private: 108 109 //* container for needed animation data 110 class Data 111 { 112 113 public: 114 115 //* default constructor Data()116 Data(): 117 _state( false ), 118 _opacity(0) 119 {} 120 121 //* state 122 bool updateState( bool ); 123 124 //* arrow state 125 bool _state; 126 127 //* animation 128 Animation::Pointer _animation; 129 130 //* opacity 131 qreal _opacity; 132 133 }; 134 135 //* up arrow data 136 Data _upArrowData; 137 138 //* down arrow data 139 Data _downArrowData; 140 141 }; 142 143 144 } 145 146 #endif 147