src/hbwidgets/itemviews/hbtumbleviewitem.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
equal deleted inserted replaced
6:c3690ec91ef8 7:923ff622b8b9
    21 ** If you have questions regarding the use of this file, please contact
    21 ** If you have questions regarding the use of this file, please contact
    22 ** Nokia at developer.feedback@nokia.com.
    22 ** Nokia at developer.feedback@nokia.com.
    23 **
    23 **
    24 ****************************************************************************/
    24 ****************************************************************************/
    25 #include "hbtumbleviewitem.h"
    25 #include "hbtumbleviewitem.h"
       
    26 #include "hbtapgesture_p.h"
    26 
    27 
    27 #include "hblistviewitem_p.h"
    28 #include "hblistviewitem_p.h"
       
    29 #include "hbnamespace_p.h"
    28 #include <hbstyleoptionlistviewitem_p.h>
    30 #include <hbstyleoptionlistviewitem_p.h>
    29 
    31 
    30 #include <QGestureEvent>
    32 #include <QGestureEvent>
       
    33 #include <QCoreApplication>
    31 
    34 
    32 HbTumbleViewItem::HbTumbleViewItem(QGraphicsItem *parent) :
    35 HbTumbleViewItem::HbTumbleViewItem(QGraphicsItem *parent) :
    33     HbListViewItem(parent)
    36     HbListViewItem(parent)
    34 {
    37 {
    35     HB_SDD(HbAbstractViewItem);
    38     HB_SDD(HbAbstractViewItem);
    51 
    54 
    52 
    55 
    53 /*!
    56 /*!
    54     \reimp
    57     \reimp
    55 */
    58 */
    56 HbAbstractViewItem *HbTumbleViewItem::createItem() 
    59 HbAbstractViewItem *HbTumbleViewItem::createItem()
    57 {
    60 {
    58     HbTumbleViewItem* item = new HbTumbleViewItem(*this);
    61     HbTumbleViewItem* item = new HbTumbleViewItem(*this);
    59     item->setFocusPolicy(Qt::NoFocus);
    62     item->setFocusPolicy(Qt::NoFocus);
    60 
    63     connect(item,SIGNAL(released(QPointF)),item->itemView(),SLOT(_q_itemSelected(QPointF)));
    61     return item;
    64     return item;
    62 }
    65 }
    63 
       
    64 /*!
    66 /*!
    65     \reimp
    67     \reimp
    66 */
    68 */
    67 void HbTumbleViewItem::updateChildItems()
    69 void HbTumbleViewItem::updateChildItems()
    68 {
    70 {
    69     Q_D(HbListViewItem);
    71     Q_D(HbListViewItem);
       
    72     if (d->mIndex.data(Qt::DisplayRole).isNull())
       
    73          return;
    70     HbListViewItem::updateChildItems();
    74     HbListViewItem::updateChildItems();
    71     if(d->mSelectionItem){
    75     if(d->mSelectionItem){
    72         d->mSelectionItem->hide();
    76         d->mSelectionItem->hide();
    73     }
    77     }
    74 }
    78 }
    75 
    79 
    76 void HbTumbleViewItem::gestureEvent(QGestureEvent *event)
    80 void HbTumbleViewItem::gestureEvent(QGestureEvent *event)
    77 {
    81 {
    78     if (event->gesture(Qt::TapGesture)) {
    82     HbTapGesture *gesture = static_cast<HbTapGesture *>(event->gesture(Qt::TapGesture));
       
    83     if (gesture) {
    79         Q_D(HbAbstractViewItem);
    84         Q_D(HbAbstractViewItem);
    80         if(itemView()->isScrolling()){
    85         if(itemView()->isScrolling()){
    81             event->ignore();
    86             event->ignore();
    82             event->ignore(Qt::TapGesture);
    87             event->ignore(Qt::TapGesture);
    83             return;
    88             return;
    84         }
    89         }
       
    90         if(gesture->state() == Qt::GestureCanceled){
       
    91             d->setPressed(false, false);
       
    92             event->accept();
       
    93             scene()->setProperty(HbPrivate::OverridingGesture.latin1(),QVariant());
       
    94             return;
       
    95         }
    85         d->tapTriggered(event);
    96         d->tapTriggered(event);
    86 
       
    87     } else {
    97     } else {
    88         HbWidget::gestureEvent(event);
    98         HbWidget::gestureEvent(event);
       
    99    
    89     }
   100     }
       
   101 }
       
   102 
       
   103 
       
   104 QSizeF HbTumbleViewItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
       
   105 {
       
   106     HB_SDD(const HbAbstractViewItem);
       
   107     static qreal height=0;
       
   108 
       
   109     QSizeF sh=HbListViewItem::sizeHint(which,constraint);
       
   110     if(which == Qt::PreferredSize && sh.height()<=0) {
       
   111         //TODO:remove this check once refresh issue in DTP is solved on removeRows/insertRows
       
   112         if(height<=0) {
       
   113             //Let's create a temporary item and take the height for the size hint
       
   114             HbAbstractViewItem *tempitem = sd->mPrototype->createItem();
       
   115             if(sd->mItemView) {
       
   116                 QAbstractItemModel *model = sd->mItemView->model();
       
   117                 if(model) {
       
   118                     int rowCount=model->rowCount();
       
   119                     QModelIndex ind=model->index(rowCount,0);
       
   120                     if(ind.isValid()) {
       
   121                         tempitem->setModelIndex(ind);
       
   122                     }
       
   123                 }
       
   124             }
       
   125 
       
   126 
       
   127             //call polish            
       
   128             QEvent polishEvent(QEvent::Polish);
       
   129             QCoreApplication::sendEvent(const_cast<HbAbstractViewItem *>(tempitem), &polishEvent);
       
   130             height=tempitem->effectiveSizeHint(which,constraint).height();
       
   131             delete tempitem;
       
   132         }
       
   133         return QSizeF(sh.width(),height);
       
   134     }
       
   135     return sh;
    90 }
   136 }
    91 
   137 
    92 
   138 
    93 #include "moc_hbtumbleviewitem.cpp"
   139 #include "moc_hbtumbleviewitem.cpp"
    94 
   140