src/hbwidgets/itemviews/hbtumbleviewitem.cpp
branchGCC_SURGE
changeset 15 f378acbc9cfb
parent 7 923ff622b8b9
child 21 4633027730f5
child 34 ed14f46c0e55
--- a/src/hbwidgets/itemviews/hbtumbleviewitem.cpp	Thu Jul 15 14:03:49 2010 +0100
+++ b/src/hbwidgets/itemviews/hbtumbleviewitem.cpp	Thu Jul 22 16:36:53 2010 +0100
@@ -23,10 +23,15 @@
 **
 ****************************************************************************/
 #include "hbtumbleviewitem.h"
+#include "hbtapgesture_p.h"
 
 #include "hblistviewitem_p.h"
+#include "hbnamespace_p.h"
 #include <hbstyleoptionlistviewitem_p.h>
 
+#include <QGestureEvent>
+#include <QCoreApplication>
+
 HbTumbleViewItem::HbTumbleViewItem(QGraphicsItem *parent) :
     HbListViewItem(parent)
 {
@@ -51,25 +56,85 @@
 /*!
     \reimp
 */
-HbAbstractViewItem *HbTumbleViewItem::createItem() 
+HbAbstractViewItem *HbTumbleViewItem::createItem()
 {
     HbTumbleViewItem* item = new HbTumbleViewItem(*this);
     item->setFocusPolicy(Qt::NoFocus);
-
+    connect(item,SIGNAL(released(QPointF)),item->itemView(),SLOT(_q_itemSelected(QPointF)));
     return item;
 }
-
 /*!
     \reimp
 */
 void HbTumbleViewItem::updateChildItems()
 {
     Q_D(HbListViewItem);
+    if (d->mIndex.data(Qt::DisplayRole).isNull())
+         return;
     HbListViewItem::updateChildItems();
     if(d->mSelectionItem){
         d->mSelectionItem->hide();
     }
 }
 
+void HbTumbleViewItem::gestureEvent(QGestureEvent *event)
+{
+    HbTapGesture *gesture = static_cast<HbTapGesture *>(event->gesture(Qt::TapGesture));
+    if (gesture) {
+        Q_D(HbAbstractViewItem);
+        if(itemView()->isScrolling()){
+            event->ignore();
+            event->ignore(Qt::TapGesture);
+            return;
+        }
+        if(gesture->state() == Qt::GestureCanceled){
+            d->setPressed(false, false);
+            event->accept();
+            scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant());
+            return;
+        }
+        d->tapTriggered(event);
+    } else {
+        HbWidget::gestureEvent(event);
+   
+    }
+}
+
+
+QSizeF HbTumbleViewItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+    HB_SDD(const HbAbstractViewItem);
+    static qreal height=0;
+
+    QSizeF sh=HbListViewItem::sizeHint(which,constraint);
+    if(which == Qt::PreferredSize && sh.height()<=0) {
+        //TODO:remove this check once refresh issue in DTP is solved on removeRows/insertRows
+        if(height<=0) {
+            //Let's create a temporary item and take the height for the size hint
+            HbAbstractViewItem *tempitem = sd->mPrototype->createItem();
+            if(sd->mItemView) {
+                QAbstractItemModel *model = sd->mItemView->model();
+                if(model) {
+                    int rowCount=model->rowCount();
+                    QModelIndex ind=model->index(rowCount,0);
+                    if(ind.isValid()) {
+                        tempitem->setModelIndex(ind);
+                    }
+                }
+            }
+
+
+            //call polish            
+            QEvent polishEvent(QEvent::Polish);
+            QCoreApplication::sendEvent(const_cast<HbAbstractViewItem *>(tempitem), &polishEvent);
+            height=tempitem->effectiveSizeHint(which,constraint).height();
+            delete tempitem;
+        }
+        return QSizeF(sh.width(),height);
+    }
+    return sh;
+}
+
+
 #include "moc_hbtumbleviewitem.cpp"