Update kbm_gui.cpp

This commit is contained in:
tlarok 2025-04-01 19:16:35 +02:00 committed by GitHub
parent 9323822152
commit 9a038e81ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -683,19 +683,8 @@ void KBMSettings::CheckMapping(QPushButton*& button) {
} }
void KBMSettings::SetMapping(QString input) { void KBMSettings::SetMapping(QString input) {
if (mappinglist.size() >= 3) { mapping = input;
return; MappingCompleted = true;
}
if (!mappinglist.contains(input)) {
mappinglist.append(input);
}
mapping = mappinglist.join(",");
if (mappinglist.size() >= 1) { // Adjust this condition as needed
MappingCompleted = true;
}
} }
bool KBMSettings::eventFilter(QObject* obj, QEvent* event) { bool KBMSettings::eventFilter(QObject* obj, QEvent* event) {
@ -707,324 +696,299 @@ bool KBMSettings::eventFilter(QObject* obj, QEvent* event) {
} }
if (EnableMapping) { if (EnableMapping) {
if (Qt::ShiftModifier & QApplication::keyboardModifiers()) {
modifier = "lshift";
} else if (Qt::AltModifier & QApplication::keyboardModifiers()) {
modifier = "lalt";
} else if (Qt::ControlModifier & QApplication::keyboardModifiers()) {
modifier = "lctrl";
} else if (Qt::MetaModifier & QApplication::keyboardModifiers()) {
#ifdef _WIN32
modifier = "lwin";
#else
modifier = "lmeta";
#endif
}
if (event->type() == QEvent::KeyPress) { if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event); QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
QString keyText;
switch (keyEvent->key()) { switch (keyEvent->key()) {
case Qt::Key_Space: case Qt::Key_Space:
keyText = "space"; SetMapping("space");
break; break;
case Qt::Key_Comma: case Qt::Key_Comma:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kpcomma"; SetMapping("kpcomma");
} else { } else {
keyText = "comma"; SetMapping("comma");
} }
break; break;
case Qt::Key_Period: case Qt::Key_Period:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kpperiod"; SetMapping("kpperiod");
} else { } else {
keyText = "period"; SetMapping("period");
} }
break; break;
case Qt::Key_Slash: case Qt::Key_Slash:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) if (Qt::KeypadModifier & QApplication::keyboardModifiers())
keyText = "kpdivide"; SetMapping("kpdivide");
break; break;
case Qt::Key_Asterisk: case Qt::Key_Asterisk:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) if (Qt::KeypadModifier & QApplication::keyboardModifiers())
keyText = "kpmultiply"; SetMapping("kpmultiply");
break; break;
case Qt::Key_Question: case Qt::Key_Question:
keyText = "question"; SetMapping("question");
break; break;
case Qt::Key_Semicolon: case Qt::Key_Semicolon:
keyText = "semicolon"; SetMapping("semicolon");
break; break;
case Qt::Key_Minus: case Qt::Key_Minus:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kpminus"; SetMapping("kpminus");
} else { } else {
keyText = "minus"; SetMapping("minus");
} }
break; break;
case Qt::Key_Plus: case Qt::Key_Plus:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kpplus"; SetMapping("kpplus");
} else { } else {
keyText = "plus"; SetMapping("plus");
} }
break; break;
case Qt::Key_ParenLeft: case Qt::Key_ParenLeft:
keyText = "lparenthesis"; SetMapping("lparenthesis");
break; break;
case Qt::Key_ParenRight: case Qt::Key_ParenRight:
keyText = "rparenthesis"; SetMapping("rparenthesis");
break; break;
case Qt::Key_BracketLeft: case Qt::Key_BracketLeft:
keyText = "lbracket"; SetMapping("lbracket");
break; break;
case Qt::Key_BracketRight: case Qt::Key_BracketRight:
keyText = "rbracket"; SetMapping("rbracket");
break; break;
case Qt::Key_BraceLeft: case Qt::Key_BraceLeft:
keyText = "lbrace"; SetMapping("lbrace");
break; break;
case Qt::Key_BraceRight: case Qt::Key_BraceRight:
keyText = "rbrace"; SetMapping("rbrace");
break; break;
case Qt::Key_Backslash: case Qt::Key_Backslash:
keyText = "backslash"; SetMapping("backslash");
break; break;
case Qt::Key_Tab: case Qt::Key_Tab:
keyText = "tab"; SetMapping("tab");
break; break;
case Qt::Key_Backspace: case Qt::Key_Backspace:
keyText = "backspace"; SetMapping("backspace");
break; break;
case Qt::Key_Return: case Qt::Key_Return:
keyText = "enter"; SetMapping("enter");
break; break;
case Qt::Key_Enter: case Qt::Key_Enter:
keyText = "kpenter"; SetMapping("kpenter");
break; break;
case Qt::Key_Escape: case Qt::Key_Escape:
keyText = "unmapped"; SetMapping("unmapped");
break; break;
case Qt::Key_Shift: case Qt::Key_Shift:
if (keyEvent->nativeScanCode() == lshift) { SetMapping("lshift");
keyText = "lshift";
} else if (keyEvent->nativeScanCode() == rshift) {
keyText = "rshift";
} else {
keyText = "shift";
}
break; break;
case Qt::Key_Alt: case Qt::Key_Alt:
if (keyEvent->nativeScanCode() == lalt) { SetMapping("lalt");
keyText = "lalt";
} else if (keyEvent->nativeScanCode() == ralt) {
keyText = "ralt";
} else {
keyText = "alt";
}
break; break;
case Qt::Key_Control: case Qt::Key_Control:
if (keyEvent->nativeScanCode() == lctrl) { SetMapping("lctrl");
keyText = "lctrl";
} else if (keyEvent->nativeScanCode() == rctrl) {
keyText = "rctrl";
} else {
keyText = "ctrl";
}
break; break;
case Qt::Key_Meta: case Qt::Key_Meta:
activateWindow(); activateWindow();
#ifdef _WIN32 #ifdef _WIN32
keyText = "lwin"; SetMapping("lwin");
#else #else
keyText = "lmeta"; SetMapping("lmeta");
#endif #endif
case Qt::Key_1: case Qt::Key_1:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp1"; SetMapping("kp1");
} else { } else {
keyText = "1"; SetMapping("1");
} }
break; break;
case Qt::Key_2: case Qt::Key_2:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp2"; SetMapping("kp2");
} else { } else {
keyText = "2"; SetMapping("2");
} }
break; break;
case Qt::Key_3: case Qt::Key_3:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp3"; SetMapping("kp3");
} else { } else {
keyText = "3"; SetMapping("3");
} }
break; break;
case Qt::Key_4: case Qt::Key_4:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp4"; SetMapping("kp4");
} else { } else {
keyText = "4"; SetMapping("4");
} }
break; break;
case Qt::Key_5: case Qt::Key_5:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp5"; SetMapping("kp5");
} else { } else {
keyText = "5"; SetMapping("5");
} }
break; break;
case Qt::Key_6: case Qt::Key_6:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp6"; SetMapping("kp6");
} else { } else {
keyText = "6"; SetMapping("6");
} }
break; break;
case Qt::Key_7: case Qt::Key_7:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp7"; SetMapping("kp7");
} else { } else {
keyText = "7"; SetMapping("7");
} }
break; break;
case Qt::Key_8: case Qt::Key_8:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp8"; SetMapping("kp8");
} else { } else {
keyText = "8"; SetMapping("8");
} }
break; break;
case Qt::Key_9: case Qt::Key_9:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp9"; SetMapping("kp9");
} else { } else {
keyText = "9"; SetMapping("9");
} }
break; break;
case Qt::Key_0: case Qt::Key_0:
if (Qt::KeypadModifier & QApplication::keyboardModifiers()) { if (Qt::KeypadModifier & QApplication::keyboardModifiers()) {
keyText = "kp0"; SetMapping("kp0");
} else { } else {
keyText = "0"; SetMapping("0");
} }
break; break;
case Qt::Key_Up: case Qt::Key_Up:
activateWindow(); activateWindow();
keyText = "up"; SetMapping("up");
break; break;
case Qt::Key_Down: case Qt::Key_Down:
keyText = "down"; SetMapping("down");
break; break;
case Qt::Key_Left: case Qt::Key_Left:
keyText = "left"; SetMapping("left");
break; break;
case Qt::Key_Right: case Qt::Key_Right:
keyText = "right"; SetMapping("right");
break; break;
case Qt::Key_A: case Qt::Key_A:
keyText = "a"; SetMapping("a");
break; break;
case Qt::Key_B: case Qt::Key_B:
keyText = "b"; SetMapping("b");
break; break;
case Qt::Key_C: case Qt::Key_C:
keyText = "c"; SetMapping("c");
break; break;
case Qt::Key_D: case Qt::Key_D:
keyText = "d"; SetMapping("d");
break; break;
case Qt::Key_E: case Qt::Key_E:
keyText = "e"; SetMapping("e");
break; break;
case Qt::Key_F: case Qt::Key_F:
keyText = "f"; SetMapping("f");
break; break;
case Qt::Key_G: case Qt::Key_G:
keyText = "g"; SetMapping("g");
break; break;
case Qt::Key_H: case Qt::Key_H:
keyText = "h"; SetMapping("h");
break; break;
case Qt::Key_I: case Qt::Key_I:
keyText = "i"; SetMapping("i");
break; break;
case Qt::Key_J: case Qt::Key_J:
keyText = "j"; SetMapping("j");
break; break;
case Qt::Key_K: case Qt::Key_K:
keyText = "k"; SetMapping("k");
break; break;
case Qt::Key_L: case Qt::Key_L:
keyText = "l"; SetMapping("l");
break; break;
case Qt::Key_M: case Qt::Key_M:
keyText = "m"; SetMapping("m");
break; break;
case Qt::Key_N: case Qt::Key_N:
keyText = "n"; SetMapping("n");
break; break;
case Qt::Key_O: case Qt::Key_O:
keyText = "o"; SetMapping("o");
break; break;
case Qt::Key_P: case Qt::Key_P:
keyText = "p"; SetMapping("p");
break; break;
case Qt::Key_Q: case Qt::Key_Q:
keyText = "q"; SetMapping("q");
break; break;
case Qt::Key_R: case Qt::Key_R:
keyText = "r"; SetMapping("r");
break; break;
case Qt::Key_S: case Qt::Key_S:
keyText = "s"; SetMapping("s");
break; break;
case Qt::Key_T: case Qt::Key_T:
keyText = "t"; SetMapping("t");
break; break;
case Qt::Key_U: case Qt::Key_U:
keyText = "u"; SetMapping("u");
break; break;
case Qt::Key_V: case Qt::Key_V:
keyText = "v"; SetMapping("v");
break; break;
case Qt::Key_W: case Qt::Key_W:
keyText = "w"; SetMapping("w");
break; break;
case Qt::Key_X: case Qt::Key_X:
keyText = "x"; SetMapping("x");
break; break;
case Qt::Key_Y: case Qt::Key_Y:
keyText = "Y"; SetMapping("Y");
break; break;
case Qt::Key_Z: case Qt::Key_Z:
keyText = "z"; SetMapping("z");
break; break;
default: default:
break; break;
} }
if (!keyText.isEmpty() && !mappinglist.contains(keyText)) {
SetMapping(keyText); // Add the key to the mapping list
}
return true;
}
if (event->type() == QEvent::KeyRelease) {
EnableMapping = false;
EnableMappingButtons();
timer->stop();
if (modifier != "") {
MappingButton->setText(modifier + "," + mapping);
} else {
MappingButton->setText(mapping);
}
mappinglist.clear(); // Clear the list for the next mapping
return true; return true;
} }
if (event->type() == QEvent::MouseButtonPress) { if (event->type() == QEvent::MouseButtonPress) {
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event); QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
QString buttonText;
switch (mouseEvent->button()) { switch (mouseEvent->button()) {
case Qt::LeftButton: case Qt::LeftButton:
buttonText = "leftbutton"; SetMapping("leftbutton");
break; break;
case Qt::RightButton: case Qt::RightButton:
buttonText = "rightbutton"; SetMapping("rightbutton");
break; break;
case Qt::MiddleButton: case Qt::MiddleButton:
buttonText = "middlebutton"; SetMapping("middlebutton");
break; break;
default: default:
break; break;
@ -1032,38 +996,22 @@ bool KBMSettings::eventFilter(QObject* obj, QEvent* event) {
return true; return true;
} }
if (event->type() == QEvent::MouseButtonRelease) {
EnableMapping = false;
EnableMappingButtons();
timer->stop();
if (modifier != "") {
MappingButton->setText(modifier + "," + mapping);
} else {
MappingButton->setText(mapping);
}
mappinglist.clear(); // Clear the list for the next mapping
return true;
}
const QList<QPushButton*> AxisList = { const QList<QPushButton*> AxisList = {
ui->LStickUpButton, ui->LStickDownButton, ui->LStickLeftButton, ui->LStickRightButton, ui->LStickUpButton, ui->LStickDownButton, ui->LStickLeftButton, ui->LStickRightButton,
ui->RStickUpButton, ui->LStickDownButton, ui->LStickLeftButton, ui->RStickRightButton}; ui->RStickUpButton, ui->LStickDownButton, ui->LStickLeftButton, ui->RStickRightButton};
if (event->type() == QEvent::Wheel) { if (event->type() == QEvent::Wheel) {
QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event); QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
QString WheelText;
if (wheelEvent->angleDelta().y() > 5) { if (wheelEvent->angleDelta().y() > 5) {
if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) { if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) {
WheelText = "mousewheelup"; SetMapping("mousewheelup");
} else { } else {
QMessageBox::information(this, tr("Cannot set mapping"), QMessageBox::information(this, tr("Cannot set mapping"),
tr("Mousewheel cannot be mapped to stick outputs")); tr("Mousewheel cannot be mapped to stick outputs"));
} }
} else if (wheelEvent->angleDelta().y() < -5) { } else if (wheelEvent->angleDelta().y() < -5) {
if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) { if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) {
WheelText = "mousewheeldown"; SetMapping("mousewheeldown");
} else { } else {
QMessageBox::information(this, tr("Cannot set mapping"), QMessageBox::information(this, tr("Cannot set mapping"),
tr("Mousewheel cannot be mapped to stick outputs")); tr("Mousewheel cannot be mapped to stick outputs"));
@ -1073,9 +1021,9 @@ bool KBMSettings::eventFilter(QObject* obj, QEvent* event) {
if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) { if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) {
// QT changes scrolling to horizontal for all widgets with the alt modifier // QT changes scrolling to horizontal for all widgets with the alt modifier
if (Qt::AltModifier & QApplication::keyboardModifiers()) { if (Qt::AltModifier & QApplication::keyboardModifiers()) {
WheelText = "mousewheelup"; SetMapping("mousewheelup");
} else { } else {
WheelText = "mousewheelright"; SetMapping("mousewheelright");
} }
} else { } else {
QMessageBox::information(this, tr("Cannot set mapping"), QMessageBox::information(this, tr("Cannot set mapping"),
@ -1084,9 +1032,9 @@ bool KBMSettings::eventFilter(QObject* obj, QEvent* event) {
} else if (wheelEvent->angleDelta().x() < -5) { } else if (wheelEvent->angleDelta().x() < -5) {
if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) { if (std::find(AxisList.begin(), AxisList.end(), MappingButton) == AxisList.end()) {
if (Qt::AltModifier & QApplication::keyboardModifiers()) { if (Qt::AltModifier & QApplication::keyboardModifiers()) {
WheelText = "mousewheeldown"; SetMapping("mousewheeldown");
} else { } else {
WheelText = "mousewheelleft"; SetMapping("mousewheelleft");
} }
} else { } else {
QMessageBox::information(this, tr("Cannot set mapping"), QMessageBox::information(this, tr("Cannot set mapping"),