rendered paste bodyIndex: animations/animationgroup.h
===================================================================
--- animations/animationgroup.h (revision 1051764)
+++ animations/animationgroup.h (working copy)
@@ -53,7 +53,8 @@
virtual ~AnimationGroup();
/**
- * @arg parallelness whether the animation should be in parallel or not
+ * @arg parallelness whether the animation should be in parallel or not,
+ * by default, it is not parallel
*/
void setParallel(bool parallelness);
Index: animations/animationgroup.cpp
===================================================================
--- animations/animationgroup.cpp (revision 1051764)
+++ animations/animationgroup.cpp (working copy)
@@ -29,22 +29,14 @@
class AnimationGroupPrivate
{
public:
- /**
- * Boolean determining if the animation is parallel. Default is false.
- */
- bool parallel;
-
- /**
- * Map of AbstractAnimations to be run, by id.
- */
- QList<AbstractAnimation *> anims;
+ QAnimationGroup *anim;
};
AnimationGroup::AnimationGroup(QObject* parent)
: AbstractAnimation(parent),
d(new AnimationGroupPrivate)
{
- d->parallel = false;
+ d->anim = new QSequentialAnimationGroup(this);
}
AnimationGroup::~AnimationGroup()
@@ -52,39 +44,46 @@
delete d;
}
-void AnimationGroup::setParallel(bool parallelness)
+void AnimationGroup::setParallel(bool parallel)
{
- d->parallel = parallelness;
+ if (isParallel() == parallel) {
+ return;
+ }
+
+ QAnimationGroup *newGroup = parallel ? new QParallelAnimationGroup(this)
+ : new QSequentialAnimationGroup(this);
+ while (d->anim->animationCount()) {
+ newGroup->addAnimation(d->anim->takeAnimation(0));
+ }
+
+ delete d->anim;
+ d->anim = newGroup;
}
bool AnimationGroup::isParallel() const
{
- return d->parallel;
+ return qobject_cast<QParallelAnimation *>(d->anim) != 0;
}
int AnimationGroup::add(AbstractAnimation* elem)
{
- d->anims.insert(d->anims.count(), elem);
- return d->anims.count();
+ d->anim->addAnimation(elem);
+ return d->anim->animationCount();
}
void AnimationGroup::remove(Plasma::AbstractAnimation* elem)
{
- d->anims.removeAll(elem);
+ d->anim->removeAnimation(elem);
}
AbstractAnimation* AnimationGroup::at(int id) const
{
- return d->anims.value(id);
+ return d->anim->animationAt(id);
}
void AnimationGroup::remove(int id)
{
- if (id >= d->anims.count() || id < 0) {
- return;
- }
-
- d->anims.removeAt(id);
+ d->anims.takeAnimationAt(id);
}
QAnimationGroup* AnimationGroup::toQAbstractAnimation(QObject* parent)