--- 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();
}