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