diff --git a/animations/animationgroup.cpp b/animations/animationgroup.cpp index b32491e27..5238c33ad 100644 --- a/animations/animationgroup.cpp +++ b/animations/animationgroup.cpp @@ -26,45 +26,65 @@ namespace Plasma { -AnimationGroup::AnimationGroup(QObject* parent) - : m_parent(parent), - m_parallel(false) +class AnimationGroupPrivate { +public: + /** + * Boolean determining if the animation is parallel. Default is false. + */ + bool parallel; + + /** + * Map of AbstractAnimations to be run, by id. + */ + QList anims; +}; + +AnimationGroup::AnimationGroup(QObject* parent) + : AbstractAnimation(parent), + d(new AnimationGroupPrivate) +{ + d->parallel = false; } AnimationGroup::~AnimationGroup() { + delete d; } void AnimationGroup::setParallel(bool parallelness) { - m_parallel = parallelness; + d->parallel = parallelness; } bool AnimationGroup::isParallel() const { - return m_parallel; + return d->parallel; } int AnimationGroup::add(AbstractAnimation* elem) { - anims.insert(anims.count(), elem); - return anims.count(); + d->anims.insert(d->anims.count(), elem); + return d->anims.count(); } AbstractAnimation* AnimationGroup::at(int id) const { - return anims[id]; + return d->anims.value(id); } void AnimationGroup::remove(int id) { - anims.removeAt(id); + if (id >= d->anims.count() || id < 0) { + return; + } + + d->anims.removeAt(id); } void AnimationGroup::start() { - QAbstractAnimation* anim = toQAbstractAnimation(m_parent); + QAbstractAnimation* anim = toQAbstractAnimation(parent()); if (anim){ /* FIXME: why to create and delete all the animations * every single time it runs? @@ -76,21 +96,18 @@ void AnimationGroup::start() QAnimationGroup* AnimationGroup::toQAbstractAnimation(QObject* parent) { //if supplied, use parent given in args. - QObject* correctParent; - if (parent){ - correctParent = parent; - } else { - correctParent = m_parent; + if (!parent){ + parent = this->parent(); } QAnimationGroup* g; - if (m_parallel) { - g = new QParallelAnimationGroup(correctParent); + if (d->parallel) { + g = new QParallelAnimationGroup(parent); } else { - g = new QSequentialAnimationGroup(correctParent); + g = new QSequentialAnimationGroup(parent); } - QListIterator it(anims); + QListIterator it(d->anims); while (it.hasNext()) { //add with group as owner g->addAnimation(it.next()->toQAbstractAnimation(g)); diff --git a/animations/animationgroup.h b/animations/animationgroup.h index ca8691a64..1f3c0457a 100644 --- a/animations/animationgroup.h +++ b/animations/animationgroup.h @@ -36,26 +36,22 @@ namespace Plasma { +class AnimationGroupPrivate; + /** * @brief A group of Animations and / or AnimationGroups. * @since 4.4 */ class PLASMA_EXPORT AnimationGroup : public AbstractAnimation { - Q_OBJECT + Q_PROPERTY(bool parallel READ isParallel WRITE setParallel) public: AnimationGroup(QObject* parent = 0); virtual ~AnimationGroup(); - /** - * Start the animation. - */ - virtual void start(); - - /** * @arg parallelness whether the animation should be in parallel or not */ @@ -92,23 +88,14 @@ public: */ QAnimationGroup* toQAbstractAnimation(QObject* parent = 0); +public Q_SLOTS: + /** + * Start the animation. + */ + virtual void start(); + private: - - /** - * Parent owner object to use in generated animations. - */ - QObject* m_parent; - - /** - * Boolean determining if the animation is parallel. Default is false. - */ - bool m_parallel; - - /** - * Map of AbstractAnimations to be run, by id. - */ - QList anims; - + AnimationGroupPrivate * const d; };