All pastes #1684200 Raw Edit

Something

public text v1 · immutable
#1684200 ·published 2009-11-23 20:53 UTC
rendered paste body
Index: 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)