/****************************************************************************
**
** 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"