VirtualKeyPushButton::VirtualKeyPushButton(JoyButton *button, QString xcodestring, QWidget *parent) : QPushButton(parent) { populateKnownAliases(); //qDebug() << "Question: " << X11KeySymToKeycode("KP_7") << endl; //qDebug() << "Question: " << X11KeySymToKeycode(79) << endl; this->keycode = 0; this->xcodestring = ""; this->displayString = ""; this->currentlyActive = false; this->onCurrentButton = false; this->button = button; int temp = 0; if (!xcodestring.isEmpty())// && xcodestring.toInt(0, 16) > 0) { /*int qkey = xcodestring.toInt(0, 16); if (qkey > QtKeyMapperBase::nativeKeyPrefix) { temp = qkey - QtKeyMapperBase::nativeKeyPrefix; } else { temp = AntKeyMapper::returnVirtualKey(qkey); }*/ temp = X11KeySymToKeycode(xcodestring); } if (temp > 0) { #ifdef Q_OS_WIN this->keycode = temp; #else this->keycode = X11KeyCodeToX11KeySym(temp); //this->keycode = temp; #endif this->xcodestring = xcodestring; this->displayString = setDisplayString(xcodestring); } this->setText(this->displayString.replace("&", "&&")); connect(this, SIGNAL(clicked()), this, SLOT(processSingleSelection())); }
void ButtonEditDialog::keyReleaseEvent(QKeyEvent *event) { if (ui->actionNameLineEdit->hasFocus() || ui->buttonNameLineEdit->hasFocus()) { QDialog::keyReleaseEvent(event); } else if (ui->virtualKeyMouseTabWidget->isKeyboardTabVisible()) { int controlcode = event->nativeScanCode(); int virtualactual = event->nativeVirtualKey(); #ifdef Q_OS_WIN // Find more specific virtual key (VK_SHIFT -> VK_LSHIFT) // by checking for extended bit in scan code. int finalvirtual = WinInfo::correctVirtualKey(controlcode, virtualactual); int checkalias = AntKeyMapper::returnQtKey(virtualactual, controlcode); #else #if defined(WITH_X11) int finalvirtual = 0; int checkalias = 0; #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) if (QApplication::platformName() == QStringLiteral("xcb")) { #endif // Obtain group 1 X11 keysym. Removes effects from modifiers. finalvirtual = X11KeyCodeToX11KeySym(controlcode); #ifdef WITH_UINPUT // Find Qt Key corresponding to X11 KeySym. checkalias = x11KeyMapper.returnQtKey(finalvirtual); // Find corresponding Linux input key for the Qt key. finalvirtual = AntKeyMapper::returnVirtualKey(checkalias); #else // Check for alias against group 1 keysym. checkalias = AntKeyMapper::returnQtKey(finalvirtual); #endif #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) } else { // Not running on xcb platform. finalvirtual = controlcode; checkalias = AntKeyMapper::returnQtKey(finalvirtual); } #endif #else int finalvirtual = 0; int checkalias = 0; #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) if (QApplication::platformName() == QStringLiteral("xcb")) { #endif finalvirtual = AntKeyMapper::returnVirtualKey(event->key()); checkalias = AntKeyMapper::returnQtKey(finalvirtual); #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) } else { // Not running on xcb platform. finalvirtual = controlcode; checkalias = AntKeyMapper::returnQtKey(finalvirtual); } #endif #endif #endif if (!ignoreRelease) { if ((event->modifiers() & Qt::ControlModifier) && event->key() == Qt::Key_X) { controlcode = 0; ignoreRelease = true; emit selectionCleared(); } else if (controlcode <= 0) { controlcode = 0; } } else { controlcode = 0; ignoreRelease = false; } if (controlcode > 0) { if (checkalias > 0) { JoyButtonSlot *tempslot = new JoyButtonSlot(finalvirtual, checkalias, JoyButtonSlot::JoyKeyboard, this); emit keyGrabbed(tempslot); } else { JoyButtonSlot *tempslot = new JoyButtonSlot(virtualactual, JoyButtonSlot::JoyKeyboard, this); emit keyGrabbed(tempslot); } } } else { QDialog::keyReleaseEvent(event); } }
bool SimpleKeyGrabberButton::eventFilter(QObject *obj, QEvent *event) { Q_UNUSED(obj); int controlcode = 0; if (grabNextAction && event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEve = (QMouseEvent*) event; if (mouseEve->button() == Qt::RightButton) { controlcode = 3; } else if (mouseEve->button() == Qt::MiddleButton) { controlcode = 2; } else { controlcode = mouseEve->button(); } setText(QString(tr("Mouse")).append(" ").append(QString::number(controlcode))); buttonslot.setSlotCode(controlcode); buttonslot.setSlotMode(JoyButtonSlot::JoyMouseButton); releaseMouse(); releaseKeyboard(); grabNextAction = grabbingWheel = false; emit buttonCodeChanged(controlcode); } else if (grabNextAction && event->type() == QEvent::KeyRelease) { QKeyEvent *keyEve = (QKeyEvent*) event; int tempcode = keyEve->nativeScanCode(); int virtualactual = keyEve->nativeVirtualKey(); #ifdef Q_OS_WIN // Find more specific virtual key (VK_SHIFT -> VK_LSHIFT) // by checking for extended bit in scan code. int finalvirtual = WinInfo::correctVirtualKey(tempcode, virtualactual); int checkalias = AntKeyMapper::returnQtKey(virtualactual, tempcode); #else // Obtain group 1 X11 keysym. Removes effects from modifiers. int finalvirtual = X11KeyCodeToX11KeySym(tempcode); // Check for alias against group 1 keysym. int checkalias = AntKeyMapper::returnQtKey(finalvirtual); #endif controlcode = tempcode; if ((keyEve->modifiers() & Qt::ControlModifier) && keyEve->key() == Qt::Key_X) { controlcode = 0; setText(""); } else if (controlcode <= 0) { controlcode = 0; setText(""); } else { if (checkalias > 0) { buttonslot.setSlotCode(finalvirtual, checkalias); buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); setText(keysymToKey(finalvirtual, checkalias).toUpper()); } else { buttonslot.setSlotCode(virtualactual); buttonslot.setSlotMode(JoyButtonSlot::JoyKeyboard); setText(keysymToKey(finalvirtual).toUpper()); } } grabNextAction = false; grabbingWheel = false; releaseMouse(); releaseKeyboard(); emit buttonCodeChanged(controlcode); } else if (grabNextAction && event->type() == QEvent::Wheel && !grabbingWheel) { grabbingWheel = true; } else if (grabNextAction && event->type() == QEvent::Wheel) { QWheelEvent *wheelEve = (QWheelEvent*) event; QString text = QString(tr("Mouse")).append(" "); if (wheelEve->orientation() == Qt::Vertical && wheelEve->delta() >= 120) { controlcode = 4; } else if (wheelEve->orientation() == Qt::Vertical && wheelEve->delta() <= -120) { controlcode = 5; } else if (wheelEve->orientation() == Qt::Horizontal && wheelEve->delta() >= 120) { controlcode = 6; } else if (wheelEve->orientation() == Qt::Horizontal && wheelEve->delta() <= -120) { controlcode = 7; } if (controlcode > 0) { text = text.append(QString::number(controlcode)); setText(text); grabNextAction = false; grabbingWheel = false; releaseMouse(); releaseKeyboard(); buttonslot.setSlotCode(controlcode); buttonslot.setSlotMode(JoyButtonSlot::JoyMouseButton); emit buttonCodeChanged(controlcode); } } else if (event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEve = (QMouseEvent*) event; if (mouseEve->button() == Qt::LeftButton) { grabNextAction = true; setText("..."); setFocus(); grabKeyboard(); grabMouse(); } } return false; }