bde5501368411479369fe744fa60885ca8dbc883
[profile/ivi/qtdeclarative.git] / src / qtquick1 / util / qdeclarativeanimation_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
6 **
7 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #ifndef QDECLARATIVEANIMATION_H
43 #define QDECLARATIVEANIMATION_H
44
45 #include "QtQuick1/private/qdeclarativetransition_p.h"
46 #include "QtQuick1/private/qdeclarativestate_p.h"
47 #include <QtGui/qvector3d.h>
48
49 #include <QtDeclarative/qdeclarativepropertyvaluesource.h>
50 #include <QtDeclarative/qdeclarative.h>
51 #include <QtDeclarative/qdeclarativescriptstring.h>
52
53 #include <QtCore/qvariant.h>
54 #include <QtCore/qeasingcurve.h>
55 #include <QtCore/QAbstractAnimation>
56 #include <QtGui/qcolor.h>
57
58 QT_BEGIN_HEADER
59
60 QT_BEGIN_NAMESPACE
61
62
63 class QDeclarativeItem;
64 class QDeclarative1AbstractAnimationPrivate;
65 class QDeclarative1AnimationGroup;
66 class Q_QTQUICK1_EXPORT QDeclarative1AbstractAnimation : public QObject, public QDeclarativePropertyValueSource, public QDeclarativeParserStatus
67 {
68     Q_OBJECT
69     Q_DECLARE_PRIVATE(QDeclarative1AbstractAnimation)
70
71     Q_INTERFACES(QDeclarativeParserStatus)
72     Q_INTERFACES(QDeclarativePropertyValueSource)
73     Q_ENUMS(Loops)
74     Q_PROPERTY(bool running READ isRunning WRITE setRunning NOTIFY runningChanged)
75     Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
76     Q_PROPERTY(bool alwaysRunToEnd READ alwaysRunToEnd WRITE setAlwaysRunToEnd NOTIFY alwaysRunToEndChanged)
77     Q_PROPERTY(int loops READ loops WRITE setLoops NOTIFY loopCountChanged)
78     Q_CLASSINFO("DefaultMethod", "start()")
79
80 public:
81     QDeclarative1AbstractAnimation(QObject *parent=0);
82     virtual ~QDeclarative1AbstractAnimation();
83
84     enum Loops { Infinite = -2 };
85
86     bool isRunning() const;
87     void setRunning(bool);
88     bool isPaused() const;
89     void setPaused(bool);
90     bool alwaysRunToEnd() const;
91     void setAlwaysRunToEnd(bool);
92
93     int loops() const;
94     void setLoops(int);
95
96     int currentTime();
97     void setCurrentTime(int);
98
99     QDeclarative1AnimationGroup *group() const;
100     void setGroup(QDeclarative1AnimationGroup *);
101
102     void setDefaultTarget(const QDeclarativeProperty &);
103     void setDisableUserControl();
104
105     void classBegin();
106     void componentComplete();
107
108 Q_SIGNALS:
109     void started();
110     void completed();
111     void runningChanged(bool);
112     void pausedChanged(bool);
113     void alwaysRunToEndChanged(bool);
114     void loopCountChanged(int);
115
116 public Q_SLOTS:
117     void restart();
118     void start();
119     void pause();
120     void resume();
121     void stop();
122     void complete();
123
124 protected:
125     QDeclarative1AbstractAnimation(QDeclarative1AbstractAnimationPrivate &dd, QObject *parent);
126
127 public:
128     enum TransitionDirection { Forward, Backward };
129     virtual void transition(QDeclarative1StateActions &actions,
130                             QDeclarativeProperties &modified,
131                             TransitionDirection direction);
132     virtual QAbstractAnimation *qtAnimation() = 0;
133
134 private Q_SLOTS:
135     void timelineComplete();
136     void componentFinalized();
137 private:
138     virtual void setTarget(const QDeclarativeProperty &);
139     void notifyRunningChanged(bool running);
140     friend class QDeclarative1Behavior;
141
142
143 };
144
145 class QDeclarative1PauseAnimationPrivate;
146 class Q_AUTOTEST_EXPORT QDeclarative1PauseAnimation : public QDeclarative1AbstractAnimation
147 {
148     Q_OBJECT
149     Q_DECLARE_PRIVATE(QDeclarative1PauseAnimation)
150
151     Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
152
153 public:
154     QDeclarative1PauseAnimation(QObject *parent=0);
155     virtual ~QDeclarative1PauseAnimation();
156
157     int duration() const;
158     void setDuration(int);
159
160 Q_SIGNALS:
161     void durationChanged(int);
162
163 protected:
164     virtual QAbstractAnimation *qtAnimation();
165 };
166
167 class QDeclarative1ScriptActionPrivate;
168 class Q_QTQUICK1_EXPORT QDeclarative1ScriptAction : public QDeclarative1AbstractAnimation
169 {
170     Q_OBJECT
171     Q_DECLARE_PRIVATE(QDeclarative1ScriptAction)
172
173     Q_PROPERTY(QDeclarativeScriptString script READ script WRITE setScript)
174     Q_PROPERTY(QString scriptName READ stateChangeScriptName WRITE setStateChangeScriptName)
175
176 public:
177     QDeclarative1ScriptAction(QObject *parent=0);
178     virtual ~QDeclarative1ScriptAction();
179
180     QDeclarativeScriptString script() const;
181     void setScript(const QDeclarativeScriptString &);
182
183     QString stateChangeScriptName() const;
184     void setStateChangeScriptName(const QString &);
185
186 protected:
187     virtual void transition(QDeclarative1StateActions &actions,
188                             QDeclarativeProperties &modified,
189                             TransitionDirection direction);
190     virtual QAbstractAnimation *qtAnimation();
191 };
192
193 class QDeclarative1PropertyActionPrivate;
194 class QDeclarative1PropertyAction : public QDeclarative1AbstractAnimation
195 {
196     Q_OBJECT
197     Q_DECLARE_PRIVATE(QDeclarative1PropertyAction)
198
199     Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged)
200     Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged)
201     Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged)
202     Q_PROPERTY(QDeclarativeListProperty<QObject> targets READ targets)
203     Q_PROPERTY(QDeclarativeListProperty<QObject> exclude READ exclude)
204     Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
205
206 public:
207     QDeclarative1PropertyAction(QObject *parent=0);
208     virtual ~QDeclarative1PropertyAction();
209
210     QObject *target() const;
211     void setTarget(QObject *);
212
213     QString property() const;
214     void setProperty(const QString &);
215
216     QString properties() const;
217     void setProperties(const QString &);
218
219     QDeclarativeListProperty<QObject> targets();
220     QDeclarativeListProperty<QObject> exclude();
221
222     QVariant value() const;
223     void setValue(const QVariant &);
224
225 Q_SIGNALS:
226     void valueChanged(const QVariant &);
227     void propertiesChanged(const QString &);
228     void targetChanged();
229     void propertyChanged();
230
231 protected:
232     virtual void transition(QDeclarative1StateActions &actions,
233                             QDeclarativeProperties &modified,
234                             TransitionDirection direction);
235     virtual QAbstractAnimation *qtAnimation();
236 };
237
238 class QDeclarative1PropertyAnimationPrivate;
239 class Q_AUTOTEST_EXPORT QDeclarative1PropertyAnimation : public QDeclarative1AbstractAnimation
240 {
241     Q_OBJECT
242     Q_DECLARE_PRIVATE(QDeclarative1PropertyAnimation)
243
244     Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
245     Q_PROPERTY(QVariant from READ from WRITE setFrom NOTIFY fromChanged)
246     Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged)
247     Q_PROPERTY(QEasingCurve easing READ easing WRITE setEasing NOTIFY easingChanged)
248     Q_PROPERTY(QObject *target READ target WRITE setTarget NOTIFY targetChanged)
249     Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged)
250     Q_PROPERTY(QString properties READ properties WRITE setProperties NOTIFY propertiesChanged)
251     Q_PROPERTY(QDeclarativeListProperty<QObject> targets READ targets)
252     Q_PROPERTY(QDeclarativeListProperty<QObject> exclude READ exclude)
253
254 public:
255     QDeclarative1PropertyAnimation(QObject *parent=0);
256     virtual ~QDeclarative1PropertyAnimation();
257
258     virtual int duration() const;
259     virtual void setDuration(int);
260
261     QVariant from() const;
262     void setFrom(const QVariant &);
263
264     QVariant to() const;
265     void setTo(const QVariant &);
266
267     QEasingCurve easing() const;
268     void setEasing(const QEasingCurve &);
269
270     QObject *target() const;
271     void setTarget(QObject *);
272
273     QString property() const;
274     void setProperty(const QString &);
275
276     QString properties() const;
277     void setProperties(const QString &);
278
279     QDeclarativeListProperty<QObject> targets();
280     QDeclarativeListProperty<QObject> exclude();
281
282 protected:
283     QDeclarative1PropertyAnimation(QDeclarative1PropertyAnimationPrivate &dd, QObject *parent);
284     virtual void transition(QDeclarative1StateActions &actions,
285                             QDeclarativeProperties &modified,
286                             TransitionDirection direction);
287     virtual QAbstractAnimation *qtAnimation();
288
289 Q_SIGNALS:
290     void durationChanged(int);
291     void fromChanged(QVariant);
292     void toChanged(QVariant);
293     void easingChanged(const QEasingCurve &);
294     void propertiesChanged(const QString &);
295     void targetChanged();
296     void propertyChanged();
297 };
298
299 class Q_AUTOTEST_EXPORT QDeclarative1ColorAnimation : public QDeclarative1PropertyAnimation
300 {
301     Q_OBJECT
302     Q_DECLARE_PRIVATE(QDeclarative1PropertyAnimation)
303     Q_PROPERTY(QColor from READ from WRITE setFrom)
304     Q_PROPERTY(QColor to READ to WRITE setTo)
305
306 public:
307     QDeclarative1ColorAnimation(QObject *parent=0);
308     virtual ~QDeclarative1ColorAnimation();
309
310     QColor from() const;
311     void setFrom(const QColor &);
312
313     QColor to() const;
314     void setTo(const QColor &);
315 };
316
317 class Q_AUTOTEST_EXPORT QDeclarative1NumberAnimation : public QDeclarative1PropertyAnimation
318 {
319     Q_OBJECT
320     Q_DECLARE_PRIVATE(QDeclarative1PropertyAnimation)
321
322     Q_PROPERTY(qreal from READ from WRITE setFrom)
323     Q_PROPERTY(qreal to READ to WRITE setTo)
324
325 public:
326     QDeclarative1NumberAnimation(QObject *parent=0);
327     virtual ~QDeclarative1NumberAnimation();
328
329     qreal from() const;
330     void setFrom(qreal);
331
332     qreal to() const;
333     void setTo(qreal);
334
335 protected:
336     QDeclarative1NumberAnimation(QDeclarative1PropertyAnimationPrivate &dd, QObject *parent);
337
338 private:
339     void init();
340 };
341
342 class Q_AUTOTEST_EXPORT QDeclarative1Vector3dAnimation : public QDeclarative1PropertyAnimation
343 {
344     Q_OBJECT
345     Q_DECLARE_PRIVATE(QDeclarative1PropertyAnimation)
346
347     Q_PROPERTY(QVector3D from READ from WRITE setFrom)
348     Q_PROPERTY(QVector3D to READ to WRITE setTo)
349
350 public:
351     QDeclarative1Vector3dAnimation(QObject *parent=0);
352     virtual ~QDeclarative1Vector3dAnimation();
353
354     QVector3D from() const;
355     void setFrom(QVector3D);
356
357     QVector3D to() const;
358     void setTo(QVector3D);
359 };
360
361 class QDeclarative1RotationAnimationPrivate;
362 class Q_AUTOTEST_EXPORT QDeclarative1RotationAnimation : public QDeclarative1PropertyAnimation
363 {
364     Q_OBJECT
365     Q_DECLARE_PRIVATE(QDeclarative1RotationAnimation)
366     Q_ENUMS(RotationDirection)
367
368     Q_PROPERTY(qreal from READ from WRITE setFrom)
369     Q_PROPERTY(qreal to READ to WRITE setTo)
370     Q_PROPERTY(RotationDirection direction READ direction WRITE setDirection NOTIFY directionChanged)
371
372 public:
373     QDeclarative1RotationAnimation(QObject *parent=0);
374     virtual ~QDeclarative1RotationAnimation();
375
376     qreal from() const;
377     void setFrom(qreal);
378
379     qreal to() const;
380     void setTo(qreal);
381
382     enum RotationDirection { Numerical, Shortest, Clockwise, Counterclockwise };
383     RotationDirection direction() const;
384     void setDirection(RotationDirection direction);
385
386 Q_SIGNALS:
387     void directionChanged();
388 };
389
390 class QDeclarative1AnimationGroupPrivate;
391 class Q_AUTOTEST_EXPORT QDeclarative1AnimationGroup : public QDeclarative1AbstractAnimation
392 {
393     Q_OBJECT
394     Q_DECLARE_PRIVATE(QDeclarative1AnimationGroup)
395
396     Q_CLASSINFO("DefaultProperty", "animations")
397     Q_PROPERTY(QDeclarativeListProperty<QDeclarative1AbstractAnimation> animations READ animations)
398
399 public:
400     QDeclarative1AnimationGroup(QObject *parent);
401     virtual ~QDeclarative1AnimationGroup();
402
403     QDeclarativeListProperty<QDeclarative1AbstractAnimation> animations();
404     friend class QDeclarative1AbstractAnimation;
405
406 protected:
407     QDeclarative1AnimationGroup(QDeclarative1AnimationGroupPrivate &dd, QObject *parent);
408 };
409
410 class QDeclarative1SequentialAnimation : public QDeclarative1AnimationGroup
411 {
412     Q_OBJECT
413     Q_DECLARE_PRIVATE(QDeclarative1AnimationGroup)
414
415 public:
416     QDeclarative1SequentialAnimation(QObject *parent=0);
417     virtual ~QDeclarative1SequentialAnimation();
418
419 protected:
420     virtual void transition(QDeclarative1StateActions &actions,
421                             QDeclarativeProperties &modified,
422                             TransitionDirection direction);
423     virtual QAbstractAnimation *qtAnimation();
424 };
425
426 class QDeclarative1ParallelAnimation : public QDeclarative1AnimationGroup
427 {
428     Q_OBJECT
429     Q_DECLARE_PRIVATE(QDeclarative1AnimationGroup)
430
431 public:
432     QDeclarative1ParallelAnimation(QObject *parent=0);
433     virtual ~QDeclarative1ParallelAnimation();
434
435 protected:
436     virtual void transition(QDeclarative1StateActions &actions,
437                             QDeclarativeProperties &modified,
438                             TransitionDirection direction);
439     virtual QAbstractAnimation *qtAnimation();
440 };
441
442 class QDeclarative1ParentAnimationPrivate;
443 class QDeclarative1ParentAnimation : public QDeclarative1AnimationGroup
444 {
445     Q_OBJECT
446     Q_DECLARE_PRIVATE(QDeclarative1ParentAnimation)
447
448     Q_PROPERTY(QDeclarativeItem *target READ target WRITE setTarget NOTIFY targetChanged)
449     Q_PROPERTY(QDeclarativeItem *newParent READ newParent WRITE setNewParent NOTIFY newParentChanged)
450     Q_PROPERTY(QDeclarativeItem *via READ via WRITE setVia NOTIFY viaChanged)
451
452 public:
453     QDeclarative1ParentAnimation(QObject *parent=0);
454     virtual ~QDeclarative1ParentAnimation();
455
456     QDeclarativeItem *target() const;
457     void setTarget(QDeclarativeItem *);
458
459     QDeclarativeItem *newParent() const;
460     void setNewParent(QDeclarativeItem *);
461
462     QDeclarativeItem *via() const;
463     void setVia(QDeclarativeItem *);
464
465 Q_SIGNALS:
466     void targetChanged();
467     void newParentChanged();
468     void viaChanged();
469
470 protected:
471     virtual void transition(QDeclarative1StateActions &actions,
472                             QDeclarativeProperties &modified,
473                             TransitionDirection direction);
474     virtual QAbstractAnimation *qtAnimation();
475 };
476
477 class QDeclarative1AnchorAnimationPrivate;
478 class QDeclarative1AnchorAnimation : public QDeclarative1AbstractAnimation
479 {
480     Q_OBJECT
481     Q_DECLARE_PRIVATE(QDeclarative1AnchorAnimation)
482     Q_PROPERTY(QDeclarativeListProperty<QDeclarativeItem> targets READ targets)
483     Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged)
484     Q_PROPERTY(QEasingCurve easing READ easing WRITE setEasing NOTIFY easingChanged)
485
486 public:
487     QDeclarative1AnchorAnimation(QObject *parent=0);
488     virtual ~QDeclarative1AnchorAnimation();
489
490     QDeclarativeListProperty<QDeclarativeItem> targets();
491
492     int duration() const;
493     void setDuration(int);
494
495     QEasingCurve easing() const;
496     void setEasing(const QEasingCurve &);
497
498 Q_SIGNALS:
499     void durationChanged(int);
500     void easingChanged(const QEasingCurve&);
501
502 protected:
503     virtual void transition(QDeclarative1StateActions &actions,
504                             QDeclarativeProperties &modified,
505                             TransitionDirection direction);
506     virtual QAbstractAnimation *qtAnimation();
507 };
508
509 QT_END_NAMESPACE
510
511 QML_DECLARE_TYPE(QDeclarative1AbstractAnimation)
512 QML_DECLARE_TYPE(QDeclarative1PauseAnimation)
513 QML_DECLARE_TYPE(QDeclarative1ScriptAction)
514 QML_DECLARE_TYPE(QDeclarative1PropertyAction)
515 QML_DECLARE_TYPE(QDeclarative1PropertyAnimation)
516 QML_DECLARE_TYPE(QDeclarative1ColorAnimation)
517 QML_DECLARE_TYPE(QDeclarative1NumberAnimation)
518 QML_DECLARE_TYPE(QDeclarative1SequentialAnimation)
519 QML_DECLARE_TYPE(QDeclarative1ParallelAnimation)
520 QML_DECLARE_TYPE(QDeclarative1Vector3dAnimation)
521 QML_DECLARE_TYPE(QDeclarative1RotationAnimation)
522 QML_DECLARE_TYPE(QDeclarative1ParentAnimation)
523 QML_DECLARE_TYPE(QDeclarative1AnchorAnimation)
524
525 QT_END_HEADER
526
527 #endif // QDECLARATIVEANIMATION_H