qtmobileextensions/src/keycapture/targetwrapper.cpp
changeset 15 1f895d8a5b2b
parent 14 6fbed849b4f4
child 19 46686fb6258c
equal deleted inserted replaced
14:6fbed849b4f4 15:1f895d8a5b2b
    36 #include "txlogger.h"
    36 #include "txlogger.h"
    37 
    37 
    38 TargetWrapper::TargetWrapper()
    38 TargetWrapper::TargetWrapper()
    39 :
    39 :
    40 selector(0),
    40 selector(0),
    41 basicApi(false),
       
    42 callHandlingApi(false),
       
    43 target(0),
    41 target(0),
    44 targetEx(0),
    42 targetEx(0),
    45 handler(0),
    43 handler(0),
    46 handlerEx(0)
    44 handlerEx(0)
    47 {
    45 {
    51 TargetWrapper::~TargetWrapper()
    49 TargetWrapper::~TargetWrapper()
    52 {
    50 {
    53     delete selector;
    51     delete selector;
    54 }
    52 }
    55 
    53 
    56 void TargetWrapper::setBasicApi(bool basic)
    54 void TargetWrapper::init(XQKeyCapture::CapturingFlags flags)
    57 {
    55 {
    58     basicApi = basic;
    56     captureFlags = flags;
    59 }
       
    60 
       
    61 void TargetWrapper::setCallHandlingApi(bool callHandling)
       
    62 {
       
    63     callHandlingApi = callHandling;
       
    64 }
       
    65 
       
    66 
       
    67 void TargetWrapper::init()
       
    68 {
       
    69     try {
    57     try {
    70         delete selector;
    58         delete selector;
    71     
    59     
    72         QT_TRAP_THROWING(selector = CRemConInterfaceSelector::NewL());
    60         QT_TRAP_THROWING(selector = CRemConInterfaceSelector::NewL());
    73         
    61         
    74         if (basicApi) {
    62         if (captureFlags & XQKeyCapture::CaptureBasic) {
    75             QT_TRAP_THROWING(target = CRemConCoreApiTarget::NewL(*selector, *this));
    63             QT_TRAP_THROWING(target = CRemConCoreApiTarget::NewL(*selector, *this));
    76             QT_TRAP_THROWING(handler = ResponseHandler::NewL(*target));
    64             QT_TRAP_THROWING(handler = ResponseHandler::NewL(*target));
    77         }
    65         }
    78          
    66          
    79         if (callHandlingApi) {
    67         if (captureFlags & XQKeyCapture::CaptureCallHandlingExt) {
    80             QT_TRAP_THROWING(targetEx = CRemConCallHandlingTarget::NewL(*selector, *this));
    68             QT_TRAP_THROWING(targetEx = CRemConCallHandlingTarget::NewL(*selector, *this));
    81             QT_TRAP_THROWING(handlerEx = ResponseHandlerEx::NewL(*targetEx));
    69             QT_TRAP_THROWING(handlerEx = ResponseHandlerEx::NewL(*targetEx));
    82         }
    70         }
    83         
    71         
    84         QT_TRAP_THROWING(selector->OpenTargetL());
    72         QT_TRAP_THROWING(selector->OpenTargetL());
   112     Qt::Key key = mapKey(aOperationId); 
   100     Qt::Key key = mapKey(aOperationId); 
   113 
   101 
   114     switch (aButtonAct) {
   102     switch (aButtonAct) {
   115         case ERemConCoreApiButtonPress:
   103         case ERemConCoreApiButtonPress:
   116             TX_LOG_ARGS("ERemConCoreApiButtonPress");
   104             TX_LOG_ARGS("ERemConCoreApiButtonPress");
   117             sendPressKey(key, Qt::NoModifier);
   105             sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId);
   118             break;
   106             break;
   119         case ERemConCoreApiButtonRelease:
   107         case ERemConCoreApiButtonRelease:
   120             TX_LOG_ARGS("ERemConCoreApiButtonRelease");
   108             TX_LOG_ARGS("ERemConCoreApiButtonRelease");
   121             sendReleaseKey(key, Qt::NoModifier);
   109             sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId);
   122             break;
   110             break;
   123         case ERemConCoreApiButtonClick:
   111         case ERemConCoreApiButtonClick:
   124             TX_LOG_ARGS("ERemConCoreApiButtonClick");
   112             TX_LOG_ARGS("ERemConCoreApiButtonClick");
   125             sendPressKey(key, Qt::NoModifier);
   113             sendKey(QEvent::KeyPress, key, Qt::NoModifier, aOperationId);
   126             sendReleaseKey(key, Qt::NoModifier);
   114             sendKey(QEvent::KeyRelease, key, Qt::NoModifier, aOperationId);
   127             break;
   115             break;
   128         default:
   116         default:
   129             break;
   117             return;
   130     }
   118     }
   131     
   119 
   132     
       
   133     handler->CompleteAnyKey(aOperationId);
   120     handler->CompleteAnyKey(aOperationId);
   134 
       
   135 }
   121 }
   136 
   122 
   137 void TargetWrapper::AnswerCall()
   123 void TargetWrapper::AnswerCall()
   138 {
   124 {
   139     sendPressKey(Qt::Key_Call, Qt::NoModifier);
   125     sendKey(QEvent::KeyPress, Qt::Key_Call, Qt::NoModifier);
   140     sendReleaseKey(Qt::Key_Call, Qt::NoModifier);
   126     sendKey(QEvent::KeyRelease, Qt::Key_Call, Qt::NoModifier);
   141     handlerEx->CompleteAnyKey(0);
   127     handlerEx->CompleteAnyKey(0);
   142 }
   128 }
   143 
   129 
   144 void TargetWrapper::EndCall()
   130 void TargetWrapper::EndCall()
   145 {
   131 {
   146     sendPressKey(Qt::Key_Hangup, Qt::NoModifier);
   132     sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier);
   147     sendReleaseKey(Qt::Key_Hangup, Qt::NoModifier);
   133     sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier);
   148     handlerEx->CompleteAnyKey(0);
   134     handlerEx->CompleteAnyKey(0);
   149 }
   135 }
   150 
   136 
   151 void TargetWrapper::AnswerEndCall()
   137 void TargetWrapper::AnswerEndCall()
   152 {
   138 {
   153     sendPressKey(Qt::Key_Hangup, Qt::NoModifier);  //TODO: Qt::Key_ToggleCallHangup
   139     sendKey(QEvent::KeyPress, Qt::Key_Hangup, Qt::NoModifier);  //TODO: Qt::Key_ToggleCallHangup
   154     sendReleaseKey(Qt::Key_Hangup, Qt::NoModifier); 
   140     sendKey(QEvent::KeyRelease, Qt::Key_Hangup, Qt::NoModifier); 
   155     handlerEx->CompleteAnyKey(0);
   141     handlerEx->CompleteAnyKey(0);
   156 }
   142 }
   157 
   143 
   158 void TargetWrapper::VoiceDial( const TBool aActivate )
   144 void TargetWrapper::VoiceDial( const TBool aActivate )
   159 {
   145 {
   182 void TargetWrapper::SpeedDial( const TInt aIndex )    
   168 void TargetWrapper::SpeedDial( const TInt aIndex )    
   183 {
   169 {
   184     Q_UNUSED(aIndex)
   170     Q_UNUSED(aIndex)
   185 }
   171 }
   186 
   172 
       
   173 void TargetWrapper::sendKey(QEvent::Type eventType, Qt::Key key, Qt::KeyboardModifiers modFlags, 
       
   174                     TRemConCoreApiOperationId aOperationId)
       
   175 {
       
   176     QWidget *widget = getTargetWidget();
       
   177     if (widget) {
       
   178         QKeyEvent *event = NULL;
       
   179         if (captureFlags & XQKeyCapture::CaptureEnableRemoteExtEvents){
       
   180             if (eventType == QEvent::KeyPress){
       
   181                 event = QKeyEvent::createExtendedKeyEvent(XQKeyCapture::remoteEventType_KeyPress(), 
       
   182                         key, modFlags, 0, aOperationId, 0);
       
   183             } else if (eventType == QEvent::KeyRelease){
       
   184                 event = QKeyEvent::createExtendedKeyEvent(XQKeyCapture::remoteEventType_KeyRelease(), 
       
   185                         key, modFlags, 0, aOperationId, 0);
       
   186             }
       
   187         } else {
       
   188             event = new QKeyEvent(eventType, key, modFlags);
       
   189         }
       
   190         
       
   191         if (event){
       
   192             QApplication::sendEvent(widget, event);
       
   193             qDebug("sending key event!");
       
   194             delete event;
       
   195         }
       
   196     }
       
   197 }
   187 
   198 
   188 QWidget *TargetWrapper::getTargetWidget()
   199 QWidget *TargetWrapper::getTargetWidget()
   189 {
   200 {
   190     QWidget *widget;
   201     QWidget *widget;
   191     widget = QWidget::keyboardGrabber();
   202     widget = QWidget::keyboardGrabber();
   204     }
   215     }
   205 
   216 
   206     return widget;
   217     return widget;
   207 }
   218 }
   208 
   219 
   209 void TargetWrapper::sendPressKey(Qt::Key key, Qt::KeyboardModifiers modFlags)
   220 
   210 {
       
   211     QWidget *widget = getTargetWidget();
       
   212     if (widget) {
       
   213         QKeyEvent event(QKeyEvent::KeyPress, key, modFlags, 0, false, 1);
       
   214         QApplication::sendEvent(widget, &event);
       
   215     }
       
   216     qDebug("sending key event!");
       
   217 }
       
   218 
       
   219 void TargetWrapper::sendReleaseKey(Qt::Key key, Qt::KeyboardModifiers modFlags)
       
   220 {
       
   221     QWidget *widget = getTargetWidget();
       
   222     if (widget) {
       
   223         QKeyEvent event(QKeyEvent::KeyRelease, key, modFlags, 0, false, 1);
       
   224         QApplication::sendEvent(widget, &event);
       
   225     }
       
   226 }
       
   227 
   221 
   228 void TargetWrapper::initMapping()
   222 void TargetWrapper::initMapping()
   229 {
   223 {
   230     keyMapping.insert(ERemConCoreApiSelect, Qt::Key_Select);
   224     keyMapping.insert(ERemConCoreApiSelect, Qt::Key_Select);
   231     keyMapping.insert(ERemConCoreApiUp, Qt::Key_Up);
   225     keyMapping.insert(ERemConCoreApiUp, Qt::Key_Up);