src/hbwidgets/itemviews/hbtumbleview.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
--- a/src/hbwidgets/itemviews/hbtumbleview.cpp	Wed Jun 23 18:33:25 2010 +0300
+++ b/src/hbwidgets/itemviews/hbtumbleview.cpp	Tue Jul 06 14:36:53 2010 +0300
@@ -130,68 +130,45 @@
 
 QPointF HbTumbleViewItemContainer::recycleItems(const QPointF &delta)
 {
-    Q_D(HbTumbleViewItemContainer);
-    QRectF viewRect(d->itemBoundingRect(d->mItemView));
-    viewRect.moveTopLeft(viewRect.topLeft() + delta);
-
-    int firstVisibleBufferIndex = -1;
-    int lastVisibleBufferIndex = -1;
-    d->firstAndLastVisibleBufferIndex(firstVisibleBufferIndex, lastVisibleBufferIndex, viewRect, false);
-
-    int hiddenAbove = firstVisibleBufferIndex;
-    int hiddenBelow = d->mItems.count() - lastVisibleBufferIndex - 1;
-
-    if (d->mItems.count()
-        && (firstVisibleBufferIndex == -1 || lastVisibleBufferIndex == -1)) {
-        // All items out of sight.
-        if (d->itemBoundingRect(d->mItems.first()).top() < 0) {
-            // All items above view.
-            hiddenAbove = d->mItems.count();
-            hiddenBelow = 0;
-        } else {
-            // All items below view.
-            hiddenAbove = 0;
-            hiddenBelow = d->mItems.count();
-        }
-    }
+    if(size().height() > itemView()->size().height()){
+            Q_D(HbTumbleViewItemContainer);
+            const qreal diff = d->getDiffWithoutScrollareaCompensation(delta);
+          
+            if(diff !=0.0){      
+                  QPointF newDelta(0.0, 0.0);
+                  qreal result = 0.0;
+                  HbAbstractViewItem *item = 0;
+                  if (diff < 0.0) {
+                        while (-newDelta.y() > diff) {
+                              item = d->shiftUpItem(newDelta);
+                              if (!item) {
+                                    break;
+                              }
+                        }
+                  }
 
-    QPointF newDelta(delta);
-
-    while (hiddenAbove > hiddenBelow + 1) {
-        HbAbstractViewItem *item = d->shiftDownItem(newDelta);
-        if (!item){
-            break;
-        }
-
-        if (!d->visible(item, viewRect)) {
-            hiddenBelow++;
-        }
-        hiddenAbove--;
-    }
+                  else {
+                        while (-newDelta.y() < diff) {
+                              item = d->shiftDownItem(newDelta);
+                              if (!item) {
+                                    break;
+                              }
+                        }
+                  }
 
-    while (hiddenBelow > hiddenAbove + 1) {
-        HbAbstractViewItem *item = d->shiftUpItem(newDelta);
-        if (!item) {
-            break;
-        }
+                  result = newDelta.y();
+                  return QPointF(delta.x(),delta.y()+result);
+            }
+      }
 
-        if (!d->visible( item, viewRect)) {
-            hiddenAbove++;
-        }
-        hiddenBelow--;
-    }
-
-    return newDelta;
+    return delta;
 }
 void HbTumbleViewItemContainer::setLoopingEnabled(bool looped) {
     Q_D(HbTumbleViewItemContainer);
-    d->mIsLooped = looped;
-    if(looped){
-        recycleItems(QPointF());
-    }
-    else{
-        setModelIndexes(d->mItemView->currentIndex());
-    }
+    d->mIsLooped = looped;    
+
+    d->mItemView->scrollTo(d->mItemView->currentIndex(),HbAbstractItemView::PositionAtCenter);
+    recycleItems(QPointF());
 }
 bool HbTumbleViewItemContainer::isLoopingEnabled() const {
     Q_D(const HbTumbleViewItemContainer);