qstmgesturelib/qstmgestureapi.cpp
changeset 16 3c88a81ff781
parent 3 0954f5dd2cd0
equal deleted inserted replaced
14:6aeb7a756187 16:3c88a81ff781
    35 #include <qstmleftrightgesturerecogniser.h>
    35 #include <qstmleftrightgesturerecogniser.h>
    36 #include <qstmupdowngesturerecogniser.h>
    36 #include <qstmupdowngesturerecogniser.h>
    37 #include <qstmflickgesturerecogniser.h>
    37 #include <qstmflickgesturerecogniser.h>
    38 #include <qstmunknowngesturerecogniser.h>
    38 #include <qstmunknowngesturerecogniser.h>
    39 #include <qstmzoomgesturerecogniser.h>
    39 #include <qstmzoomgesturerecogniser.h>
       
    40 #include <qstmmaybetapgesturerecogniser.h>
    40 
    41 
    41 #include <qstmgestureapi.h>
    42 #include <qstmgestureapi.h>
    42 #include <qstmgestureevent.h>
    43 #include <qstmgestureevent.h>
    43 #include <QtGui>
    44 #include <QtGui>
    44 
    45 
    55     memcpy(&m_areaSettings[0], &params.m_areaSettings[0], sizeof(m_areaSettings));
    56     memcpy(&m_areaSettings[0], &params.m_areaSettings[0], sizeof(m_areaSettings));
    56     memcpy(&m_enabled[0], &params.m_enabled[0], sizeof(m_enabled));
    57     memcpy(&m_enabled[0], &params.m_enabled[0], sizeof(m_enabled));
    57 }
    58 }
    58 
    59 
    59 
    60 
    60 QStm_GestureEngineApi::QStm_GestureEngineApi()
    61 QStm_GestureEngineApi::QStm_GestureEngineApi() : m_gestureEngine(0), m_statemachine(0), m_config(0)
    61 {
    62 {
    62 	init();
    63 	init();
    63 }
    64 }
    64 
    65 
    65 void QStm_GestureEngineApi::init()
    66 void QStm_GestureEngineApi::init()
    66 {
    67 {
    67     //m_gf = new QStm_GestureFramework();
    68     //m_gf = new QStm_GestureFramework();
    68 	m_gestureEngine = new QStm_GestureEngine();
    69 	m_gestureEngine = new QStm_GestureEngine();
    69 	m_statemachine = new QStm_StateMachine();
    70 	m_statemachine = new QStm_StateMachine();
    70 	m_statemachine->addUiEventObserver(m_gestureEngine);
    71 	m_statemachine->addUiEventObserver(m_gestureEngine);
    71 	m_config = new QStm_GestureParameters();    
    72 	//m_config = new QStm_GestureParameters();    
    72 }
    73 }
    73 
    74 
    74 QStm_GestureEngineApi::~QStm_GestureEngineApi()
    75 QStm_GestureEngineApi::~QStm_GestureEngineApi()
    75 {
    76 {
    76     // Prevent reactivation of contexts as they remove themselves
    77     // Prevent reactivation of contexts as they remove themselves
    77     m_dtorPhase = true;
    78     m_dtorPhase = true;
    78 
    79 
    79     qDeleteAll(m_contexts.begin(), m_contexts.end());
    80     qDeleteAll(m_contexts.begin(), m_contexts.end());
    80     m_contexts.clear();
    81     m_contexts.clear();
    81     m_ctxtStack.clear();
    82     m_ctxtStack.clear();
    82     delete m_config;
    83     //delete m_config;
    83     delete m_gestureEngine;
    84     delete m_gestureEngine;
    84     delete m_statemachine;
    85     delete m_statemachine;
    85 }
    86 }
    86 
    87 
    87 QStm_GestureContext* QStm_GestureEngineApi::createContext(int /*aId*/ )
    88 QStm_GestureContext* QStm_GestureEngineApi::createContext(int /*aId*/ )
   197     m_statemachine->setTouchArea      ( !filter ? 0 : touchAreaSizeInMm );
   198     m_statemachine->setTouchArea      ( !filter ? 0 : touchAreaSizeInMm );
   198     m_statemachine->setTouchTimeout   ( !filter ? 0 : touchArea.m_timeout);
   199     m_statemachine->setTouchTimeout   ( !filter ? 0 : touchArea.m_timeout);
   199     int moveToleranceInMm = conf.param(qstmGesture::EMoveTolerance);
   200     int moveToleranceInMm = conf.param(qstmGesture::EMoveTolerance);
   200     m_statemachine->setMoveTolerance(moveToleranceInMm);
   201     m_statemachine->setMoveTolerance(moveToleranceInMm);
   201     
   202     
       
   203     qreal axisLock = conf.param(qstmGesture::EAxisLockThreshold) /100.f;
       
   204     
   202     QWidget* gestureContext = static_cast<QWidget*>(context.getOwner());
   205     QWidget* gestureContext = static_cast<QWidget*>(context.getOwner());
   203     QRect ctxtRect = gestureContext ? gestureContext->rect() : QRect();
   206     QRect ctxtRect = gestureContext ? gestureContext->rect() : QRect();
   204     if(gestureContext) {
   207     if(gestureContext) {
   205         QPoint p = gestureContext->mapToGlobal(QPoint(0,0)) ;
   208         QPoint p = gestureContext->mapToGlobal(QPoint(0,0)) ;
   206         ctxtRect.moveTo(p) ;
   209         ctxtRect.moveTo(p) ;
   275     using qstmGesture::QStm_LeftrightGestureRecogniser;
   278     using qstmGesture::QStm_LeftrightGestureRecogniser;
   276 
   279 
   277     if (conf.enabled(QStm_LeftrightGestureRecogniser::KUid)) {
   280     if (conf.enabled(QStm_LeftrightGestureRecogniser::KUid)) {
   278         QStm_LeftrightGestureRecogniser* gesture = NULL;
   281         QStm_LeftrightGestureRecogniser* gesture = NULL;
   279         initRecognizer(gesture, context, isNewCtx);
   282         initRecognizer(gesture, context, isNewCtx);
       
   283         gesture->setAxisLockThreshold(axisLock);
       
   284         
   280     }
   285     }
   281 
   286 
   282     // ===================================================== UP-DOWN
   287     // ===================================================== UP-DOWN
   283     using qstmGesture::QStm_UpdownGestureRecogniser;
   288     using qstmGesture::QStm_UpdownGestureRecogniser;
   284 
   289 
   285     if (conf.enabled(QStm_UpdownGestureRecogniser::KUid)) {
   290     if (conf.enabled(QStm_UpdownGestureRecogniser::KUid)) {
   286         QStm_UpdownGestureRecogniser* gesture = NULL;
   291         QStm_UpdownGestureRecogniser* gesture = NULL;
   287         initRecognizer(gesture, context, isNewCtx);
   292         initRecognizer(gesture, context, isNewCtx);
       
   293         gesture->setAxisLockThreshold(axisLock);
   288     }
   294     }
   289 
   295 
   290     // ===================================================== HOVER
   296     // ===================================================== HOVER
   291     using qstmGesture::QStm_HoveringGestureRecogniser;
   297     using qstmGesture::QStm_HoveringGestureRecogniser;
   292 
   298 
   309             gesture->setPanningSpeedLow ( conf.param(qstmGesture::EPanSpeedLow)  / 100.f );
   315             gesture->setPanningSpeedLow ( conf.param(qstmGesture::EPanSpeedLow)  / 100.f );
   310             gesture->setPanningSpeedHigh( conf.param(qstmGesture::EPanSpeedHigh) / 100.f );
   316             gesture->setPanningSpeedHigh( conf.param(qstmGesture::EPanSpeedHigh) / 100.f );
   311         }
   317         }
   312     }
   318     }
   313 
   319 
   314     // ===================================================== RELEASE
   320     // ===================================================== MAYBE TAP
   315     using qstmGesture::QStm_ReleaseGestureRecogniser;
   321     using qstmGesture::QStm_MaybeTapGestureRecogniser;
   316 
   322 
   317     if (conf.enabled(QStm_ReleaseGestureRecogniser::KUid)) {
   323     if (conf.enabled(QStm_MaybeTapGestureRecogniser::KUid)) {
   318         QStm_ReleaseGestureRecogniser* gesture = NULL;
   324         int pos = m_gestureEngine->findGesture(QStm_MaybeTapGestureRecogniser::KUid);
   319         initRecognizer(gesture, context, isNewCtx);
   325         QStm_MaybeTapGestureRecogniser* gesture = NULL;
   320 
   326         
   321         if(gesture) {
   327         if (pos > -1) {
   322             gesture->setArea(QRect());
   328             gesture = static_cast<QStm_MaybeTapGestureRecogniser*>(m_gestureEngine->gestureAt(pos));
   323         }
   329             gesture->addTapListener(&context, context.getOwner());
   324     }
   330         }
   325 
   331         else {
   326 
   332         initRecognizer(gesture, context, isNewCtx);
       
   333         }
       
   334         
       
   335         if(gesture) {
       
   336             gesture->setTapRange( touchAreaSizeInMm );
       
   337         }
       
   338 
       
   339     }
       
   340     
       
   341     
   327     // ===================================================== TAP / DOUBLE TAP
   342     // ===================================================== TAP / DOUBLE TAP
   328     // Add recognizer before any existing Flick, Release, Unknown
   343     // Add recognizer before any existing Flick, Release, Unknown
   329     // Add the gesture to the gesture engine
   344     // Add the gesture to the gesture engine
   330     using qstmGesture::QStm_TapGestureRecogniser;
   345     using qstmGesture::QStm_TapGestureRecogniser;
   331 
   346 
   359         if(gesture) {
   374         if(gesture) {
   360             qreal flickSpeed = conf.param(qstmGesture::EFlickSpeed) / 100.f;
   375             qreal flickSpeed = conf.param(qstmGesture::EFlickSpeed) / 100.f;
   361             gesture->setFlickingSpeed(flickSpeed);
   376             gesture->setFlickingSpeed(flickSpeed);
   362         }
   377         }
   363     }
   378     }
       
   379 
       
   380     // ===================================================== RELEASE
       
   381             using qstmGesture::QStm_ReleaseGestureRecogniser;
       
   382 
       
   383             if (conf.enabled(QStm_ReleaseGestureRecogniser::KUid)) {
       
   384                 QStm_ReleaseGestureRecogniser* gesture = NULL;
       
   385                 initRecognizer(gesture, context, isNewCtx);
       
   386 
       
   387                 if(gesture) {
       
   388                     gesture->setArea(QRect());
       
   389                 }
       
   390             }
   364 
   391 
   365     // ===================================================== UNKNOWN
   392     // ===================================================== UNKNOWN
   366     using qstmGesture::QStm_UnknownGestureRecogniser;
   393     using qstmGesture::QStm_UnknownGestureRecogniser;
   367 
   394 
   368     if (conf.enabled(QStm_UnknownGestureRecogniser::KUid)) {
   395     if (conf.enabled(QStm_UnknownGestureRecogniser::KUid)) {
   393     int tTimeAreaSizeInMm = tTimeArea.m_size.width();
   420     int tTimeAreaSizeInMm = tTimeArea.m_size.width();
   394     // NB: shape <-- TouchAreaShape
   421     // NB: shape <-- TouchAreaShape
   395     m_statemachine->setTouchTimeArea      ( !filter ? 0 : tTimeAreaSizeInMm );
   422     m_statemachine->setTouchTimeArea      ( !filter ? 0 : tTimeAreaSizeInMm );
   396 
   423 
   397     // Timeouts, Adjustments, etc.
   424     // Timeouts, Adjustments, etc.
   398     m_statemachine->setTouchSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::ESuppressTimeout)*1000) ;
   425     m_statemachine->setTouchSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::ESuppressTimeout)) ;
   399     m_statemachine->setMoveSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::EMoveSuppressTimeout)*1000) ;
   426     m_statemachine->setMoveSuppressTimeout(!filter ? 0 : conf.param(qstmGesture::EMoveSuppressTimeout)) ;
   400     m_statemachine->enableCapacitiveUp    (!filter ? 0 : conf.param(qstmGesture::ECapacitiveUpUsed));
   427     m_statemachine->enableCapacitiveUp    (!filter ? 0 : conf.param(qstmGesture::ECapacitiveUpUsed));
   401     m_statemachine->enableYadjustment     (!filter ? 0 : conf.param(qstmGesture::EAdjustYPos));
   428     m_statemachine->enableYadjustment     (!filter ? 0 : conf.param(qstmGesture::EAdjustYPos));
   402     m_statemachine->enableLogging(context.m_logging);
   429     m_statemachine->enableLogging(context.m_logging);
   403 }
   430 }
   404 
   431 
   416 
   443 
   417 void QStm_GestureContext::init()
   444 void QStm_GestureContext::init()
   418 {
   445 {
   419     m_engine.m_contexts.append(this);
   446     m_engine.m_contexts.append(this);
   420     m_config = new QStm_GestureParameters();
   447     m_config = new QStm_GestureParameters();
   421     m_engine.getStateMachine()->addUiEventObserver(this);
   448     //m_engine.getStateMachine()->addUiEventObserver(this);
   422     
   449     
   423     for(int i = 0; i < qstmGesture::EStmGestureUid_Count; ++i) {
   450     for(int i = 0; i < qstmGesture::EStmGestureUid_Count; ++i) {
   424         m_recognizers[i] = NULL;
   451         m_recognizers[i] = NULL;
   425     }
   452     }
   426     
   453     
   623         QPoint vec = gesture->getLengthAndDirection();
   650         QPoint vec = gesture->getLengthAndDirection();
   624         gest->setLengthAndDirection(vec);
   651         gest->setLengthAndDirection(vec);
   625         gest->setSpeed(gesture->getSpeed());
   652         gest->setSpeed(gesture->getSpeed());
   626         QPoint pos = gesture->getLocation();
   653         QPoint pos = gesture->getLocation();
   627         gest->setPosition(pos);
   654         gest->setPosition(pos);
       
   655         QPoint pos2 = gesture->getLocation2();
       
   656         gest->setPosition2(pos2);
   628         gest->setDetails(gesture->getDetails());
   657         gest->setDetails(gesture->getDetails());
   629         gest->setSpeedVec(gesture->getSpeedVec());
   658         gest->setSpeedVec(gesture->getSpeedVec());
   630         QWidget* w = static_cast<QWidget*>(gesture->target());
   659         QWidget* w = static_cast<QWidget*>(gesture->target());
   631         gest->setTarget(w);
   660         gest->setTarget(w);
   632     }
   661     }
   680     }
   709     }
   681 }
   710 }
   682 
   711 
   683 void QStm_GestureContext::enableRecognizer(qstmGesture::QStm_GestureUid uid )
   712 void QStm_GestureContext::enableRecognizer(qstmGesture::QStm_GestureUid uid )
   684 {
   713 {
   685 	qstmGesture::QStm_GestureRecogniserIf* rec = m_recognizers[uid];
   714     qstmGesture::QStm_GestureRecogniserIf* rec = m_recognizers[uid];
   686     if(rec && !rec->isEnabled()) {
   715     if(rec && !rec->isEnabled()) {
   687         rec->enable(true);
   716         rec->enable(true);
   688         // TODO: Notify listener
   717         // TODO: Notify listener
   689     }
   718     }
   690 }
   719 }
   696 }
   725 }
   697 
   726 
   698 
   727 
   699 bool QStm_GestureContext::handleSymbianPlatformEvent(const QSymbianEvent* platEvent) 
   728 bool QStm_GestureContext::handleSymbianPlatformEvent(const QSymbianEvent* platEvent) 
   700 { 
   729 { 
   701     return	m_engine.getStateMachine()->handleSymbianPlatformEvent(platEvent); 
   730     return m_engine.getStateMachine()->handleSymbianPlatformEvent(platEvent); 
   702 }
   731 }
   703 
   732 
   704 
   733 
   705 bool QStm_GestureContext::handleX11PlatformEvent(const XEvent* platEvent)
   734 bool QStm_GestureContext::handleX11PlatformEvent(const XEvent* platEvent)
   706 {
   735 {
   707 	return	m_engine.getStateMachine()->handleX11PlatformEvent(platEvent);
   736     return m_engine.getStateMachine()->handleX11PlatformEvent(platEvent);
   708 }
   737 }
   709 
   738 
   710 
   739 bool QStm_GestureContext::handleWinPlatformEvent(const void* platEvent)
   711 
   740 {
       
   741     return m_engine.getStateMachine()->handleWinPlatformEvent(platEvent);
       
   742 }
       
   743 
       
   744 void QStm_GestureContext::enableDblClick(bool enable)
       
   745 {
       
   746     m_engine.getStateMachine()->enableDblClick(enable);
       
   747 }
       
   748 
       
   749 void QStm_GestureContext::setLogging(int enabled)
       
   750 { 
       
   751     m_logging = enabled;
       
   752     m_engine.getGestureEngine()->enableLogging(enabled);
       
   753 }