1 #ifndef oxygenmdiwindow_data_h 2 #define oxygenmdiwindow_data_h 3 4 ////////////////////////////////////////////////////////////////////////////// 5 // oxygenmdiwindowdata.h 6 // mdi window data container for window titlebar buttons 7 // ------------------- 8 // 9 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 10 // 11 // SPDX-License-Identifier: MIT 12 ////////////////////////////////////////////////////////////////////////////// 13 14 #include "oxygenanimationdata.h" 15 16 #include <QStyle> 17 18 namespace Oxygen 19 { 20 21 //* handles mdiwindow arrows hover 22 class MdiWindowData: public AnimationData 23 { 24 25 Q_OBJECT 26 27 //* declare opacity property 28 Q_PROPERTY( qreal currentOpacity READ currentOpacity WRITE setCurrentOpacity ) 29 Q_PROPERTY( qreal previousOpacity READ previousOpacity WRITE setPreviousOpacity ) 30 31 public: 32 33 //* constructor 34 MdiWindowData( QObject*, QWidget*, int ); 35 36 //* animation state 37 bool updateState( int primitive, bool value ); 38 39 //* animation state isAnimated(int primitive)40 bool isAnimated( int primitive ) const 41 { 42 return( 43 ( primitive == _currentData._primitive && currentAnimation().data()->isRunning() ) || 44 ( primitive == _previousData._primitive && previousAnimation().data()->isRunning() ) ); 45 } 46 47 //* opacity opacity(int primitive)48 qreal opacity( int primitive ) const 49 { 50 if( primitive == _currentData._primitive ) return currentOpacity(); 51 else if( primitive == _previousData._primitive ) return previousOpacity(); 52 else return OpacityInvalid; 53 } 54 55 //* duration setDuration(int duration)56 void setDuration( int duration ) override 57 { 58 currentAnimation().data()->setDuration( duration ); 59 previousAnimation().data()->setDuration( duration ); 60 } 61 62 //*@name current animation 63 //@{ 64 65 //* opacity currentOpacity(void)66 qreal currentOpacity( void ) const 67 { return _currentData._opacity; } 68 69 //* opacity setCurrentOpacity(qreal value)70 void setCurrentOpacity( qreal value ) 71 { 72 value = digitize( value ); 73 if( _currentData._opacity == value ) return; 74 _currentData._opacity = value; 75 setDirty(); 76 } 77 78 //* animation currentAnimation(void)79 Animation::Pointer currentAnimation( void ) const 80 { return _currentData._animation; } 81 82 //@} 83 //*@name previous animation 84 //@{ 85 86 //* opacity previousOpacity(void)87 qreal previousOpacity( void ) const 88 { return _previousData._opacity; } 89 90 //* opacity setPreviousOpacity(qreal value)91 void setPreviousOpacity( qreal value ) 92 { 93 value = digitize( value ); 94 if( _previousData._opacity == value ) return; 95 _previousData._opacity = value; 96 setDirty(); 97 } 98 99 //* animation previousAnimation(void)100 Animation::Pointer previousAnimation( void ) const 101 { return _previousData._animation; } 102 103 //@} 104 105 private: 106 107 //* container for needed animation data 108 class Data 109 { 110 111 public: 112 113 //* default constructor 114 Data() = default; 115 116 //* subcontrol 117 bool updateSubControl( int ); 118 119 //* subcontrol 120 int _primitive = 0; 121 122 //* animation 123 Animation::Pointer _animation; 124 125 //* opacity 126 qreal _opacity = 0; 127 128 }; 129 130 //* current data 131 Data _currentData; 132 133 //* previous data 134 Data _previousData; 135 136 }; 137 138 139 } 140 141 #endif 142