From 0795351f7c252f1eed97253f64e2d5839ad8a975 Mon Sep 17 00:00:00 2001 From: Bea Lam Date: Tue, 17 Apr 2012 11:35:14 +1000 Subject: populate transition for positioners Fix positioners to apply a "populate" transition for initially added items. This is consistent with ListView and GridView and also fixes the behaviour from QtQuick 1.x where the positioners were instead running the "move" transition for initially added items. Change-Id: Ib43f1141ce3e7379df085c178b684f89b8567403 Reviewed-by: Alan Alpert --- src/quick/items/qquickpositioners.cpp | 141 +++++++++++++++++++++++++++++----- 1 file changed, 123 insertions(+), 18 deletions(-) (limited to 'src/quick/items/qquickpositioners.cpp') diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp index 97a74c6765..37c3ef1224 100644 --- a/src/quick/items/qquickpositioners.cpp +++ b/src/quick/items/qquickpositioners.cpp @@ -195,6 +195,23 @@ void QQuickBasePositioner::setSpacing(qreal s) emit spacingChanged(); } +QQuickTransition *QQuickBasePositioner::populate() const +{ + Q_D(const QQuickBasePositioner); + return d->transitioner ? d->transitioner->populateTransition : 0; +} + +void QQuickBasePositioner::setPopulate(QQuickTransition *transition) +{ + Q_D(QQuickBasePositioner); + if (!d->transitioner) + d->transitioner = new QQuickItemViewTransitioner; + if (d->transitioner->populateTransition != transition) { + d->transitioner->populateTransition = transition; + emit populateChanged(); + } +} + QQuickTransition *QQuickBasePositioner::move() const { Q_D(const QQuickBasePositioner); @@ -233,9 +250,14 @@ void QQuickBasePositioner::setAdd(QQuickTransition *add) void QQuickBasePositioner::componentComplete() { + Q_D(QQuickBasePositioner); QQuickItem::componentComplete(); + if (d->transitioner) + d->transitioner->setPopulateTransitionEnabled(true); positionedItems.reserve(childItems().count()); prePositioning(); + if (d->transitioner) + d->transitioner->setPopulateTransitionEnabled(false); } void QQuickBasePositioner::itemChange(ItemChange change, const ItemChangeData &value) @@ -301,7 +323,10 @@ void QQuickBasePositioner::prePositioning() if (addedIndex < 0) addedIndex = posItem.index; PositionedItem *theItem = &positionedItems[positionedItems.count()-1]; - theItem->transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true); + if (d->transitioner->canTransition(QQuickItemViewTransitioner::PopulateTransition, true)) + theItem->transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::PopulateTransition, true); + else if (!d->transitioner->populateTransitionEnabled()) + theItem->transitionNextReposition(d->transitioner, QQuickItemViewTransitioner::AddTransition, true); } } } else { @@ -354,7 +379,7 @@ void QQuickBasePositioner::prePositioning() } if (d->transitioner) { - QRectF viewBounds; + QRectF viewBounds(QPointF(), contentSize); for (int i=0; itransitioner, viewBounds); for (int i=0; i