File: rotationstacked_p.h

package info (click to toggle)
kde4libs 4%3A4.14.2-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 82,316 kB
  • sloc: cpp: 761,810; xml: 12,344; ansic: 6,295; java: 4,060; perl: 2,938; yacc: 2,507; python: 1,207; sh: 1,179; ruby: 337; lex: 278; makefile: 29
file content (126 lines) | stat: -rw-r--r-- 4,108 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/*
    Copyright (C) 2009 Igor Trindade Oliveira <igor.oliveira@indt.org.br>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library.  If not, see <http://www.gnu.org/licenses/>.
*/

/**
 * @file This file contains the definition for the StackedRotationAnimation.
 */

#ifndef PLASMA_ROTATIONSTACKED_P_H
#define PLASMA_ROTATIONSTACKED_P_H

#include <plasma/animations/easinganimation_p.h>
#include <plasma/plasma_export.h>

#include <QGraphicsLayoutItem>

class QGraphicsRotation;
class StackedLayout;

namespace Plasma {

/* TODO:
 * create a parent class for rotations
 */
/**
 * @class RotationStackedAnimation plasma/animations/rotationstacked_p.h
 * @short 3D like rotation animation
 * Use this class when you want to rotate a widget along an axis (e.g. Y)
 * and display a 'hidden' widget behind it. See also \ref RotationAnimation.
 */
class RotationStackedAnimation : public EasingAnimation
{
    Q_OBJECT
    Q_PROPERTY(MovementDirection movementDirection READ movementDirection WRITE setMovementDirection)
    Q_PROPERTY(Reference reference READ reference WRITE setReference)
    Q_PROPERTY(QGraphicsLayoutItem* layout READ layout)
    Q_PROPERTY(QGraphicsWidget* backWidget READ backWidget WRITE setBackWidget)

public:
    explicit RotationStackedAnimation(QObject *parent = 0);

    ~RotationStackedAnimation();

    /**
     * Set the animation movement direction (e.g. MoveAny, MoveUp, MoveDown,
     * MoveLeft, MoveRight) which can be combined (i.e. MoveUp|MoveLeft).
     * @param direction animation direction
     */
    void setMovementDirection(const Animation::MovementDirection &direction);

    /**
     * Get the animation movement direction.
     */
    Animation::MovementDirection movementDirection() const;

    /**
     * Set the animation rotation reference (e.g. Center, Up, Down, Left,
     * Right) which can be combined (i.e. Center|Up).
     * @param reference animation reference
     */
    void setReference(const Animation::Reference &reference);

    /**
     * Get the animation rotation reference.
     */
    Animation::Reference reference() const;

    /**
     * Get the layout where the widgetToAnimate and backWidget are.
     */
    QGraphicsLayoutItem *layout();

    /**
     * Get the back widget
     */

    QGraphicsWidget *backWidget();

    /**
     * Set the back widget that is used after the animation to be finished
     * @param backWidget The back widget
     */
    void setBackWidget(QGraphicsWidget *backWidget);

protected:
    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
    void updateEffectiveTime(int currentTime);

private:
    /**
     * Updates the front and back widget rotation animation transformations,
     * according to the given animation reference point and direction.
     */
    void updateTransformations();

    /** Animation reference (see \ref Animation::Reference) */
    Animation::Reference m_animReference;
    /** Animation movement direction (see \ref Animation::MovementDirection) */
    Animation::MovementDirection m_animDirection;
    /**  Object the animation(s) should act upon. */
    QWeakPointer<QGraphicsWidget> m_backWidget;
    /** Layout where widget would be added */
    QWeakPointer<StackedLayout> m_wLayout;
    /** Back Widget Rotation transform object */
    QGraphicsRotation *m_backRotation;
    /** Front Widget Rotation transform object */
    QGraphicsRotation *m_frontRotation;

    static const int s_sideAngle;
};
} // Plasma

#endif // PLASMA_ROTATIONSTACKED_P_H