24 ****************************************************************************/ |
24 ****************************************************************************/ |
25 |
25 |
26 #include "hbsliderhandle_p.h" |
26 #include "hbsliderhandle_p.h" |
27 #include "hbslidercontrol_p.h" |
27 #include "hbslidercontrol_p.h" |
28 #include "hbslidercontrol_p_p.h" |
28 #include "hbslidercontrol_p_p.h" |
|
29 #include "hbstyle_p.h" |
29 #include <hbwidgetfeedback.h> |
30 #include <hbwidgetfeedback.h> |
30 #include <hbstyle.h> |
31 #include <hbstyle.h> |
31 #include <hbstyleoptionslider_p.h> |
32 #include <hbstyleoptionslider_p.h> |
32 #include <QGraphicsSceneMouseEvent> |
33 #include <QGraphicsSceneMouseEvent> |
33 #include <QGraphicsScene> |
34 #include <QGraphicsScene> |
60 handleDragPos(0), |
61 handleDragPos(0), |
61 touchItem(0), |
62 touchItem(0), |
62 mHandleItem(0) |
63 mHandleItem(0) |
63 { |
64 { |
64 // create handle icon item |
65 // create handle icon item |
65 gItem = slider->style()->createPrimitive(HbStyle::P_Slider_thumb, this); |
66 gItem = HbStylePrivate::createPrimitive(HbStylePrivate::P_Slider_thumb, this); |
66 HbStyle::setItemName(gItem , "icon"); |
67 HbStyle::setItemName(gItem , "icon"); |
67 setFiltersChildEvents(true) ; |
68 setFiltersChildEvents(true) ; |
68 |
69 |
69 // create touch area for handle |
70 // create touch area for handle |
70 touchItem = slider->style()->createPrimitive(HbStyle::P_SliderElement_touchhandle, this); |
71 touchItem = HbStylePrivate::createPrimitive(HbStylePrivate::P_SliderElement_touchhandle, this); |
71 HbStyle::setItemName(touchItem , "toucharea"); |
72 HbStyle::setItemName(touchItem , "toucharea"); |
72 |
73 |
73 setZValue(slider->zValue() + 1); |
74 setZValue(slider->zValue() + 1); |
74 #ifdef HB_GESTURE_FW |
75 #ifdef HB_GESTURE_FW |
75 grabGesture(Qt::TapGesture); |
76 grabGesture(Qt::TapGesture); |
131 HbStyleOptionSlider opt; |
132 HbStyleOptionSlider opt; |
132 sliderControl->initStyleOption(&opt); |
133 sliderControl->initStyleOption(&opt); |
133 if( scene()){ |
134 if( scene()){ |
134 if (true == sliderControl->isSliderDown()){ |
135 if (true == sliderControl->isSliderDown()){ |
135 opt.state |= QStyle::State_Sunken; |
136 opt.state |= QStyle::State_Sunken; |
136 sliderControl->style()->updatePrimitive( |
137 HbStylePrivate::updatePrimitive( |
137 sliderControl->primitive(HbStyle::P_Slider_groove), HbStyle::P_Slider_groove, &opt); |
138 sliderControl->primitive((HbStyle::Primitive)HbStylePrivate::P_Slider_groove), HbStylePrivate::P_Slider_groove, &opt); |
138 } else { |
139 } else { |
139 opt.state &= ~QStyle::State_Sunken; |
140 opt.state &= ~QStyle::State_Sunken; |
140 } |
141 } |
141 } else { |
142 } else { |
142 opt.state &= ~QStyle::State_Sunken; |
143 opt.state &= ~QStyle::State_Sunken; |
143 } |
144 } |
144 |
145 |
145 opt.boundingRect=boundingRect(); |
146 opt.boundingRect=boundingRect(); |
146 sliderControl->style()->updatePrimitive(gItem, HbStyle::P_Slider_thumb, &opt); |
147 HbStylePrivate::updatePrimitive(gItem, HbStylePrivate::P_Slider_thumb, &opt); |
147 } |
148 } |
148 |
149 |
149 void HbSliderHandle::setHandleItem(QGraphicsItem *item) |
150 void HbSliderHandle::setHandleItem(QGraphicsItem *item) |
150 { |
151 { |
151 if(!item) { |
152 if(!item) { |
152 return; |
153 return; |
153 } |
154 } |
154 if(mHandleItem) { |
155 if(mHandleItem) { |
155 delete mHandleItem; |
156 delete mHandleItem; |
156 mHandleItem =0; |
157 mHandleItem =0; |
157 } |
158 } |
158 |
159 |
159 setHandlesChildEvents(false); |
160 setHandlesChildEvents(false); |
160 |
161 |
161 mHandleItem = item; |
162 mHandleItem = item; |
162 mHandleItem->setParentItem(this); |
163 mHandleItem->setParentItem(this); |
163 sliderControl->style()->setItemName(mHandleItem,"widget"); |
164 HbStyle::setItemName(mHandleItem,"widget"); |
164 //((QGraphicsWidget*)mHandleItem)->setGeometry(gItem->geometry());//TODO:geometry from css |
165 //((QGraphicsWidget*)mHandleItem)->setGeometry(gItem->geometry());//TODO:geometry from css |
165 |
166 |
166 if(scene()) { |
167 if(scene()) { |
167 mHandleItem->removeSceneEventFilter(this); |
168 mHandleItem->removeSceneEventFilter(this); |
168 mHandleItem->installSceneEventFilter(this); |
169 mHandleItem->installSceneEventFilter(this); |
191 } |
192 } |
192 } |
193 } |
193 bool HbSliderHandle::sceneEventFilter(QGraphicsItem *obj,QEvent *event) |
194 bool HbSliderHandle::sceneEventFilter(QGraphicsItem *obj,QEvent *event) |
194 { |
195 { |
195 //TODO: touch area does not work with the current filtering mechanism. find better solution |
196 //TODO: touch area does not work with the current filtering mechanism. find better solution |
196 if( obj == mHandleItem) { |
197 if( obj == mHandleItem) { |
197 if(event->type() == QEvent::GraphicsSceneMouseMove){ |
198 if(event->type() == QEvent::GraphicsSceneMouseMove){ |
198 mouseMoveEvent ((QGraphicsSceneMouseEvent *) event) ; |
199 mouseMoveEvent ((QGraphicsSceneMouseEvent *) event) ; |
199 return true; |
200 return true; |
200 } else if (event->type() == QEvent::GraphicsSceneMousePress){ |
201 } else if (event->type() == QEvent::GraphicsSceneMousePress){ |
201 mousePressEvent((QGraphicsSceneMouseEvent *) event); |
202 mousePressEvent((QGraphicsSceneMouseEvent *) event); |
202 return true; |
203 return true; |
203 } else if (event->type() == QEvent::GraphicsSceneMouseRelease){ |
204 } else if (event->type() == QEvent::GraphicsSceneMouseRelease){ |
204 mouseReleaseEvent((QGraphicsSceneMouseEvent *) event); |
205 mouseReleaseEvent((QGraphicsSceneMouseEvent *) event); |
205 return true; |
206 return true; |
206 } |
207 } |
207 } |
208 } |
208 if( obj == touchItem ) { |
209 if( obj == touchItem ) { |
209 if (!isEnabled() ) { |
210 if (!isEnabled() ) { |
210 return false; |
211 return false; |
211 } |
212 } |
212 if (event->type() == QEvent::Gesture){ |
213 if (event->type() == QEvent::Gesture){ |
213 gestureEvent( (QGestureEvent *) (event)); |
214 gestureEvent( (QGestureEvent *) (event)); |
214 return true; |
215 return true; |
215 } |
216 } |
216 } |
217 } |
217 return false; |
218 return false; |
345 */ |
346 */ |
346 void HbSliderHandle::gestureEvent(QGestureEvent *event) |
347 void HbSliderHandle::gestureEvent(QGestureEvent *event) |
347 { |
348 { |
348 if(HbTapAndHoldGesture *tapandHold= qobject_cast<HbTapAndHoldGesture *>(event->gesture(Qt::TapAndHoldGesture))) { |
349 if(HbTapAndHoldGesture *tapandHold= qobject_cast<HbTapAndHoldGesture *>(event->gesture(Qt::TapAndHoldGesture))) { |
349 if(tapandHold->state() == Qt::GestureStarted) { |
350 if(tapandHold->state() == Qt::GestureStarted) { |
|
351 sliderControl->setToolTip(QString::number(sliderControl->sliderPosition())); |
350 sliderControl->showToolTip(); |
352 sliderControl->showToolTip(); |
351 } |
353 } |
352 } |
354 } |
353 if(HbTapGesture *tap = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) { |
355 if(HbTapGesture *tap = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) { |
354 switch(tap->state()) { |
356 switch(tap->state()) { |
412 HbEffect::start(gItem, HB_SLIDERHANDLE_TYPE, "h_outofbound"); |
414 HbEffect::start(gItem, HB_SLIDERHANDLE_TYPE, "h_outofbound"); |
413 } |
415 } |
414 #endif |
416 #endif |
415 sliderBounds.adjust(0, 0, -handleBounds.width(), 0); |
417 sliderBounds.adjust(0, 0, -handleBounds.width(), 0); |
416 span = sliderBounds.width(); |
418 span = sliderBounds.width(); |
417 sliderPos = relativePos.rx(); |
419 sliderPos = static_cast<int>(relativePos.x()); |
418 sliderPos-=handleBounds.width()/2; |
420 sliderPos-= static_cast<int>(handleBounds.width()/2); |
419 } else { |
421 } else { |
420 #ifdef HB_EFFECTS |
422 #ifdef HB_EFFECTS |
421 if( sliderBounds.topLeft().y() > relativePos.ry() || |
423 if( sliderBounds.topLeft().y() > relativePos.ry() || |
422 sliderBounds.bottomRight().y() < relativePos.ry()) { |
424 sliderBounds.bottomRight().y() < relativePos.ry()) { |
423 HbEffect::start(gItem, HB_SLIDERHANDLE_TYPE, "v_outofbound"); |
425 HbEffect::start(gItem, HB_SLIDERHANDLE_TYPE, "v_outofbound"); |
424 } |
426 } |
425 #endif |
427 #endif |
426 sliderBounds.adjust(0, 0, 0, -handleBounds.height()); |
428 sliderBounds.adjust(0, 0, 0, -handleBounds.height()); |
427 span = sliderBounds.height(); |
429 span = sliderBounds.height(); |
428 sliderPos = relativePos.ry(); |
430 sliderPos = static_cast<int>(relativePos.y()); |
429 sliderPos -= handleBounds.height() / 2; |
431 sliderPos -= static_cast<int>(handleBounds.height()/2); |
430 |
432 |
431 } |
433 } |
432 int pressValue= QStyle::sliderValueFromPosition(opt.minimum, opt.maximum, |
434 int pressValue= QStyle::sliderValueFromPosition(opt.minimum, opt.maximum, |
433 sliderPos, static_cast<int>(span),opt.upsideDown); |
435 sliderPos, static_cast<int>(span),opt.upsideDown); |
434 sliderControl->setSliderPosition(pressValue); |
436 sliderControl->setSliderPosition(pressValue); |
|
437 sliderControl->setToolTip(QString::number(pressValue)); |
435 sliderControl->showToolTip(); |
438 sliderControl->showToolTip(); |
436 break; |
439 break; |
437 } |
440 } |
438 case Qt::GestureFinished: |
441 case Qt::GestureFinished: |
439 case Qt::GestureCanceled: { |
442 case Qt::GestureCanceled: { |
472 HbStyleOptionSlider opt; |
475 HbStyleOptionSlider opt; |
473 sliderControl->initStyleOption(&opt); |
476 sliderControl->initStyleOption(&opt); |
474 if( scene()){ |
477 if( scene()){ |
475 if (true == sliderControl->isSliderDown()){ |
478 if (true == sliderControl->isSliderDown()){ |
476 opt.state |= QStyle::State_Sunken; |
479 opt.state |= QStyle::State_Sunken; |
477 sliderControl->style()->updatePrimitive( |
480 HbStylePrivate::updatePrimitive( |
478 sliderControl->primitive(HbStyle::P_Slider_groove), HbStyle::P_Slider_groove, &opt); |
481 sliderControl->primitive((HbStyle::Primitive)HbStylePrivate::P_Slider_groove), HbStylePrivate::P_Slider_groove, &opt); |
479 } else { |
482 } else { |
480 opt.state &= ~QStyle::State_Sunken; |
483 opt.state &= ~QStyle::State_Sunken; |
481 } |
484 } |
482 } else { |
485 } else { |
483 opt.state &= ~QStyle::State_Sunken; |
486 opt.state &= ~QStyle::State_Sunken; |
484 } |
487 } |
485 |
488 |
486 opt.boundingRect=boundingRect(); |
489 opt.boundingRect=boundingRect(); |
487 sliderControl->style()->updatePrimitive(gItem, HbStyle::P_Slider_thumb, &opt); |
490 HbStylePrivate::updatePrimitive(gItem, HbStylePrivate::P_Slider_thumb, &opt); |
488 sliderControl->style()->updatePrimitive(touchItem , HbStyle::P_SliderElement_touchhandle ,&opt); |
491 HbStylePrivate::updatePrimitive(touchItem , HbStylePrivate::P_SliderElement_touchhandle ,&opt); |
489 sliderControl->update(boundingRect()); |
492 sliderControl->update(boundingRect()); |
490 } |
493 } |
491 |
494 |
492 /*! |
495 /*! |
493 reimp |
496 reimp |
494 |
497 |
495 */ |
498 */ |
496 QGraphicsItem * HbSliderHandle::primitive(HbStyle::Primitive primitive) const |
499 QGraphicsItem * HbSliderHandle::primitive(HbStyle::Primitive primitive) const |
497 { |
500 { |
498 switch (primitive) { |
501 switch (primitive) { |
499 case HbStyle::P_Slider_thumb: |
502 case HbStylePrivate::P_Slider_thumb: |
500 return gItem; |
503 return gItem; |
501 case HbStyle::P_SliderElement_touchhandle: |
504 case HbStylePrivate::P_SliderElement_touchhandle: |
502 return touchItem; |
505 return touchItem; |
503 default: |
506 default: |
504 return NULL; |
507 return NULL; |
505 } |
508 } |
506 } |
509 } |