qstmgesturelib/qstmgestureevent.h
changeset 16 3c88a81ff781
parent 3 0954f5dd2cd0
--- a/qstmgesturelib/qstmgestureevent.h	Thu Sep 23 15:32:11 2010 -0400
+++ b/qstmgesturelib/qstmgestureevent.h	Fri Oct 15 17:30:59 2010 -0400
@@ -26,8 +26,13 @@
 #include <QString>
 #include <QVarLengthArray>
 #include <QMouseEvent>
+#include <QWidget>
+#include <QApplication>
+#include <QGraphicsScene>
+#include <QGraphicsView>
 #include <QGesture>
-#include <QWidget>
+#include <QString>
+#include <QGraphicsWidget>
 
 #include "qstmgesturedefs.h"
 #include "qstmgesture_if.h"
@@ -35,7 +40,6 @@
 #define QStmGestureEventType QEvent::User + 1 
 #define QStmGestureType Qt::CustomGesture
 
-
 enum QStm_GestureType
 	{
 	    QStmUknownGestureType = 0,
@@ -53,7 +57,8 @@
 	    QStmEdgeScrollGestureType,
 	    
 	    QStmPinchGestureType, 
-	    QStmCornerZoomGestureType
+	    QStmCornerZoomGestureType,
+	    QStmMaybeTapGestureType
 	};
 
 
@@ -70,10 +75,15 @@
     
     QStm_Gesture& operator=(QStm_Gesture& other);
     QPoint  position() const { return m_pos; }
+    QPointF scenePosition(QGraphicsItem* i);
     void setPosition(const QPoint &pos) { m_pos = pos; /*setHotSpot(QPointF(pos)); */}
+    QPoint  position2() const { return m_pos2; }
+    QPointF scenePosition2(QGraphicsItem* i);
+    void setPosition2(const QPoint &pos) { m_pos2 = pos; /*setHotSpot(QPointF(pos)); */}
     
     void setGestureStmType(QStm_GestureType type) { m_gstType = type; }    
     QStm_GestureType  getGestureStmType() const { return m_gstType; }
+    QStm_GestureType  gestureUidToStmType(qstmGesture::QStm_GestureUid uid, int stmGestSubType);
     
     void setGestureState(Qt::GestureState state) { m_state = state; }
     Qt::GestureState gestureState() { return m_state; }
@@ -85,31 +95,44 @@
     void setSpeed(qreal speed) { m_speed = speed; }
     
     QPointF getSpeedVec() { return m_speedVec; }
+    QPointF sceneSpeedVec(QGraphicsItem* i);
     void setSpeedVec(QPointF speedVec) { m_speedVec = speedVec; }
     
     QPoint getLengthAndDirection() { return m_vector; }
+    QPointF sceneLengthAndDirection(QGraphicsItem* i);
+
     void setLengthAndDirection(QPoint vec) { m_vector = vec; }
     
     int getDirection() { return m_direction; }
+    int sceneDirection(QGraphicsItem* i);
     void setDirection(int dir) { m_direction = dir; }
     QString  gestureName();
     
     void* getDetails() { return m_details; }
     void  setDetails(void* details ) { m_details = details; }
+    QTime timestamp() { return m_timestamp; }
+    void  setTimestamp(QTime ts) { m_timestamp.setHMS(ts.hour(),
+                                   ts.minute(), ts.second(), ts.msec()); }
     
     bool sendEvent(QEvent* event);
     QList<QMouseEvent*>   getMouseEvents();
     bool sendMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier = Qt::NoModifier);
     bool sendMouseEvents(Qt::KeyboardModifier modifier = Qt::NoModifier);
     bool postMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier = Qt::NoModifier);
-
+    bool sendGraphicsSceneMouseEvent(QGraphicsObject* go);
     void setTarget(QWidget* target) { m_target = target; }
     QWidget* target() { return m_target; }
     
-    static void setAssignedGestureType(Qt::GestureType type) { s_assignedType = type; }
-    static Qt::GestureType assignedType() { return s_assignedType; } 
-    
-    
+    static void setAssignedGestureType(Qt::GestureType type);
+    static Qt::GestureType assignedType(); 
+    static QGraphicsItem* gestureGrabberItem();
+    static void setGestureGrabberItem(QGraphicsItem* item);
+    static QGraphicsItem* gestureFocusedItem();
+    static void setGestureFocusedItem(QGraphicsItem* item);
+    bool clearGestureFocusedItemIfNeeded();
+    bool isGestureEnded();
+    void updateGestureFocusedItemIfNeeded(QGraphicsItem* gi);
+    QEvent::Type gestureType2GraphicsSceneMouseType();
 
 private:
     bool sendOrPostMouseEvents(QObject* receiver, Qt::KeyboardModifier modifier, bool send);
@@ -123,24 +146,51 @@
     Qt::GestureState  m_state;
     int               m_gstSubType;
     QPoint            m_pos;
+    QPoint            m_pos2;
     void*             m_details;
     QPointF           m_speedVec;
-    static Qt::GestureType   s_assignedType;
     QWidget*          m_target;
+    QTime             m_timestamp;
 };
 
+QSTMGESTURELIB_EXPORT QStm_Gesture* getQStmGesture(QEvent* event);
+QSTMGESTURELIB_EXPORT QPointF qstmMapFromGlobal(const QPointF& gpos, QGraphicsObject* graphicsObj);
+QSTMGESTURELIB_EXPORT QPoint qstmMapFromScene(const QPointF& gpos, QGraphicsObject* graphicsObj);
+QSTMGESTURELIB_EXPORT QPointF qstmMapToScene(const QPointF& gpos, QGraphicsObject* graphicsObj);
+QSTMGESTURELIB_EXPORT QGraphicsView* qstmGetGraphicsView(QGraphicsObject* graphicsObj);
+QSTMGESTURELIB_EXPORT bool qstmDeliverGestureEventToGraphicsItem(QGraphicsView* gv, QEvent* event);
+QSTMGESTURELIB_EXPORT void qstmSetGraphicsSceneMouseEvent(const QPointF& scenePos, QGraphicsObject* graphicsObj,
+                                                          QGraphicsSceneMouseEvent& event, bool select = false);
 
-QSTMGESTURELIB_EXPORT QStm_Gesture* getQStmGesture(QEvent* event);
-
-
+QSTMGESTURELIB_EXPORT bool qstmIsGraphicsSceneMouseEvent(QEvent* event);
+QSTMGESTURELIB_EXPORT bool qstmIsMouseEvent(QEvent* event);
+QSTMGESTURELIB_EXPORT bool qstmIsTouchEvent(QEvent* event);
+QSTMGESTURELIB_EXPORT bool qstmIsContextMenuEvent(QEvent* event);
 
 class QSTMGESTURELIB_EXPORT QStm_GestureEvent : public QEvent
 {
 public:	
 	QStm_GestureEvent();
 	virtual ~QStm_GestureEvent();
-	static QEvent::Type stmGestureEventType() { return static_cast<QEvent::Type>(QStmGestureEventType); }
+	static QEvent::Type stmGestureEventType();
 };
 
 
+class QSTMGESTURELIB_EXPORT QStm_GestureEventFilter : public QObject
+{
+public:
+    QStm_GestureEventFilter() {}
+    virtual ~QStm_GestureEventFilter() {}
+    static  QStm_GestureEventFilter* instance();
+    bool eventFilter(QObject* receiver, QEvent* event);
+    bool event(QEvent* event);
+    bool sendGraphicsSceneMouseEvent(QEvent* event, QGraphicsObject* go);
+
+
+private:
+    static QStm_GestureEventFilter* m_instance;
+};
+
+
+
 #endif /* QSTMGESTUREEVENT_H_ */