--- a/src/hbwidgets/sliders/hbprogressslider.cpp Wed Aug 18 10:05:37 2010 +0300
+++ b/src/hbwidgets/sliders/hbprogressslider.cpp Thu Sep 02 20:44:51 2010 +0300
@@ -29,7 +29,7 @@
#include <hbtooltip.h>
#include <hbwidgetfeedback.h>
#include "hbglobal_p.h"
-
+#include <hbtoucharea.h>
#include <QGraphicsSceneMouseEvent>
#include <QApplication>
@@ -39,6 +39,10 @@
#define HB_PRGRESSSLIDER_ITEM_TYPE "HB_PROGRESSSLIDER"
#endif
+#ifdef HB_GESTURE_FW
+#include <hbtapgesture.h>
+#endif
+
HbProgressSliderPrivate::HbProgressSliderPrivate()
{
mDownState=false;
@@ -109,11 +113,11 @@
HbEffectInternal::add(HB_PRGRESSSLIDER_ITEM_TYPE,"progressslider_trackrelease", "progressslider_trackrelease");
#endif
- q->grabGesture(Qt::TapGesture);
-
+#ifdef HB_GESTURE_FW
if(QGraphicsObject *touchArea = mTouchAreaItem->toGraphicsObject()) {
touchArea->grabGesture(Qt::TapGesture);
}
+#endif
}
void HbProgressSliderPrivate::emitSliderPressed()
@@ -125,6 +129,20 @@
void HbProgressSliderPrivate::emitSliderReleased()
{
Q_Q(HbProgressSlider);
+ if(mDownState){
+ mDownState = false;
+ HbStyleOptionProgressSlider option;
+ q->initStyleOption(&option);
+ if (mFrame) {
+ HbStylePrivate::updatePrimitive(mFrame, HbStylePrivate::P_ProgressSlider_frame, &option);
+ }
+ HbWidgetFeedback::triggered(q, Hb::InstantReleased);
+
+#ifdef HB_EFFECTS
+ // HbEffect::start(q, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
+#endif
+ }
+
emit q->sliderReleased();
}
@@ -295,6 +313,7 @@
HbProgressSlider::HbProgressSlider(QGraphicsItem *parent) :
HbProgressBar(*new HbProgressSliderPrivate,parent)
{
+ HbEffect::disable(this);
Q_D( HbProgressSlider );
d->q_ptr = this;
d->init();
@@ -315,6 +334,8 @@
else{
d->handle->setPos(0,boundingRect().height());
}
+
+ HbEffect::disable(this);
}
@@ -326,6 +347,7 @@
HbProgressSlider::HbProgressSlider(HbProgressSliderPrivate &dd,QGraphicsItem *parent) :
HbProgressBar( dd,parent)
{
+ HbEffect::disable(this);
Q_D( HbProgressSlider );
d->init();
@@ -339,6 +361,8 @@
else{
d->handle->setPos(0,boundingRect().height());
}
+
+ HbEffect::disable(this);
}
@@ -437,6 +461,7 @@
*/
void HbProgressSlider::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
+#ifndef HB_GESTURE_FW
Q_D(HbProgressSlider);
QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
@@ -456,7 +481,7 @@
HbWidgetFeedback::triggered(this, Hb::InstantPressed);
d->handle->handleTrackPress(event);
- emit trackPressed();
+ emit trackPressed();
event->accept();
#ifdef HB_EFFECTS
HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackpress");
@@ -464,6 +489,9 @@
} else {
event->ignore();
}
+#else
+ Q_UNUSED(event)
+#endif
}
/*!
@@ -471,6 +499,7 @@
*/
void HbProgressSlider::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
+#ifndef HB_GESTURE_FW
Q_D(HbProgressSlider);
if(flags().testFlag(ItemIsFocusable)) {
@@ -484,7 +513,7 @@
HbWidgetFeedback::triggered(this, Hb::InstantReleased);
d->handle->handleTrackRelease(event);
- emit trackReleased();
+ emit trackReleased();
event->accept();
#ifdef HB_EFFECTS
HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
@@ -492,7 +521,86 @@
} else {
event->ignore();
}
+#else
+ Q_UNUSED(event)
+#endif
}
+
+#ifdef HB_GESTURE_FW
+void HbProgressSlider::gestureEvent(QGestureEvent *event)
+{
+ Q_D (HbProgressSlider);
+
+ if(event->gesture(Qt::TapGesture)) {
+
+ HbTapGesture *tapGesture = static_cast<HbTapGesture *>(event->gesture(Qt::TapGesture));
+ switch(tapGesture->state()) {
+ case Qt::GestureStarted :{
+ QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
+ // return if point is outside track touch area
+ if ( !rect.contains( event->mapToGraphicsScene(tapGesture->position( ) ) ) ) {
+ event->ignore( );
+ return;
+ }
+ if(flags().testFlag(ItemIsFocusable)) {
+ #ifdef HB_EFFECTS
+ HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackpress");
+ #endif
+ d->mDownState = true;
+ HbStyleOptionProgressSlider option;
+ initStyleOption(&option);
+ d->handle->setPressedState();
+ if (d->mFrame) {
+ HbStylePrivate::updatePrimitive(d->mFrame, HbStylePrivate::P_ProgressSlider_frame, &option);
+ }
+
+ HbWidgetFeedback::triggered(this, Hb::InstantPressed);
+ d->handle->handleTrackPress(event);
+ emit trackPressed();
+ event->accept();
+
+ }
+ else {
+ event->ignore();
+ }
+ }
+ break;
+
+ case Qt::GestureFinished:{
+ if(flags().testFlag(ItemIsFocusable)) {
+ #ifdef HB_EFFECTS
+ HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
+ #endif
+
+ d->mDownState = false;
+
+ HbStyleOptionProgressSlider option;
+ initStyleOption(&option);
+ if (d->mFrame) {
+ HbStylePrivate::updatePrimitive(d->mFrame, HbStylePrivate::P_ProgressSlider_frame, &option);
+ }
+
+ HbWidgetFeedback::triggered(this, Hb::InstantReleased);
+ d->handle->setReleasedState();
+ d->handle->handleTrackRelease(event);
+ emit trackReleased();
+ event->accept();
+
+
+ } else {
+ event->ignore();
+ }
+
+ }
+ break;
+ default:break;
+ }
+ }
+
+}
+#endif
+
+
/*!
\reimp
*/
@@ -597,6 +705,7 @@
*/
void HbProgressSlider::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
+#ifndef HB_GESTURE_FW
Q_D(HbProgressSlider);
QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
// return if point is outside track touch area
@@ -611,35 +720,10 @@
} else {
event->ignore();
}
-
+#else
+ Q_UNUSED(event)
+#endif
}
-/*!
- \reimp
- */
-bool HbProgressSlider::sceneEventFilter(QGraphicsItem *obj,QEvent *event)
-{
- Q_D(HbProgressSlider);
- if( obj == d->mTouchAreaItem) {
- if (!isEnabled() ) {
- return false;
- }
- if (event->type() == QEvent::GraphicsSceneMousePress){
- mousePressEvent((QGraphicsSceneMouseEvent *) event);
- return true;
- }
- else if (event->type() == QEvent::GraphicsSceneMouseRelease){
- mouseReleaseEvent((QGraphicsSceneMouseEvent *) event);
- return true;
- }
-
- else if (event->type() == QEvent::GraphicsSceneMouseMove){
- mouseMoveEvent((QGraphicsSceneMouseEvent *) event);
- return true;
- }
- }
- return false;
-}
-
/*!
@beta
@@ -734,3 +818,20 @@
}
}
+bool HbProgressSlider::sceneEventFilter(QGraphicsItem *obj,QEvent *event)
+{
+ Q_D(HbProgressSlider);
+ bool accepted = false;
+
+ if( obj == d->mTouchAreaItem)
+ if (!isEnabled() ) {
+ return false;
+ }
+
+ if(obj == static_cast<HbTouchArea*>(d->mTouchAreaItem)) {
+ if(event->type() == QEvent::Gesture ) {
+ gestureEvent(static_cast<QGestureEvent *>( event ));
+ }
+ }
+ return accepted;
+}