/******************************************************************************** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).** All rights reserved.** Contact: Nokia Corporation (developer.feedback@nokia.com)**** This file is part of the HbWidgets module of the UI Extensions for Mobile.**** GNU Lesser General Public License Usage** This file may be used under the terms of the GNU Lesser General Public** License version 2.1 as published by the Free Software Foundation and** appearing in the file LICENSE.LGPL included in the packaging of this file.** Please review the following information to ensure the GNU Lesser General** Public License version 2.1 requirements will be met:** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.**** In addition, as a special exception, Nokia gives you certain additional** rights. These rights are described in the Nokia Qt LGPL Exception** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.**** If you have questions regarding the use of this file, please contact** Nokia at developer.feedback@nokia.com.******************************************************************************/#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){ HB_SDD(HbAbstractViewItem); sd->mItemType = QString("tumbleviewitem"); setFocusPolicy(Qt::NoFocus);}HbTumbleViewItem::~HbTumbleViewItem(){}/*! \reimp*/int HbTumbleViewItem::type() const{ return Type;}/*! \reimp*/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"