src/hbwidgets/itemviews/hbdatepickerview_p.cpp
changeset 28 b7da29130b0e
parent 23 e6ad4ef83b23
child 30 80e4d18b72f5
--- a/src/hbwidgets/itemviews/hbdatepickerview_p.cpp	Thu Sep 02 20:44:51 2010 +0300
+++ b/src/hbwidgets/itemviews/hbdatepickerview_p.cpp	Fri Sep 17 08:32:10 2010 +0300
@@ -28,10 +28,13 @@
 #include "hbabstractitemcontainer_p_p.h"
 #include "hblistlayout_p.h"
 #include "hbstyleoption_p.h"
+#include "hbframeitem.h"
+#include "hbstyleprimitivedata.h"
 
 #include <hbmodeliterator.h>
 #include <hbdatepickerviewitem_p.h>
 #include <hbtapgesture.h>
+#include <hbstyleframeprimitivedata.h>
 
 #include <qmath.h>
 #include <QTimeLine>
@@ -61,16 +64,17 @@
 
     HbAbstractViewItem* getCenterItem();
     void slectItemAt(const QPointF& point,QGraphicsItem* itemToMap);
-
+    void setItemState(HbAbstractViewItem* item = 0);
 
     QTimeLine *animationtimer;
     QGraphicsItemAnimation *animation;
     Q_DECLARE_PUBLIC(HbDatePickerView);
-    QGraphicsItem   *mBackground;
-    QGraphicsItem   *mFrame;//overlay
-    QGraphicsItem   *mHighlight;
-    QGraphicsItem   *mDivider;
+    QGraphicsObject   *mBackground;
+    QGraphicsObject   *mFrame;//overlay
+    QGraphicsObject   *mHighlight;
+    QGraphicsObject   *mDivider;
    // bool tapActive;
+    QPointer<HbAbstractViewItem> mPreviousItem;
 
     enum ViewState
     {
@@ -78,7 +82,7 @@
         TapStarted = 1,
         ScrollStarted = 2
     };
-    Q_DECLARE_FLAGS(ViewStates, ViewState);
+    Q_DECLARE_FLAGS(ViewStates, ViewState)
     ViewStates viewStates;
 
 };
@@ -106,7 +110,7 @@
     void viewResized(const QSizeF &size);
 
 private:
-    Q_DECLARE_PRIVATE(HbDatePickerContainer);
+    Q_DECLARE_PRIVATE(HbDatePickerContainer)
     friend class HbDatePickerView;
     friend class HbDatePickerViewPrivate;
 };
@@ -122,7 +126,7 @@
     HbAbstractViewItem *item(const QModelIndex &index) const;
 
     HbListLayout *mLayout;
-    Q_DECLARE_PUBLIC(HbDatePickerContainer);
+    Q_DECLARE_PUBLIC(HbDatePickerContainer)
 };
 
 HbDatePickerContainerPrivate::HbDatePickerContainerPrivate()
@@ -568,6 +572,9 @@
             d->mContainer->setModelIndexes(d->mModelIterator->index(newIndex));
         }
     }
+
+
+
     //HbAbstractItemView::scrollTo(index, hint);
     if (    index.isValid()
         &&  d->mModelIterator->model() == index.model()) {
@@ -596,8 +603,11 @@
     QPointF mappedPoint = itemTomap->mapToScene(point);
     HbDatePickerContainer* container = static_cast<HbDatePickerContainer*>(mContainer);
     HbDatePickerContainerPrivate* containerPriv = container->d_func();
-    
-    HbAbstractViewItem* item = qobject_cast<HbAbstractViewItem*>(itemAt(mappedPoint)); //(q->sender());    
+
+
+
+    HbAbstractViewItem* item = qobject_cast<HbAbstractViewItem*>(itemAt(mappedPoint)); //(q->sender()); 
+
     if(item){
         QPointF centerPt = q->mapToScene(q->boundingRect().center());
         qreal itemHeight = containerPriv->getSmallestItemHeight();
@@ -610,17 +620,38 @@
             QPointF newPos =  contPos-QPointF(0,qCeil(delta.y()));
             //need to remove already posted request to avoid multiple scrolling
             QCoreApplication::removePostedEvents(q,QEvent::LayoutRequest);
-          q->scrollContentsTo(-newPos,200);
+            q->scrollContentsTo(-newPos,200);
         }
         else {
             q->setCurrentIndex(item->modelIndex());
             emit q->itemSelected(item->modelIndex().row());
+            setItemState(item);
         }
 
+
     }
 
 }
 
+void HbDatePickerViewPrivate::setItemState(HbAbstractViewItem* item)
+{
+    if(!item){
+        Q_Q(HbDatePickerView);
+        QPointF mappedPoint = q->mapToScene(q->boundingRect().center());
+        item = qobject_cast<HbAbstractViewItem*>(itemAt(mappedPoint));
+    }
+    if(item){
+        //change the items states for the current selection
+        if(mPreviousItem && mPreviousItem->property("state").toString().compare("normal")){
+            mPreviousItem->setProperty("state", "normal");
+        }
+        if(item && item->property("state").toString().compare("selected")){
+            item->setProperty("state", "selected");
+        }
+        mPreviousItem = item;
+    }
+}
+
 void HbDatePickerViewPrivate::_q_scrollingEnded()
 {
     if(mOptions & PanningActive){
@@ -632,6 +663,7 @@
     }
     Q_Q(HbDatePickerView);
     mContainer->layout()->activate();//call this to get proper item;
+
     slectItemAt(q->boundingRect().center(),q);
 }
 
@@ -703,6 +735,9 @@
         //here in those cases.
         if(!d->viewStates.testFlag(HbDatePickerViewPrivate::ScrollStarted)){
             emit itemSelected(row);
+            if(scene()){
+                d->setItemState();
+            }
         }
     }
 }
@@ -725,37 +760,50 @@
     Q_Q(HbDatePickerView);
 
     //this is the highlight which is placed at center
+
     if(!mHighlight) {
-        mHighlight = HbStylePrivate::createPrimitive(HbStylePrivate::P_TumbleView_highlight,q);
-        HbStyle::setItemName(mHighlight,"highlight");
-    }
-    if(!mDivider){
-        mDivider = HbStylePrivate::createPrimitive(HbStylePrivate::P_DateTimePicker_separator,q);
-        HbStyle::setItemName(mDivider,"separator");
-        mDivider->hide();
+         mHighlight = q->style()->createPrimitive(HbStyle::PT_FrameItem,"highlight",q);
     }
 
+    if(!mDivider) {
+        mDivider = q->style()->createPrimitive(HbStyle::PT_FrameItem,"separator",q);
+    }
 }
 void HbDatePickerView::updatePrimitives()
 {
     Q_D(HbDatePickerView);
+    HbAbstractItemView::updatePrimitives();
 
-    HbStyleOption opt;
-    initStyleOption(&opt);
+    if(d->mHighlight) {
+        HbStyleFramePrimitiveData data;
+        initPrimitiveData(&data,d->mHighlight);
+        style()->updatePrimitive(d->mHighlight,&data,this);
+    }
 
-    if(d->mBackground) {
-        HbStylePrivate::updatePrimitive(d->mBackground,HbStylePrivate::P_TumbleView_background,&opt);
+    if(d->mDivider) {
+        HbStyleFramePrimitiveData data;
+        initPrimitiveData(&data,d->mDivider);
+        style()->updatePrimitive(d->mDivider,&data,this);
     }
-    if(d->mFrame) {
-        HbStylePrivate::updatePrimitive(d->mFrame,HbStylePrivate::P_TumbleView_frame,&opt);
-    } 
-    if(d->mHighlight) {
-        HbStylePrivate::updatePrimitive(d->mHighlight,HbStylePrivate::P_TumbleView_highlight,&opt);
+}
+void HbDatePickerView::initPrimitiveData(HbStylePrimitiveData *primitiveData, const QGraphicsObject *primitive)
+{
+    HbWidget::initPrimitiveData(primitiveData, primitive);
+    QString itemName = HbStyle::itemName(primitive);
+
+    if(itemName == QLatin1String("highlight")) {
+        HbStyleFramePrimitiveData *frameItem  = hbstyleprimitivedata_cast<HbStyleFramePrimitiveData*>(primitiveData);
+        frameItem->frameGraphicsName= QLatin1String("qtg_fr_tumbler_highlight_pri");
+        frameItem->frameType = HbFrameDrawer::ThreePiecesHorizontal;
+        (const_cast<QGraphicsObject *> (primitive))->setZValue(-1);
     }
-    if(d->mDivider){
-        HbStylePrivate::updatePrimitive(d->mDivider, HbStylePrivate::P_DateTimePicker_separator, &opt);
+
+    if(itemName == QLatin1String("separator")) {
+        HbStyleFramePrimitiveData *frameItem  = hbstyleprimitivedata_cast<HbStyleFramePrimitiveData*>(primitiveData);
+        frameItem->frameGraphicsName= QLatin1String("qtg_graf_tumbler_divider");
+        frameItem->frameType = HbFrameDrawer::OnePiece;
+        (const_cast<QGraphicsObject *> (primitive))->setZValue(2);
     }
-    HbAbstractItemView::updatePrimitives();
 
 }