src/hbwidgets/sliders/hbprogressslider.cpp
changeset 23 e6ad4ef83b23
parent 21 4633027730f5
child 28 b7da29130b0e
--- 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;
+}