File indexing completed on 2024-05-19 05:35:21
0001 #ifndef oxygenspinbox_data_h 0002 #define oxygenspinbox_data_h 0003 0004 ////////////////////////////////////////////////////////////////////////////// 0005 // oxygenspinboxdata.h 0006 // spinbox data container for up/down arrow hover (mouse-over) animations 0007 // ------------------- 0008 // 0009 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0010 // 0011 // SPDX-License-Identifier: MIT 0012 ////////////////////////////////////////////////////////////////////////////// 0013 0014 #include "oxygenanimationdata.h" 0015 0016 #include <QStyle> 0017 0018 namespace Oxygen 0019 { 0020 //* handles spinbox arrows hover 0021 class SpinBoxData : public AnimationData 0022 { 0023 Q_OBJECT 0024 0025 //* declare opacity property 0026 Q_PROPERTY(qreal upArrowOpacity READ upArrowOpacity WRITE setUpArrowOpacity) 0027 Q_PROPERTY(qreal downArrowOpacity READ downArrowOpacity WRITE setDownArrowOpacity) 0028 0029 public: 0030 //* constructor 0031 SpinBoxData(QObject *, QWidget *, int); 0032 0033 //* animation state 0034 bool updateState(QStyle::SubControl subControl, bool value) 0035 { 0036 if (subControl == QStyle::SC_SpinBoxUp) 0037 return _upArrowData.updateState(value); 0038 else if (subControl == QStyle::SC_SpinBoxDown) 0039 return _downArrowData.updateState(value); 0040 else 0041 return false; 0042 } 0043 0044 //* animation state 0045 bool isAnimated(QStyle::SubControl subControl) const 0046 { 0047 return ((subControl == QStyle::SC_SpinBoxUp && upArrowAnimation().data()->isRunning()) 0048 || (subControl == QStyle::SC_SpinBoxDown && downArrowAnimation().data()->isRunning())); 0049 } 0050 0051 //* opacity 0052 qreal opacity(QStyle::SubControl subControl) const 0053 { 0054 if (subControl == QStyle::SC_SpinBoxUp) 0055 return upArrowOpacity(); 0056 else if (subControl == QStyle::SC_SpinBoxDown) 0057 return downArrowOpacity(); 0058 else 0059 return OpacityInvalid; 0060 } 0061 0062 //* duration 0063 void setDuration(int duration) override 0064 { 0065 upArrowAnimation().data()->setDuration(duration); 0066 downArrowAnimation().data()->setDuration(duration); 0067 } 0068 0069 //*@name up arrow animation 0070 //@{ 0071 0072 //* opacity 0073 qreal upArrowOpacity(void) const 0074 { 0075 return _upArrowData._opacity; 0076 } 0077 0078 //* opacity 0079 void setUpArrowOpacity(qreal value) 0080 { 0081 value = digitize(value); 0082 if (_upArrowData._opacity == value) 0083 return; 0084 _upArrowData._opacity = value; 0085 setDirty(); 0086 } 0087 0088 //* animation 0089 Animation::Pointer upArrowAnimation(void) const 0090 { 0091 return _upArrowData._animation; 0092 } 0093 0094 //@} 0095 0096 //*@name down arrow animation 0097 //@{ 0098 0099 //* opacity 0100 qreal downArrowOpacity(void) const 0101 { 0102 return _downArrowData._opacity; 0103 } 0104 0105 //* opacity 0106 void setDownArrowOpacity(qreal value) 0107 { 0108 value = digitize(value); 0109 if (_downArrowData._opacity == value) 0110 return; 0111 _downArrowData._opacity = value; 0112 setDirty(); 0113 } 0114 0115 //* animation 0116 Animation::Pointer downArrowAnimation(void) const 0117 { 0118 return _downArrowData._animation; 0119 } 0120 0121 //@} 0122 0123 private: 0124 //* container for needed animation data 0125 class Data 0126 { 0127 public: 0128 //* default constructor 0129 Data(void) 0130 : _state(false) 0131 , _opacity(0) 0132 { 0133 } 0134 0135 //* state 0136 bool updateState(bool); 0137 0138 //* arrow state 0139 bool _state; 0140 0141 //* animation 0142 Animation::Pointer _animation; 0143 0144 //* opacity 0145 qreal _opacity; 0146 }; 0147 0148 //* up arrow data 0149 Data _upArrowData; 0150 0151 //* down arrow data 0152 Data _downArrowData; 0153 }; 0154 } 0155 0156 #endif