src/hbwidgets/widgets/hbpushbutton.cpp
changeset 1 f7ac710697a9
parent 0 16d8024aca5e
child 2 06ff229162e9
--- a/src/hbwidgets/widgets/hbpushbutton.cpp	Mon Apr 19 14:02:13 2010 +0300
+++ b/src/hbwidgets/widgets/hbpushbutton.cpp	Mon May 03 12:48:33 2010 +0300
@@ -27,8 +27,6 @@
 #include "hbpushbutton_p.h"
 #include "hbstyle.h"
 #include "hbstyleoptionpushbutton.h"
-#include "hbgesturefilter.h"
-#include "hbgesture.h"
 #include "hbframedrawerpool_p.h"
 #include "hbnamespace.h"
 #ifdef HB_EFFECTS
@@ -36,6 +34,10 @@
 #include "hbeffectinternal_p.h"
 #endif
 
+#ifdef HB_GESTURE_FW
+#include <hbtapgesture.h>
+#endif
+
 #include <QGraphicsSceneMouseEvent>
 #include <QTimer>
 #include <QGraphicsItem>
@@ -133,8 +135,6 @@
     focusItem(0),
     orientation(Qt::Vertical),
     backgroundFrameDrawer(0),
-    gestureFilter(0),
-    gestureLongpressed(0),
     longPressTimer(0),
     textAlignment(Qt::AlignHCenter | Qt::AlignVCenter ),
     additionalTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter ),
@@ -155,10 +155,7 @@
  */
 HbPushButtonPrivate::~HbPushButtonPrivate()
 {
-    if(gestureFilter){
-        delete gestureFilter;
-        gestureFilter = NULL;
-    }
+
 }
 
 /*
@@ -205,6 +202,12 @@
 
     if( !touchArea ) {
         touchArea = q->style()->createPrimitive( HbStyle::P_PushButton_toucharea, q );
+        if(QGraphicsObject *ta = qgraphicsitem_cast<QGraphicsObject*>(touchArea)) {
+            ta->grabGesture(Qt::TapGesture);
+            q->ungrabGesture(Qt::TapGesture);
+        } else {
+            q->grabGesture(Qt::TapGesture);
+        }
     }
 
     if( !focusItem ) {
@@ -215,28 +218,7 @@
     }
 }
 
-/*
-  initGesture.
- */
-void HbPushButtonPrivate::initGesture()
-{
-    Q_Q(HbPushButton);
-    // Create gesture filter
-    gestureFilter = new HbGestureSceneFilter( Qt::LeftButton, q );
-    // Add gestures for longpress
-    gestureLongpressed = new HbGesture( HbGesture::longpress,5 );
-    gestureFilter->addGesture( gestureLongpressed );
 
-    // scene event filter for gesture can be installed
-    // if widget is already added to scene
-    if (q->scene()) {
-        q->installSceneEventFilter(gestureFilter);
-        if (touchArea) {
-            touchArea->installSceneEventFilter(gestureFilter);
-        }
-    }
-
-}
 
 void HbPushButtonPrivate::_q_handleLongPress(QPointF point)
 {
@@ -261,8 +243,6 @@
     Q_Q(HbPushButton);
     q_ptr = q;
     createPrimitives();
-    initGesture();
-
 }
 
 /*!
@@ -274,8 +254,7 @@
 {
     Q_D(HbPushButton);
     d->initialize();
-    connect( d->gestureLongpressed, SIGNAL(longPress(QPointF)),
-        this, SLOT(_q_handleLongPress(QPointF)));
+
     setProperty("state", "normal");
      
 }
@@ -290,8 +269,7 @@
     Q_D(HbPushButton);
     d->text = text;
     d->initialize();
-    connect( d->gestureLongpressed, SIGNAL(longPress(QPointF)),
-        this, SLOT(_q_handleLongPress(QPointF)) );
+
     setProperty("state", "normal");
      
 
@@ -308,8 +286,7 @@
     d->icon = icon;
     d->text = text;
     d->initialize();
-    connect( d->gestureLongpressed, SIGNAL(longPress(QPointF)),
-        this, SLOT(_q_handleLongPress(QPointF)) );
+
     setProperty("state", "normal");
 
 }
@@ -328,8 +305,7 @@
     d->text = text;
     d->initialize();
     d->orientation = orientation;
-    connect( d->gestureLongpressed, SIGNAL(longPress(QPointF)),
-        this, SLOT(_q_handleLongPress(QPointF)) );
+
     setProperty("state", "normal");
             
 }
@@ -339,10 +315,7 @@
  */
 HbPushButton::~HbPushButton()
 {
-    Q_D(HbPushButton);
-    if( d->gestureFilter ) {
-        removeSceneEventFilter( d->gestureFilter );
-    }
+
 }
 
 /*!
@@ -685,6 +658,10 @@
 }
 
 /*!
+
+    \deprecated HbPushButton::primitive(HbStyle::Primitive)
+        is deprecated.
+
     \reimp
  */
 QGraphicsItem* HbPushButton::primitive( HbStyle::Primitive primitive ) const
@@ -771,10 +748,6 @@
 HbPushButton::HbPushButton(HbPushButtonPrivate &dd, QGraphicsItem * parent) :
     HbAbstractButton(dd, parent)
 {
-    Q_D(HbPushButton);
-    d->initGesture();
-    connect( d->gestureLongpressed, SIGNAL(longPress(QPointF)),
-        this, SLOT(_q_handleLongPress(QPointF)) );
 }
 
 /*!
@@ -876,6 +849,7 @@
  */
 void HbPushButton::mousePressEvent( QGraphicsSceneMouseEvent *event )
 {
+#ifndef HB_GESTURE_FW
     Q_D(HbPushButton);
     HbAbstractButton::mousePressEvent(event);
     HbStyleOptionPushButton buttonOption;
@@ -889,8 +863,12 @@
     }
 #endif
     setProperty("state", "pressed");    
+#else
+    Q_UNUSED(event)
+#endif
 }
 
+#ifndef HB_GESTURE_FW
 /*!
     \reimp
  */
@@ -924,11 +902,61 @@
         style()->updatePrimitive( d->frameItem, HbStyle::P_PushButton_background, &buttonOption );
     }
     if (d->down) {
-        setProperty("state", "pressed"); 
+        setProperty("state", "pressed");
     } else {
-        setProperty("state", "normal"); 
+        setProperty("state", "normal");
     }
 }
+#endif
+
+
+#ifdef HB_GESTURE_FW
+void HbPushButton::gestureEvent(QGestureEvent *event)
+{
+    Q_D(HbPushButton);
+    if(HbTapGesture *tap = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) {
+        switch(tap->state()) {
+        case Qt::GestureStarted:{
+#ifdef HB_EFFECTS
+                HbEffect::start( this, HB_PUSHBUTTON_TYPE, "pressed" );
+#endif
+                if(d->checkable && !d->checked){
+                    setProperty("state", "latched");
+                }else if(!d->checkable){
+                    setProperty("state", "pressed");
+                }
+            }
+            break;
+        case Qt::GestureUpdated:
+            if(tap->tapStyleHint() == HbTapGesture::TapAndHold) {
+                d->longPress = true;
+                emit longPress(event->mapToGraphicsScene(tap->position()));
+            }
+            break;
+        case Qt::GestureCanceled:
+            setProperty("state", "normal");
+            break;
+        case Qt::GestureFinished:{
+#ifdef HB_EFFECTS
+                HbEffect::start( this, HB_PUSHBUTTON_TYPE, "released" );
+#endif
+                if( d->checkable && !d->checked){
+                    setProperty("state", "latched");
+                }else {                    
+                    setProperty("state", "normal");
+                }
+
+            }
+            break;
+        default:
+            break;
+        }
+    }
+
+    HbAbstractButton::gestureEvent(event);
+
+}
+#endif
 
 
 /*!
@@ -992,8 +1020,6 @@
  */
 QVariant HbPushButton::itemChange(GraphicsItemChange change, const QVariant &value)
 {
-    Q_D(HbPushButton);
-
     switch ( change ) {
         case ItemEnabledHasChanged:
         case ItemVisibleChange: {
@@ -1001,14 +1027,6 @@
             }
             break;
         case ItemSceneHasChanged: {
-                // scene event filter for gestures can be installed
-                // once the widget has been added to the scene
-                if(!value.isNull() && d->gestureFilter) {
-                    installSceneEventFilter(d->gestureFilter);
-                    if (d->touchArea) {
-                        d->touchArea->installSceneEventFilter(d->gestureFilter);
-                    }
-                }
                 updatePrimitives();
             }
             break;