animation/qanimationgroup.cpp

Source codeSwitch to Preprocessed file
LineSource CodeCoverage
1/**************************************************************************** -
2** -
3** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -
4** Contact: http://www.qt-project.org/legal -
5** -
6** This file is part of the QtCore module of the Qt Toolkit. -
7** -
8** $QT_BEGIN_LICENSE:LGPL$ -
9** Commercial License Usage -
10** Licensees holding valid commercial Qt licenses may use this file in -
11** accordance with the commercial license agreement provided with the -
12** Software or, alternatively, in accordance with the terms contained in -
13** a written agreement between you and Digia. For licensing terms and -
14** conditions see http://qt.digia.com/licensing. For further information -
15** use the contact form at http://qt.digia.com/contact-us. -
16** -
17** GNU Lesser General Public License Usage -
18** Alternatively, this file may be used under the terms of the GNU Lesser -
19** General Public License version 2.1 as published by the Free Software -
20** Foundation and appearing in the file LICENSE.LGPL included in the -
21** packaging of this file. Please review the following information to -
22** ensure the GNU Lesser General Public License version 2.1 requirements -
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -
24** -
25** In addition, as a special exception, Digia gives you certain additional -
26** rights. These rights are described in the Digia Qt LGPL Exception -
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -
28** -
29** GNU General Public License Usage -
30** Alternatively, this file may be used under the terms of the GNU -
31** General Public License version 3.0 as published by the Free Software -
32** Foundation and appearing in the file LICENSE.GPL included in the -
33** packaging of this file. Please review the following information to -
34** ensure the GNU General Public License version 3.0 requirements will be -
35** met: http://www.gnu.org/copyleft/gpl.html. -
36** -
37** -
38** $QT_END_LICENSE$ -
39** -
40****************************************************************************/ -
41 -
42/*! -
43 \class QAnimationGroup -
44 \inmodule QtCore -
45 \brief The QAnimationGroup class is an abstract base class for groups of animations. -
46 \since 4.6 -
47 \ingroup animation -
48 -
49 An animation group is a container for animations (subclasses of -
50 QAbstractAnimation). A group is usually responsible for managing -
51 the \l{QAbstractAnimation::State}{state} of its animations, i.e., -
52 it decides when to start, stop, resume, and pause them. Currently, -
53 Qt provides two such groups: QParallelAnimationGroup and -
54 QSequentialAnimationGroup. Look up their class descriptions for -
55 details. -
56 -
57 Since QAnimationGroup inherits from QAbstractAnimation, you can -
58 combine groups, and easily construct complex animation graphs. -
59 You can query QAbstractAnimation for the group it belongs to -
60 (using the \l{QAbstractAnimation::}{group()} function). -
61 -
62 To start a top-level animation group, you simply use the -
63 \l{QAbstractAnimation::}{start()} function from -
64 QAbstractAnimation. By a top-level animation group, we think of a -
65 group that itself is not contained within another group. Starting -
66 sub groups directly is not supported, and may lead to unexpected -
67 behavior. -
68 -
69 \omit OK, we'll put in a snippet on this here \endomit -
70 -
71 QAnimationGroup provides methods for adding and retrieving -
72 animations. Besides that, you can remove animations by calling -
73 remove(), and clear the animation group by calling -
74 clear(). You may keep track of changes in the group's -
75 animations by listening to QEvent::ChildAdded and -
76 QEvent::ChildRemoved events. -
77 -
78 \omit OK, let's find a snippet here as well. \endomit -
79 -
80 QAnimationGroup takes ownership of the animations it manages, and -
81 ensures that they are deleted when the animation group is deleted. -
82 -
83 \sa QAbstractAnimation, QVariantAnimation, {The Animation Framework} -
84*/ -
85 -
86#include "qanimationgroup.h" -
87#include <QtCore/qdebug.h> -
88#include <QtCore/qcoreevent.h> -
89#include "qanimationgroup_p.h" -
90 -
91#ifndef QT_NO_ANIMATION -
92 -
93QT_BEGIN_NAMESPACE -
94 -
95 -
96/*! -
97 Constructs a QAnimationGroup. -
98 \a parent is passed to QObject's constructor. -
99*/ -
100QAnimationGroup::QAnimationGroup(QObject *parent) -
101 : QAbstractAnimation(*new QAnimationGroupPrivate, parent) -
102{ -
103}
executed: }
Execution Count:1
1
104 -
105/*! -
106 \internal -
107*/ -
108QAnimationGroup::QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent) -
109 : QAbstractAnimation(dd, parent) -
110{ -
111}
executed: }
Execution Count:145
145
112 -
113/*! -
114 Destroys the animation group. It will also destroy all its animations. -
115*/ -
116QAnimationGroup::~QAnimationGroup() -
117{ -
118} -
119 -
120/*! -
121 Returns a pointer to the animation at \a index in this group. This -
122 function is useful when you need access to a particular animation. \a -
123 index is between 0 and animationCount() - 1. -
124 -
125 \sa animationCount(), indexOfAnimation() -
126*/ -
127QAbstractAnimation *QAnimationGroup::animationAt(int index) const -
128{ -
129 Q_D(const QAnimationGroup);
executed (the execution status of this line is deduced): const QAnimationGroupPrivate * const d = d_func();
-
130 -
131 if (index < 0 || index >= d->animations.size()) {
partially evaluated: index < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:85
partially evaluated: index >= d->animations.size()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:85
0-85
132 qWarning("QAnimationGroup::animationAt: index is out of bounds");
never executed (the execution status of this line is deduced): QMessageLogger("animation/qanimationgroup.cpp", 132, __PRETTY_FUNCTION__).warning("QAnimationGroup::animationAt: index is out of bounds");
-
133 return 0;
never executed: return 0;
0
134 } -
135 -
136 return d->animations.at(index);
executed: return d->animations.at(index);
Execution Count:85
85
137} -
138 -
139 -
140/*! -
141 Returns the number of animations managed by this group. -
142 -
143 \sa indexOfAnimation(), addAnimation(), animationAt() -
144*/ -
145int QAnimationGroup::animationCount() const -
146{ -
147 Q_D(const QAnimationGroup);
executed (the execution status of this line is deduced): const QAnimationGroupPrivate * const d = d_func();
-
148 return d->animations.size();
executed: return d->animations.size();
Execution Count:37
37
149} -
150 -
151/*! -
152 Returns the index of \a animation. The returned index can be passed -
153 to the other functions that take an index as an argument. -
154 -
155 \sa insertAnimation(), animationAt(), takeAnimation() -
156*/ -
157int QAnimationGroup::indexOfAnimation(QAbstractAnimation *animation) const -
158{ -
159 Q_D(const QAnimationGroup);
never executed (the execution status of this line is deduced): const QAnimationGroupPrivate * const d = d_func();
-
160 return d->animations.indexOf(animation);
never executed: return d->animations.indexOf(animation);
0
161} -
162 -
163/*! -
164 Adds \a animation to this group. This will call insertAnimation with -
165 index equals to animationCount(). -
166 -
167 \note The group takes ownership of the animation. -
168 -
169 \sa removeAnimation() -
170*/ -
171void QAnimationGroup::addAnimation(QAbstractAnimation *animation) -
172{ -
173 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
174 insertAnimation(d->animations.count(), animation);
executed (the execution status of this line is deduced): insertAnimation(d->animations.count(), animation);
-
175}
executed: }
Execution Count:335
335
176 -
177/*! -
178 Inserts \a animation into this animation group at \a index. -
179 If \a index is 0 the animation is inserted at the beginning. -
180 If \a index is animationCount(), the animation is inserted at the end. -
181 -
182 \note The group takes ownership of the animation. -
183 -
184 \sa takeAnimation(), addAnimation(), indexOfAnimation(), removeAnimation() -
185*/ -
186void QAnimationGroup::insertAnimation(int index, QAbstractAnimation *animation) -
187{ -
188 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
189 -
190 if (index < 0 || index > d->animations.size()) {
partially evaluated: index < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:337
partially evaluated: index > d->animations.size()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:337
0-337
191 qWarning("QAnimationGroup::insertAnimation: index is out of bounds");
never executed (the execution status of this line is deduced): QMessageLogger("animation/qanimationgroup.cpp", 191, __PRETTY_FUNCTION__).warning("QAnimationGroup::insertAnimation: index is out of bounds");
-
192 return;
never executed: return;
0
193 } -
194 -
195 if (QAnimationGroup *oldGroup = animation->group())
evaluated: QAnimationGroup *oldGroup = animation->group()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:335
2-335
196 oldGroup->removeAnimation(animation);
executed: oldGroup->removeAnimation(animation);
Execution Count:2
2
197 -
198 d->animations.insert(index, animation);
executed (the execution status of this line is deduced): d->animations.insert(index, animation);
-
199 QAbstractAnimationPrivate::get(animation)->group = this;
executed (the execution status of this line is deduced): QAbstractAnimationPrivate::get(animation)->group = this;
-
200 // this will make sure that ChildAdded event is sent to 'this' -
201 animation->setParent(this);
executed (the execution status of this line is deduced): animation->setParent(this);
-
202 d->animationInsertedAt(index);
executed (the execution status of this line is deduced): d->animationInsertedAt(index);
-
203}
executed: }
Execution Count:337
337
204 -
205/*! -
206 Removes \a animation from this group. The ownership of \a animation is -
207 transferred to the caller. -
208 -
209 \sa takeAnimation(), insertAnimation(), addAnimation() -
210*/ -
211void QAnimationGroup::removeAnimation(QAbstractAnimation *animation) -
212{ -
213 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
214 -
215 if (!animation) {
partially evaluated: !animation
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:8
0-8
216 qWarning("QAnimationGroup::remove: cannot remove null animation");
never executed (the execution status of this line is deduced): QMessageLogger("animation/qanimationgroup.cpp", 216, __PRETTY_FUNCTION__).warning("QAnimationGroup::remove: cannot remove null animation");
-
217 return;
never executed: return;
0
218 } -
219 int index = d->animations.indexOf(animation);
executed (the execution status of this line is deduced): int index = d->animations.indexOf(animation);
-
220 if (index == -1) {
partially evaluated: index == -1
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:8
0-8
221 qWarning("QAnimationGroup::remove: animation is not part of this group");
never executed (the execution status of this line is deduced): QMessageLogger("animation/qanimationgroup.cpp", 221, __PRETTY_FUNCTION__).warning("QAnimationGroup::remove: animation is not part of this group");
-
222 return;
never executed: return;
0
223 } -
224 -
225 takeAnimation(index);
executed (the execution status of this line is deduced): takeAnimation(index);
-
226}
executed: }
Execution Count:8
8
227 -
228/*! -
229 Returns the animation at \a index and removes it from the animation group. -
230 -
231 \note The ownership of the animation is transferred to the caller. -
232 -
233 \sa removeAnimation(), addAnimation(), insertAnimation(), indexOfAnimation() -
234*/ -
235QAbstractAnimation *QAnimationGroup::takeAnimation(int index) -
236{ -
237 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
238 if (index < 0 || index >= d->animations.size()) {
partially evaluated: index < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:229
partially evaluated: index >= d->animations.size()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:229
0-229
239 qWarning("QAnimationGroup::takeAnimation: no animation at index %d", index);
never executed (the execution status of this line is deduced): QMessageLogger("animation/qanimationgroup.cpp", 239, __PRETTY_FUNCTION__).warning("QAnimationGroup::takeAnimation: no animation at index %d", index);
-
240 return 0;
never executed: return 0;
0
241 } -
242 QAbstractAnimation *animation = d->animations.at(index);
executed (the execution status of this line is deduced): QAbstractAnimation *animation = d->animations.at(index);
-
243 QAbstractAnimationPrivate::get(animation)->group = 0;
executed (the execution status of this line is deduced): QAbstractAnimationPrivate::get(animation)->group = 0;
-
244 // ### removing from list before doing setParent to avoid inifinite recursion -
245 // in ChildRemoved event -
246 d->animations.removeAt(index);
executed (the execution status of this line is deduced): d->animations.removeAt(index);
-
247 animation->setParent(0);
executed (the execution status of this line is deduced): animation->setParent(0);
-
248 d->animationRemoved(index, animation);
executed (the execution status of this line is deduced): d->animationRemoved(index, animation);
-
249 return animation;
executed: return animation;
Execution Count:229
229
250} -
251 -
252/*! -
253 Removes and deletes all animations in this animation group, and resets the current -
254 time to 0. -
255 -
256 \sa addAnimation(), removeAnimation() -
257*/ -
258void QAnimationGroup::clear() -
259{ -
260 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
261 qDeleteAll(d->animations);
executed (the execution status of this line is deduced): qDeleteAll(d->animations);
-
262}
executed: }
Execution Count:5
5
263 -
264/*! -
265 \reimp -
266*/ -
267bool QAnimationGroup::event(QEvent *event) -
268{ -
269 Q_D(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroupPrivate * const d = d_func();
-
270 if (event->type() == QEvent::ChildAdded) {
evaluated: event->type() == QEvent::ChildAdded
TRUEFALSE
yes
Evaluation Count:337
yes
Evaluation Count:450
337-450
271 QChildEvent *childEvent = static_cast<QChildEvent *>(event);
executed (the execution status of this line is deduced): QChildEvent *childEvent = static_cast<QChildEvent *>(event);
-
272 if (QAbstractAnimation *a = qobject_cast<QAbstractAnimation *>(childEvent->child())) {
partially evaluated: QAbstractAnimation *a = qobject_cast<QAbstractAnimation *>(childEvent->child())
TRUEFALSE
yes
Evaluation Count:337
no
Evaluation Count:0
0-337
273 if (a->group() != this)
evaluated: a->group() != this
TRUEFALSE
yes
Evaluation Count:65
yes
Evaluation Count:272
65-272
274 addAnimation(a);
executed: addAnimation(a);
Execution Count:65
65
275 }
executed: }
Execution Count:337
337
276 } else if (event->type() == QEvent::ChildRemoved) {
executed: }
Execution Count:337
partially evaluated: event->type() == QEvent::ChildRemoved
TRUEFALSE
yes
Evaluation Count:450
no
Evaluation Count:0
0-450
277 QChildEvent *childEvent = static_cast<QChildEvent *>(event);
executed (the execution status of this line is deduced): QChildEvent *childEvent = static_cast<QChildEvent *>(event);
-
278 QAbstractAnimation *a = static_cast<QAbstractAnimation *>(childEvent->child());
executed (the execution status of this line is deduced): QAbstractAnimation *a = static_cast<QAbstractAnimation *>(childEvent->child());
-
279 // You can only rely on the child being a QObject because in the QEvent::ChildRemoved -
280 // case it might be called from the destructor. -
281 int index = d->animations.indexOf(a);
executed (the execution status of this line is deduced): int index = d->animations.indexOf(a);
-
282 if (index != -1)
evaluated: index != -1
TRUEFALSE
yes
Evaluation Count:221
yes
Evaluation Count:229
221-229
283 takeAnimation(index);
executed: takeAnimation(index);
Execution Count:221
221
284 }
executed: }
Execution Count:450
450
285 return QAbstractAnimation::event(event);
executed: return QAbstractAnimation::event(event);
Execution Count:787
787
286} -
287 -
288 -
289void QAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *) -
290{ -
291 Q_Q(QAnimationGroup);
executed (the execution status of this line is deduced): QAnimationGroup * const q = q_func();
-
292 Q_UNUSED(index);
executed (the execution status of this line is deduced): (void)index;;
-
293 if (animations.isEmpty()) {
evaluated: animations.isEmpty()
TRUEFALSE
yes
Evaluation Count:77
yes
Evaluation Count:152
77-152
294 currentTime = 0;
executed (the execution status of this line is deduced): currentTime = 0;
-
295 q->stop();
executed (the execution status of this line is deduced): q->stop();
-
296 }
executed: }
Execution Count:77
77
297}
executed: }
Execution Count:229
229
298 -
299QT_END_NAMESPACE -
300 -
301#include "moc_qanimationgroup.cpp" -
302 -
303#endif //QT_NO_ANIMATION -
304 -
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial