qtmobileextensions/examples/keycaptureex/keycapturetestapp.cpp
changeset 15 1f895d8a5b2b
parent 4 90517678cc4f
child 19 46686fb6258c
equal deleted inserted replaced
14:6fbed849b4f4 15:1f895d8a5b2b
    37 #include <QString>
    37 #include <QString>
    38 #include <QMenu>
    38 #include <QMenu>
    39 #include <QMenuBar>
    39 #include <QMenuBar>
    40 #include <QAction>
    40 #include <QAction>
    41 #include <QEvent>
    41 #include <QEvent>
       
    42 #include <XQRemConKeyEvent>
       
    43 
       
    44 #include <QFont>
    42 
    45 
    43 #include "keycapturetestapp.h"
    46 #include "keycapturetestapp.h"
    44 #include "txlogger.h"
    47 #include "txlogger.h"
    45 
    48 
       
    49 #include "mapping.h"
       
    50 #include "capturerequest.h"
    46 
    51 
    47 KeyCaptureTestApp::KeyCaptureTestApp( QWidget *parent) : QMainWindow(parent)
    52 KeyCaptureTestApp::KeyCaptureTestApp( QWidget *parent) : QMainWindow(parent)
    48 {
    53 {   
    49     TX_ENTRY
    54     TX_ENTRY
    50     
    55     
    51 //    qApp->installEventFilter(this);
    56     qApp->installEventFilter(this);
    52 //    QCoreApplication::instance()->installEventFilter(this);
    57     QCoreApplication::instance()->installEventFilter(this);
    53     
    58     
    54     
    59     
    55 	setWindowTitle(tr("KeyCaptureTestApp"));
    60 	setWindowTitle(tr("KeyCaptureTestApp"));
    56     
    61     
    57     mKeyCapture = new XqKeyCapture();
    62     mKeyCapture = new XQKeyCapture();
    58     
    63     
    59     mKeysMap.insert("Up_Qt",    Qt::Key_Up);
    64     mKeysMap.insert("Up", Qt::Key_Up);
    60     mKeysMap.insert("Down_Qt",  Qt::Key_Down);
    65     mKeysMap.insert("Down", Qt::Key_Down);
    61     mKeysMap.insert("Menu_Qt",  Qt::Key_Launch0);
    66     mKeysMap.insert("Menu", Qt::Key_Menu);
    62     
       
    63     mKeysMap.insert("Up_S60",   EKeyUpArrow);
       
    64     mKeysMap.insert("Down_S60", EKeyDownArrow);
       
    65     mKeysMap.insert("Menu_S60", EKeyApplication1);
       
    66     
    67     
    67     
    68     
    68     mKeysMenu = new QMenu(this);
    69     mKeysMenu = new QMenu(this);
    69     foreach (QString value, mKeysMap.keys())
    70     foreach (QString value, mKeysMap.keys())
    70         mKeysMenu->addAction(value)->setData( QVariant(value) );
    71         mKeysMenu->addAction(value)->setData( QVariant(value) );
    71     
    72     
    72     mLongFlagsMap.insert("LongNormal", XqKeyCapture::LongNormal);
    73     mLongFlagsMap.insert("LongNormal", XQKeyCapture::LongNormal);
    73     mLongFlagsMap.insert("LongRepeatEvents", XqKeyCapture::LongRepeatEvents);
    74     mLongFlagsMap.insert("LongRepeatEvents", XQKeyCapture::LongRepeatEvents);
    74     mLongFlagsMap.insert("LongShortEventImmediately", XqKeyCapture::LongShortEventImmediately);
    75     mLongFlagsMap.insert("LongShortEventImmediately", XQKeyCapture::LongShortEventImmediately);
    75     mLongFlagsMap.insert("LongWaitNotApplicable", XqKeyCapture::LongWaitNotApplicable);
    76     mLongFlagsMap.insert("LongWaitNotApplicable", XQKeyCapture::LongWaitNotApplicable);
    76     mLongFlagsMap.insert("LongWaitShort", XqKeyCapture::LongWaitShort);
    77     mLongFlagsMap.insert("LongWaitShort", XQKeyCapture::LongWaitShort);
    77     
    78     
    78     mLongFlagsMenu = new QMenu(this);
    79     mLongFlagsMenu = new QMenu(this);
    79     foreach (QString value, mLongFlagsMap.keys())
    80     foreach (QString value, mLongFlagsMap.keys())
    80         mLongFlagsMenu->addAction(value)->setData( QVariant(value) );
    81         mLongFlagsMenu->addAction(value)->setData( QVariant(value) );
    81     
    82     
    89     connect(cancelCaptureMenu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)));
    90     connect(cancelCaptureMenu, SIGNAL(triggered(QAction*)), this, SLOT(triggered(QAction*)));
    90 	cancelCaptureMenu->addAction(QString("Cancel Key"))->setData( QVariant(4) );
    91 	cancelCaptureMenu->addAction(QString("Cancel Key"))->setData( QVariant(4) );
    91 	cancelCaptureMenu->addAction(QString("Cancel Long Key"))->setData( QVariant(5) );
    92 	cancelCaptureMenu->addAction(QString("Cancel Long Key"))->setData( QVariant(5) );
    92 	cancelCaptureMenu->addAction(QString("Cancel Up and Down Key"))->setData( QVariant(6) );
    93 	cancelCaptureMenu->addAction(QString("Cancel Up and Down Key"))->setData( QVariant(6) );
    93 
    94 
       
    95     QMenu *remoteMenu = menuBar()->addMenu(QString("Remote"));
       
    96 
       
    97     // *** remcon ***
       
    98     
       
    99     remoteAllOn = remoteMenu->addAction(QString("Turn on all"));
       
   100     remoteAllOff = remoteMenu->addAction(QString("Turn off all"));
       
   101     
       
   102     toggleRemoteBasic = remoteMenu->addAction(QString("Basic Remote"));
       
   103     toggleRemoteBasic->setCheckable(true);
       
   104     
       
   105     toggleRemoteCallHandlingEx = remoteMenu->addAction(QString("Call Handl. Ex Remote"));
       
   106     toggleRemoteCallHandlingEx->setCheckable(true);
       
   107     
       
   108     toggleRemoteExtEvents = remoteMenu->addAction(QString("Extended Remote Events"));
       
   109     toggleRemoteExtEvents->setCheckable(true);
       
   110 
       
   111     connect(toggleRemoteBasic, SIGNAL(toggled(bool)), this, SLOT(enableRemBasic(bool)));
       
   112     connect(toggleRemoteCallHandlingEx, SIGNAL(toggled(bool)), this, SLOT(enableRemCallHandlingEx(bool)));
       
   113     connect(toggleRemoteExtEvents, SIGNAL(toggled(bool)), this, SLOT(enableRemoteExtEvents(bool)));
       
   114 
       
   115     connect(remoteAllOn, SIGNAL(triggered(bool)), this, SLOT(remoteAll(bool)));
       
   116     connect(remoteAllOff, SIGNAL(triggered(bool)), this, SLOT(remoteNone(bool)));
       
   117     
       
   118     // *** utilities ***
       
   119 
    94     connect(menuBar()->addAction(QString("Clear Log")), SIGNAL(triggered()), this, SLOT(cleanLog()));
   120     connect(menuBar()->addAction(QString("Clear Log")), SIGNAL(triggered()), this, SLOT(cleanLog()));
    95     connect(menuBar()->addAction(QString("Exit")), SIGNAL(triggered()), qApp, SLOT(quit()));
   121     connect(menuBar()->addAction(QString("Exit")), SIGNAL(triggered()), qApp, SLOT(quit()));
    96 
   122 
    97 
       
    98     QWidget *window = new QWidget;
   123     QWidget *window = new QWidget;
    99     QVBoxLayout* layout = new QVBoxLayout;
   124     QVBoxLayout* layout = new QVBoxLayout;
   100 
   125 
   101 	mTextArea = new QPlainTextEdit("Log area\n");
   126 	mTextArea = new QPlainTextEdit("");
       
   127 	mTextArea->setTextInteractionFlags(Qt::NoTextInteraction);
       
   128 	QFont font = QFont(mTextArea->font());
       
   129 	font.setPixelSize(10);
       
   130 	mTextArea->setFont(font);
       
   131 	
   102 	layout->addWidget(mTextArea);
   132 	layout->addWidget(mTextArea);
   103 	
   133 	
   104     window->setLayout(layout);
   134     window->setLayout(layout);
   105     setCentralWidget(window);
   135     setCentralWidget(window);
   106     window->show();;
   136     window->show();;
   107 
   137 
       
   138     mappingPtr = new Mapping();
   108     
   139     
   109     TX_EXIT
   140     TX_EXIT
   110 }
   141 }
   111 	
   142 	
   112 KeyCaptureTestApp::~KeyCaptureTestApp()
   143 KeyCaptureTestApp::~KeyCaptureTestApp()
   113 {
   144 {
   114 	
   145     delete mappingPtr;
   115 }
   146 }
   116 
   147 
   117 void KeyCaptureTestApp::triggered(QAction* aAction)
   148 void KeyCaptureTestApp::triggered(QAction* aAction)
   118 {
   149 {
   119     CaptureRequest request;
   150     CaptureRequest request(mappingPtr);
   120     if (!request.setType(aAction)){
   151     if (!request.setType(aAction)){
   121         return;
   152         return;
   122     }
   153     }
   123     if (!request.setKey(mKeysMenu->exec(), &mKeysMap)){
   154     if (!request.setKey(mKeysMenu->exec(), &mKeysMap)){
   124         return;
   155         return;
   139 }
   170 }
   140 
   171 
   141 void KeyCaptureTestApp::procesAction(CaptureRequest request)
   172 void KeyCaptureTestApp::procesAction(CaptureRequest request)
   142 {
   173 {
   143     TX_ENTRY
   174     TX_ENTRY
   144     switch (request.mRequestType){
   175     switch (request.mRequestType) {
   145         case CaptureRequest::RequestTypeKey :
   176         case CaptureRequest::RequestTypeKey :
   146             
   177             mKeyCapture->captureKey(request.mKey, request.mModifiersMap, request.mModifier );
   147             if (request.isQtKey) 
       
   148                 mKeyCapture->captureKey((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier );
       
   149             else
       
   150                 mKeyCapture->captureKey((TUint) request.mKey, request.mModifiersMap, request.mModifier );
       
   151             
       
   152             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   178             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   153             break;
   179             break;
   154         case CaptureRequest::RequestTypeLongKey :
   180         case CaptureRequest::RequestTypeLongKey :
   155             if (request.isQtKey)
   181             mKeyCapture->captureLongKey(request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
   156                 mKeyCapture->captureLongKey((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
       
   157             else
       
   158                 mKeyCapture->captureLongKey((TUint) request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
       
   159             
       
   160             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   182             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   161             break;
   183             break;
   162         case CaptureRequest::RequestTypeKeyUpAndDowns :
   184         case CaptureRequest::RequestTypeKeyUpAndDowns :
   163             if (request.isQtKey)
   185             mKeyCapture->captureKeyUpAndDowns(request.mKey, request.mModifiersMap, request.mModifier );
   164                 mKeyCapture->captureKeyUpAndDowns((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier );
       
   165             else
       
   166                 mKeyCapture->captureKeyUpAndDowns((TUint) request.mKey, request.mModifiersMap, request.mModifier );
       
   167 
       
   168             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   186             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   169             break;
   187             break;
   170         case CaptureRequest::RequestTypeCancelKey :
   188         case CaptureRequest::RequestTypeCancelKey :
   171             if (request.isQtKey)
   189             mKeyCapture->cancelCaptureKey(request.mKey, request.mModifiersMap, request.mModifier );
   172                 mKeyCapture->cancelCaptureKey((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier );
       
   173             else
       
   174                 mKeyCapture->cancelCaptureKey((TUint) request.mKey, request.mModifiersMap, request.mModifier );
       
   175                 
       
   176             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   190             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   177             break;
   191             break;
   178         case CaptureRequest::RequestTypeCancelLongKey :
   192         case CaptureRequest::RequestTypeCancelLongKey :
   179             if (request.isQtKey)
   193             mKeyCapture->cancelCaptureLongKey(request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
   180                 mKeyCapture->cancelCaptureLongKey((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
       
   181             else
       
   182                 mKeyCapture->cancelCaptureLongKey((TUint) request.mKey, request.mModifiersMap, request.mModifier, request.mLongFlags);
       
   183                 
       
   184             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   194             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   185             break;
   195             break;
   186         case CaptureRequest::RequestTypeCancelKeyUpAndDowns :
   196         case CaptureRequest::RequestTypeCancelKeyUpAndDowns :
   187             if (request.isQtKey)
   197             mKeyCapture->cancelCaptureKeyUpAndDowns(request.mKey, request.mModifiersMap, request.mModifier );
   188                 mKeyCapture->cancelCaptureKeyUpAndDowns((Qt::Key) request.mKey, request.mModifiersMap, request.mModifier );
       
   189             else
       
   190                 mKeyCapture->cancelCaptureKeyUpAndDowns((TUint) request.mKey, request.mModifiersMap, request.mModifier );
       
   191             
       
   192             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   198             addTextLine(QString("%1:%2\n").arg(request.toString()).arg(mKeyCapture->errorString()));
   193             break;
   199             break;
   194         default:
   200         default:
   195             break;
   201             break;
   196     }
   202     }
   197 
       
   198 
   203 
   199     TX_EXIT    
   204     TX_EXIT    
   200 }
   205 }
   201 
   206 
   202 void KeyCaptureTestApp::addTextLine(QString aText)
   207 void KeyCaptureTestApp::addTextLine(QString aText)
   222 }
   227 }
   223 
   228 
   224 void KeyCaptureTestApp::processEvent(QEvent *ev)
   229 void KeyCaptureTestApp::processEvent(QEvent *ev)
   225 {
   230 {
   226     if (ev){
   231     if (ev){
   227        if (ev->type() == QEvent::KeyPress){
   232         if (ev->type() == QEvent::KeyPress){
   228            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   233            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   229            addTextLine(QString("KeyPress:%1\n").arg(keyEvent->key(), 0, 16) );
   234            QString keyName = mappingPtr->name(static_cast<Qt::Key>(keyEvent->key())); 
   230        }else if (ev->type() == QEvent::KeyRelease){
   235            
       
   236            addTextLine(QString("KeyPress:%1\n").arg(keyName));
       
   237         } else if (ev->type() == QEvent::KeyRelease){
   231            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   238            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   232            addTextLine(QString("KeyRelease:%1\n").arg(keyEvent->key(), 0, 16) );
   239            QString keyName = mappingPtr->name(static_cast<Qt::Key>(keyEvent->key()));
   233        }
   240            
   234     }
   241            addTextLine(QString("KeyRelease:%1\n").arg(keyName));
   235 }
   242         } else if (ev->type() == XQKeyCapture::remoteEventType_KeyPress()){
   236 
   243            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   237 CaptureRequest::CaptureRequest()
   244                       
   238 {
   245            QString keyName = mappingPtr->name(static_cast<Qt::Key>(keyEvent->key()));
   239     mRequestType = RequestTypeUndefined;
   246                       
   240     mKey = Qt::Key_unknown;    
   247            addTextLine(QString("KeyPress:%1\n").arg(keyName));
   241     mModifiersMap = Qt::NoModifier;
   248            addTextLine(QString("Native virtual key:%1\n").arg((int)keyEvent->nativeVirtualKey()));
   242     mModifier = Qt::NoModifier;
   249         } else if (ev->type() == XQKeyCapture::remoteEventType_KeyRelease()){
   243     mLongFlags = XqKeyCapture::LongNormal; 
   250            QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
   244 }
   251                       
   245 
   252            QString keyName = mappingPtr->name(static_cast<Qt::Key>(keyEvent->key()));
   246 CaptureRequest::~CaptureRequest()
   253                       
   247 {
   254            addTextLine(QString("KeyRelease:%1\n").arg(keyName));
   248     
   255            addTextLine(QString("Native virtual key:%1\n").arg((int)keyEvent->nativeVirtualKey()));
   249 }
       
   250 
       
   251 QString CaptureRequest::toString()
       
   252 {
       
   253     QString res = "Request ";
       
   254     switch (mRequestType){
       
   255         case CaptureRequest::RequestTypeKey :
       
   256             res +="Key(";
       
   257             break;
       
   258         case CaptureRequest::RequestTypeLongKey :
       
   259             res +="LongKey(";            
       
   260             break;
       
   261         case CaptureRequest::RequestTypeKeyUpAndDowns :
       
   262             res +="UpAndDowns(";  
       
   263             break;
       
   264         case CaptureRequest::RequestTypeCancelKey :
       
   265             res +="CancelKey(";
       
   266             break;
       
   267         case CaptureRequest::RequestTypeCancelLongKey :
       
   268             res +="CancelLongKey(";
       
   269             break;
       
   270         case CaptureRequest::RequestTypeCancelKeyUpAndDowns :
       
   271             res +="CancelUpAndDowns(";
       
   272             break;
       
   273         default:
       
   274             res +="Unknown";
       
   275             break;
       
   276     }
       
   277     if ( mRequestType == RequestTypeUndefined)
       
   278         return res;
       
   279     res +=QString("%1").arg(mKey, 0, 16);
       
   280     //TODO::put to res mModifiersMap    
       
   281     //TODO::put to res mModifier
       
   282     if ( mRequestType == RequestTypeLongKey || mRequestType == RequestTypeCancelLongKey)
       
   283         res +=QString(",%1)").arg(mLongFlags, 0, 16);
       
   284     else
       
   285         res +=")";
       
   286     
       
   287     return res;
       
   288 }
       
   289 
       
   290 bool CaptureRequest::setType(QAction* action)
       
   291 {
       
   292     if (!action)
       
   293         return false;
       
   294     bool ok;
       
   295     int act = action->data().toInt(&ok);
       
   296     if (ok){
       
   297         switch (act){
       
   298             case 1 : mRequestType = RequestTypeKey; break;
       
   299             case 2 : mRequestType = RequestTypeLongKey; break;
       
   300             case 3 : mRequestType = RequestTypeKeyUpAndDowns; break;
       
   301             case 4 : mRequestType = RequestTypeCancelKey; break;
       
   302             case 5 : mRequestType = RequestTypeCancelLongKey; break;
       
   303             case 6 : mRequestType = RequestTypeCancelKeyUpAndDowns; break;
       
   304         }
   256         }
   305         return mRequestType!=RequestTypeUndefined;
   257     }
   306     }else{
   258 }
   307         return false;
   259 
   308     }
   260 void KeyCaptureTestApp::enableRemBasic(bool enable)
   309 }
   261 {
   310 
   262     if (enable) {
   311 //bool CaptureRequest::setKey(QAction* action, QMap<QString, Qt::Key> *map)
   263         addTextLine("Remote Basic enabled");
   312 bool CaptureRequest::setKey(QAction* action, QMap<QString, long> *map)
   264         mKeyCapture->captureRemoteKeys(XQKeyCapture::CaptureBasic);
   313 {
   265     } else {
   314     if (!action || !map || map->count()==0)
   266         addTextLine("Remote Basic disabled");
   315         return false;
   267         mKeyCapture->cancelCaptureRemoteKeys(XQKeyCapture::CaptureBasic);
   316     QString key = action->data().toString();
   268     }
   317     if ( !key.isNull() && map->contains(key)){
   269 }
   318         if (key.contains("_Qt")) {
   270 
   319             isQtKey = true;
   271 void KeyCaptureTestApp::enableRemCallHandlingEx(bool enable)
   320         } else {
   272 {
   321             isQtKey = false;
   273     if (enable) {
   322         }
   274         addTextLine("Remote Call Handling Ext. enabled");
   323         mKey = map->value(key);
   275         mKeyCapture->captureRemoteKeys(XQKeyCapture::CaptureCallHandlingExt);
   324         return true;
   276     } else {
   325     }
   277         addTextLine("Remote Call Handling Ext. disabled");
   326     return false;
   278         mKeyCapture->cancelCaptureRemoteKeys(XQKeyCapture::CaptureCallHandlingExt);
   327 }
   279     }
   328 
   280 }
   329 bool CaptureRequest::setLongFlags(QAction* action, QMap<QString, XqKeyCapture::LongFlags> *map)
   281 
   330 {
   282 void KeyCaptureTestApp::enableRemoteExtEvents(bool enable)
   331     if (!action || !map || map->count()==0)
   283 {
   332         return false;
   284     if (enable) {
   333     QString flag = action->data().toString();
   285         addTextLine("Remote Events Ext. enabled");
   334     if ( !flag.isNull() && map->contains(flag)){
   286         mKeyCapture->captureRemoteKeys(XQKeyCapture::CaptureBasic | XQKeyCapture::CaptureEnableRemoteExtEvents);
   335         mLongFlags = map->value(flag);
   287         toggleRemoteBasic->setChecked(true);
   336         return true;
   288     } else {
   337     }
   289         addTextLine("Remote Events Ext. disabled");
   338     return false;
   290         mKeyCapture->cancelCaptureRemoteKeys(XQKeyCapture::CaptureBasic | XQKeyCapture::CaptureEnableRemoteExtEvents);
   339 }
   291     }
       
   292 }
       
   293 
       
   294 void KeyCaptureTestApp::remoteAll(bool enable)
       
   295 {
       
   296     Q_UNUSED(enable);
       
   297     toggleRemoteBasic->setChecked(true);
       
   298     toggleRemoteCallHandlingEx->setChecked(true);
       
   299     toggleRemoteExtEvents->setChecked(true);
       
   300     addTextLine("Remote: enable all");
       
   301     mKeyCapture->captureRemoteKeys(XQKeyCapture::CaptureCallHandlingExt |  XQKeyCapture::CaptureBasic | 
       
   302             XQKeyCapture::CaptureEnableRemoteExtEvents);
       
   303 }
       
   304 
       
   305 void KeyCaptureTestApp::remoteNone(bool enable)
       
   306 {
       
   307     Q_UNUSED(enable);
       
   308     toggleRemoteBasic->setChecked(false);
       
   309     toggleRemoteCallHandlingEx->setChecked(false);
       
   310     addTextLine("Remote: disable all");
       
   311     mKeyCapture->cancelCaptureRemoteKeys(XQKeyCapture::CaptureCallHandlingExt | XQKeyCapture::CaptureBasic | 
       
   312             XQKeyCapture::CaptureEnableRemoteExtEvents);
       
   313 }