QString JoyButtonSlot::getSlotString() { QString newlabel; if (deviceCode > 0) { if (mode == JoyButtonSlot::JoyKeyboard) { newlabel = newlabel.append(keysymToKey(deviceCode).toUpper()); } else if (mode == JoyButtonSlot::JoyMouseButton) { newlabel.append(tr("Mouse")).append(" "); switch (deviceCode) { case 1: newlabel.append(tr("LB")); break; case 2: newlabel.append(tr("MB")); break; case 3: newlabel.append(tr("RB")); break; #ifdef Q_OS_WIN case 8: newlabel.append(tr("B4")); break; case 9: newlabel.append(tr("B5")); break; #endif default: newlabel.append(QString::number(deviceCode)); break; } } else if (mode == JoyButtonSlot::JoyMouseMovement) { newlabel.append(movementString()); } else if (mode == JoyButtonSlot::JoyPause) { int minutes = deviceCode / 1000 / 60; int seconds = (deviceCode / 1000 % 60); int hundredths = deviceCode % 1000 / 10; newlabel.append(tr("Pause")).append(" "); if (minutes > 0) { newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); } newlabel.append(QString("%1.%2") .arg(seconds, 2, 10, QChar('0')) .arg(hundredths, 2, 10, QChar('0'))); } else if (mode == JoyButtonSlot::JoyHold) { int minutes = deviceCode / 1000 / 60; int seconds = (deviceCode / 1000 % 60); int hundredths = deviceCode % 1000 / 10; newlabel.append(tr("Hold")).append(" "); if (minutes > 0) { newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); } newlabel.append(QString("%1.%2") .arg(seconds, 2, 10, QChar('0')) .arg(hundredths, 2, 10, QChar('0'))); } else if (mode == JoyButtonSlot::JoyCycle) { newlabel.append(tr("Cycle")); } else if (mode == JoyButtonSlot::JoyDistance) { QString temp(tr("Distance")); temp.append(" ").append(QString::number(deviceCode).append("%")); newlabel.append(temp); } else if (mode == JoyButtonSlot::JoyRelease) { int minutes = deviceCode / 1000 / 60; int seconds = (deviceCode / 1000 % 60); int hundredths = deviceCode % 1000 / 10; newlabel.append(tr("Release")).append(" "); if (minutes > 0) { newlabel.append(QString("%1:").arg(minutes, 2, 10, QChar('0'))); } newlabel.append(QString("%1.%2") .arg(seconds, 2, 10, QChar('0')) .arg(hundredths, 2, 10, QChar('0'))); } else if (mode == JoyButtonSlot::JoyMouseSpeedMod) { QString temp; temp.append(tr("Mouse Mod")).append(" "); temp.append(QString::number(deviceCode).append("%")); newlabel.append(temp); } } else { newlabel = newlabel.append(tr("[NO KEY]")); } return newlabel; }
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; }