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