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 } |