diff --git a/src/buttoneditdialog.cpp b/src/buttoneditdialog.cpp index 3d3ef2fc..8d57a8f6 100755 --- a/src/buttoneditdialog.cpp +++ b/src/buttoneditdialog.cpp @@ -33,11 +33,10 @@ #include "common.h" #ifdef Q_OS_WIN -#include -#include "winextras.h" - + #include + #include "winextras.h" #elif defined(Q_OS_UNIX) -#include + #include #endif #include @@ -58,9 +57,10 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : { ui->setupUi(this); + withoutQuickSetDialog = false; + setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(trUtf8("Choose your keyboard key")); - ui->advancedPushButton->setEnabled(false); update(); instance = this; @@ -88,7 +88,7 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : ui->virtualKeyMouseTabWidget->hide(); ui->virtualKeyMouseTabWidget->deleteLater(); - ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick ,&helper, currentQuickDialog, this); + ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick , &helper, currentQuickDialog, nullptr, this); ui->verticalLayout->insertWidget(1, ui->virtualKeyMouseTabWidget); PadderCommon::inputDaemonMutex.unlock(); @@ -112,13 +112,15 @@ ButtonEditDialog::ButtonEditDialog(InputDevice* joystick, QWidget *parent) : ButtonEditDialog::ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent) : QDialog(parent, Qt::Window), + helper(), ui(new Ui::ButtonEditDialog) { ui->setupUi(this); + withoutQuickSetDialog = true; + setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(trUtf8("Choose your keyboard key")); - ui->advancedPushButton->setEnabled(false); update(); instance = this; @@ -142,14 +144,13 @@ ButtonEditDialog::ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWi ui->virtualKeyMouseTabWidget->hide(); ui->virtualKeyMouseTabWidget->deleteLater(); - ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick, &helper, currentQuickDialog, this); + ui->virtualKeyMouseTabWidget = new VirtualKeyboardMouseWidget(joystick, &helper, currentQuickDialog, button, this); ui->verticalLayout->insertWidget(1, ui->virtualKeyMouseTabWidget); PadderCommon::inputDaemonMutex.unlock(); connect(qApp, &QApplication::focusChanged, this, &ButtonEditDialog::checkForKeyboardWidgetFocus); - connect(ui->virtualKeyMouseTabWidget, &VirtualKeyboardMouseWidget::selectionCleared, this, &ButtonEditDialog::refreshSlotSummaryLabel); connect(this, &ButtonEditDialog::keyGrabbed, this, &ButtonEditDialog::processSlotAssignment); @@ -477,7 +478,7 @@ void ButtonEditDialog::closedAdvancedDialog() { qInstallMessageHandler(MessageHandler::myMessageOutput); - ui->advancedPushButton->setEnabled(true); + refreshForLastBtn(); disconnect(ui->virtualKeyMouseTabWidget, static_cast(&VirtualKeyboardMouseWidget::selectionMade), this, nullptr); @@ -490,22 +491,28 @@ void ButtonEditDialog::closedAdvancedDialog() void ButtonEditDialog::processSlotAssignment(JoyButtonSlot *tempslot) { - qInstallMessageHandler(MessageHandler::myMessageOutput); - if ((currentQuickDialog == nullptr) && (buttonEventInterval.isNull() || (buttonEventInterval.elapsed() > 1000))) + if (withoutQuickSetDialog) + { + invokeMethodLastBtn(lastJoyButton, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + } + else { - // for better security, force pausing for 1 sec between key presses, - // because mapped joystick buttons and axes become keys too - // it's good for oversensitive buttons and axes, which can - // create QuickSetDialog windows many times for one key + if ((currentQuickDialog == nullptr) && (buttonEventInterval.isNull() || (buttonEventInterval.elapsed() > 1000))) + { + // for better security, force pausing for 1 sec between key presses, + // because mapped joystick buttons and axes become keys too + // it's good for oversensitive buttons and axes, which can + // create QuickSetDialog windows many times for one key - if (buttonEventInterval.isNull()) buttonEventInterval.start(); - else buttonEventInterval.restart(); + if (buttonEventInterval.isNull()) buttonEventInterval.start(); + else buttonEventInterval.restart(); - currentQuickDialog = new QuickSetDialog(joystick, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, this); - currentQuickDialog->show(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &ButtonEditDialog::nullifyDialogPointer); + currentQuickDialog = new QuickSetDialog(joystick, &helper, "setAssignedSlot", tempslot->getSlotCode(), tempslot->getSlotCodeAlias(), -1, tempslot->getSlotMode(), false, false, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &ButtonEditDialog::nullifyDialogPointer); + } } tempslot->deleteLater(); @@ -576,7 +583,6 @@ void ButtonEditDialog::refreshForLastBtn() { if (lastJoyButton != nullptr) { - ui->advancedPushButton->setEnabled(true); ui->slotSummaryLabel->setText(lastJoyButton->getSlotsString()); updateWindowTitleButtonName(); @@ -590,6 +596,36 @@ void ButtonEditDialog::refreshForLastBtn() { if (!lastJoyButton->getButtonName().isEmpty()) ui->buttonNameLineEdit->setText(lastJoyButton->getButtonName()); + if ((lastJoyButton->getAssignedSlots()->count() > 0) || (ui->slotSummaryLabel->text() != trUtf8("[NO KEY]"))) + { + ui->advancedPushButton->setEnabled(true); + ui->advancedPushButton->setEnabled(true); + } + else + { + ui->advancedPushButton->setEnabled(false); + } + + if (lastJoyButton != nullptr) { + + QListIterator iter(*(lastJoyButton->getAssignedSlots())); + + ui->virtualKeyMouseTabWidget->disableMouseSettingButton(); + + while (iter.hasNext()) + { + JoyButtonSlot *buttonslot = iter.next(); + + switch(buttonslot->getSlotMode()) + { + case JoyButtonSlot::JoyMouseMovement: + case JoyButtonSlot::JoyMouseButton: + ui->virtualKeyMouseTabWidget->enableMouseSettingButton(); + break; + } + } + } + connect(ui->actionNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setActionName); connect(ui->buttonNameLineEdit, &QLineEdit::textEdited, lastJoyButton, &JoyButton::setButtonName); @@ -602,6 +638,56 @@ void ButtonEditDialog::refreshForLastBtn() { update(); } +void ButtonEditDialog::invokeMethodLastBtn(JoyButton* lastJoyBtn, ButtonEditDialogHelper* helper, const char* invokeString, int code, int alias, int index, JoyButtonSlot::JoySlotInputAction mode, bool withClear, bool withTrue, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll) +{ + QPointer lastBtn = lastJoyBtn; + if (helper != nullptr) helper = new ButtonEditDialogHelper(); + + QPointer btnEditDHelper = helper; + + if (lastJoyBtn != nullptr) + { + helper->setThisButton(lastJoyBtn); + helper->moveToThread(lastJoyBtn->thread()); + + #ifndef QT_DEBUG_NO_OUTPUT + qDebug() << "Thread in QuickSetDialog"; + #endif + + if (withClear) QMetaObject::invokeMethod(lastJoyBtn, "clearSlotsEventReset", Q_ARG(bool, withTrue)); + + // when alias exists but not index + if ((alias != -1) && (index == -1)) { + + QMetaObject::invokeMethod(helper, invokeString, connTypeForAlias, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + + // when alias doesn't exists and index too + } else if ((alias == -1) && (index == -1)) { + + QMetaObject::invokeMethod(helper, invokeString, connTypeForNothing, + Q_ARG(int, code), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + + // when all exist (code, alias, index) + } else { + + if (lastJoyBtn->isPartVDPad()) connTypeForAll = Qt::BlockingQueuedConnection; + + QMetaObject::invokeMethod(helper, invokeString, connTypeForAll, + Q_ARG(int, code), + Q_ARG(int, alias), + Q_ARG(int, index), + Q_ARG(JoyButtonSlot::JoySlotInputAction, mode)); + } + } + + if (lastBtn.isNull()) lastBtn.clear(); + if (btnEditDHelper.isNull()) btnEditDHelper.clear(); +} + JoyButton* ButtonEditDialog::getLastJoyButton() { diff --git a/src/buttoneditdialog.h b/src/buttoneditdialog.h index b862cf1f..847199dd 100755 --- a/src/buttoneditdialog.h +++ b/src/buttoneditdialog.h @@ -38,14 +38,15 @@ class ButtonEditDialog : public QDialog Q_OBJECT public: - explicit ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent = nullptr); - explicit ButtonEditDialog(InputDevice* joystick, QWidget *parent = nullptr); + explicit ButtonEditDialog(JoyButton* button, InputDevice* joystick, QWidget *parent = nullptr); // called for chosen button + explicit ButtonEditDialog(InputDevice* joystick, QWidget *parent = nullptr); // Accessed by pressing the "Quick Set" button ~ButtonEditDialog(); static ButtonEditDialog* getInstance(); JoyButton* getLastJoyButton(); void setUpLastJoyButton(JoyButton*); void refreshForLastBtn(); + void invokeMethodLastBtn(JoyButton* lastJoyBtn, ButtonEditDialogHelper* helper, const char* invokeString, int code, int alias, int index, JoyButtonSlot::JoySlotInputAction mode, bool withClear, bool withTrue, Qt::ConnectionType connTypeForAlias, Qt::ConnectionType connTypeForNothing, Qt::ConnectionType connTypeForAll); protected: virtual void keyReleaseEvent(QKeyEvent *event); @@ -60,6 +61,7 @@ class ButtonEditDialog : public QDialog InputDevice *joystick; QuickSetDialog *currentQuickDialog; bool ignoreRelease; + bool withoutQuickSetDialog; JoyButton* lastJoyButton; static ButtonEditDialog *instance; diff --git a/src/keyboard/virtualkeyboardmousewidget.cpp b/src/keyboard/virtualkeyboardmousewidget.cpp index 8432afc8..ddda6249 100755 --- a/src/keyboard/virtualkeyboardmousewidget.cpp +++ b/src/keyboard/virtualkeyboardmousewidget.cpp @@ -60,13 +60,15 @@ QHash VirtualKeyboardMouseWidget::topRowKeys = QHash (); -VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog, QWidget *parent) : +VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog, JoyButton* button, QWidget *parent) : QTabWidget(parent) { qInstallMessageHandler(MessageHandler::myMessageOutput); this->joystick = joystick; this->helper = helper; + this->withoutQuickSetDialog = (button != nullptr); + lastPressedBtn = button; currentQuickDialog = quickSetDialog; keyboardTab = new QWidget(this); mouseTab = new QWidget(this); @@ -77,7 +79,6 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, Bu this->addTab(keyboardTab, trUtf8("Keyboard")); this->addTab(mouseTab, trUtf8("Mouse")); - this->setTabPosition(QTabWidget::South); setupVirtualKeyboardLayout(); @@ -90,6 +91,7 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(InputDevice *joystick, Bu connect(mouseSettingsPushButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::openMouseSettingsDialog); } + VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : QTabWidget(parent) { @@ -99,12 +101,13 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : mouseTab = new QWidget(this); isLaptopDevice = isLaptop(); noneButton = createNoneKey(); + withoutQuickSetDialog = false; + lastPressedBtn = nullptr; populateTopRowKeys(); this->addTab(keyboardTab, trUtf8("Keyboard")); this->addTab(mouseTab, trUtf8("Mouse")); - this->setTabPosition(QTabWidget::South); setupVirtualKeyboardLayout(); @@ -113,7 +116,6 @@ VirtualKeyboardMouseWidget::VirtualKeyboardMouseWidget(QWidget *parent) : establishVirtualMouseSignalConnections(); QTimer::singleShot(0, this, SLOT(setButtonFontSizes())); - } @@ -133,13 +135,12 @@ bool VirtualKeyboardMouseWidget::is_numlock_activated() #endif } -bool VirtualKeyboardMouseWidget::isLaptop() { - +bool VirtualKeyboardMouseWidget::isLaptop() +{ int secs, pct; - if (SDL_GetPowerInfo(&secs, &pct) == SDL_POWERSTATE_UNKNOWN) - return false; - else - return true; + + if (SDL_GetPowerInfo(&secs, &pct) == SDL_POWERSTATE_UNKNOWN) return false; + else return true; } @@ -148,15 +149,16 @@ void VirtualKeyboardMouseWidget::setupVirtualKeyboardLayout() qInstallMessageHandler(MessageHandler::myMessageOutput); QVBoxLayout *finalVBoxLayout = new QVBoxLayout(keyboardTab); - QVBoxLayout *tempMainKeyLayout = setupMainKeyboardLayout(); QVBoxLayout *tempAuxKeyLayout = new QVBoxLayout(); QVBoxLayout *tempNumKeyPadLayout = new QVBoxLayout(); if (is_numlock_activated()) + { tempNumKeyPadLayout = setupKeyboardNumPadLayout(); - else { - + } + else + { QPushButton *othersKeysButton = createOtherKeysMenu(); tempNumKeyPadLayout->addWidget(noneButton); @@ -165,17 +167,19 @@ void VirtualKeyboardMouseWidget::setupVirtualKeyboardLayout() } QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); - tempHBoxLayout->addLayout(tempMainKeyLayout); - if (!isLaptopDevice) { + if (!isLaptopDevice) + { tempAuxKeyLayout = setupAuxKeyboardLayout(); tempHBoxLayout->addLayout(tempAuxKeyLayout); - } else + } + else + { delete tempAuxKeyLayout; + } tempHBoxLayout->addLayout(tempNumKeyPadLayout); - finalVBoxLayout->addLayout(tempHBoxLayout); } @@ -185,8 +189,10 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + QVBoxLayout *tempVBoxLayout = new QVBoxLayout(); tempVBoxLayout->setSpacing(0); + QVBoxLayout *finalVBoxLayout = new QVBoxLayout(); if (isLaptopDevice) finalVBoxLayout->setSpacing(0); @@ -207,7 +213,8 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("F11")); tempHBoxLayout->addWidget(createNewKey("F12")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Print")); tempHBoxLayout->addWidget(createNewKey("Pause")); tempHBoxLayout->addWidget(createNewKey("Delete")); @@ -225,6 +232,7 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() { tempHBoxLayout->addWidget(createNewKey(QString::number(i))); } + tempHBoxLayout->addWidget(createNewKey("0")); tempHBoxLayout->addWidget(createNewKey("minus")); tempHBoxLayout->addWidget(createNewKey("equal")); @@ -238,8 +246,10 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() QVBoxLayout *tempMiddleVLayout = new QVBoxLayout(); tempMiddleVLayout->setSpacing(0); + QHBoxLayout *tempMiddleHLayout = new QHBoxLayout(); tempHBoxLayout = new QHBoxLayout(); + tempHBoxLayout->addWidget(createNewKey("Tab")); if (!isLaptopDevice) tempHBoxLayout->addSpacerItem(new QSpacerItem(10, 30, QSizePolicy::Fixed)); tempHBoxLayout->addWidget(createNewKey("q")); @@ -261,10 +271,13 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("backslash")); } - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Prior")); tempVBoxLayout->addLayout(tempHBoxLayout); - } else { + } + else + { tempMiddleVLayout->addLayout(tempHBoxLayout); } @@ -289,21 +302,22 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("asterisk")); } - if (!isLaptopDevice) { - + if (!isLaptopDevice) + { tempMiddleVLayout->addLayout(tempHBoxLayout); tempMiddleHLayout->addLayout(tempMiddleVLayout); tempMiddleHLayout->setSpacing(0); tempMiddleHLayout->addWidget(createNewKey("Return")); tempVBoxLayout->addLayout(tempMiddleHLayout); - - } else { - + } + else + { tempHBoxLayout->addWidget(createNewKey("Return")); tempHBoxLayout->addWidget(createNewKey("Next")); tempVBoxLayout->addLayout(tempHBoxLayout); + delete tempMiddleHLayout; delete tempMiddleVLayout; } @@ -329,7 +343,8 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempHBoxLayout->addWidget(createNewKey("slash")); tempHBoxLayout->addWidget(createNewKey("Shift_R")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Up")); tempHBoxLayout->addWidget(createNewKey("End")); } @@ -345,16 +360,21 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() VirtualKeyPushButton* altR = createNewKey("Alt_R"); - if (altR->getKeycode() <= 0) { + if (altR->getKeycode() <= 0) + { tempHBoxLayout->addWidget(createNewKey("ISO_Level3_Shift")); delete altR; - } else + } + else + { tempHBoxLayout->addWidget(altR); + } tempHBoxLayout->addWidget(createNewKey("Menu")); tempHBoxLayout->addWidget(createNewKey("Control_R")); - if (isLaptopDevice) { + if (isLaptopDevice) + { tempHBoxLayout->addWidget(createNewKey("Left")); tempHBoxLayout->addWidget(createNewKey("Down")); tempHBoxLayout->addWidget(createNewKey("Right")); @@ -362,19 +382,21 @@ QVBoxLayout *VirtualKeyboardMouseWidget::setupMainKeyboardLayout() tempVBoxLayout->addLayout(tempHBoxLayout); - if (!isLaptopDevice) { - tempVBoxLayout->setStretch(0, 1); - tempVBoxLayout->setStretch(1, 2); - tempVBoxLayout->setStretch(2, 1); - tempVBoxLayout->setStretch(3, 1); + if (!isLaptopDevice) + { + tempVBoxLayout->setStretch(0, 1); + tempVBoxLayout->setStretch(1, 2); + tempVBoxLayout->setStretch(2, 1); + tempVBoxLayout->setStretch(3, 1); } finalVBoxLayout->addLayout(tempVBoxLayout); - if (!isLaptopDevice) { - finalVBoxLayout->setStretch(0, 1); - finalVBoxLayout->setStretch(1, 0); - finalVBoxLayout->setStretch(2, 2); + if (!isLaptopDevice) + { + finalVBoxLayout->setStretch(0, 1); + finalVBoxLayout->setStretch(1, 0); + finalVBoxLayout->setStretch(2, 2); } return finalVBoxLayout; @@ -391,9 +413,11 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupAuxKeyboardLayout() tempHBoxLayout->setSpacing(0); tempVBoxLayout->setSpacing(0); tempGridLayout->setSpacing(0); + tempHBoxLayout->addWidget(createNewKey("Print")); tempHBoxLayout->addWidget(createNewKey("Scroll_Lock")); tempHBoxLayout->addWidget(createNewKey("Pause")); + tempVBoxLayout->addLayout(tempHBoxLayout); tempVBoxLayout->addSpacerItem(new QSpacerItem(20, 45, QSizePolicy::Minimum, QSizePolicy::Fixed)); @@ -424,10 +448,13 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() QHBoxLayout *tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + QVBoxLayout *tempVBoxLayout = new QVBoxLayout(); tempVBoxLayout->setSpacing(0); + QGridLayout *tempGridLayout = new QGridLayout(); tempGridLayout->setSpacing(0); + QVBoxLayout *finalVBoxLayout = new QVBoxLayout(); finalVBoxLayout->setSpacing(0); @@ -461,6 +488,7 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() tempHBoxLayout = new QHBoxLayout(); tempHBoxLayout->setSpacing(0); + tempGridLayout = new QGridLayout(); tempGridLayout->setSpacing(0); tempGridLayout->addWidget(createNewKey("KP_1"), 1, 1, 1, 1); @@ -468,6 +496,7 @@ QVBoxLayout* VirtualKeyboardMouseWidget::setupKeyboardNumPadLayout() tempGridLayout->addWidget(createNewKey("KP_3"), 1, 3, 1, 1); tempGridLayout->addWidget(createNewKey("KP_0"), 2, 1, 1, 2); tempGridLayout->addWidget(createNewKey("KP_Decimal"), 2, 3, 1, 1); + tempHBoxLayout->addLayout(tempGridLayout); tempHBoxLayout->addWidget(createNewKey("KP_Enter")); @@ -738,12 +767,16 @@ void VirtualKeyboardMouseWidget::processSingleKeyboardSelection(int keycode, int { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (currentQuickDialog == nullptr) { - - currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, this); - currentQuickDialog->show(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); - + if ((currentQuickDialog == nullptr) && !withoutQuickSetDialog) + { + currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); + } + else if (withoutQuickSetDialog) + { + ButtonEditDialog::getInstance()->invokeMethodLastBtn(lastPressedBtn, helper, "setAssignedSlot", keycode, alias, 0, JoyButtonSlot::JoyKeyboard, true, true, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + ButtonEditDialog::getInstance()->refreshForLastBtn(); } } @@ -758,12 +791,16 @@ void VirtualKeyboardMouseWidget::processSingleMouseSelection(JoyButtonSlot *temp { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (currentQuickDialog == nullptr) { - - currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, this); - currentQuickDialog->show(); - connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); - + if ((currentQuickDialog == nullptr) && !withoutQuickSetDialog) + { + currentQuickDialog = new QuickSetDialog(joystick, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, this); + currentQuickDialog->show(); + connect(currentQuickDialog, &QuickSetDialog::finished, this, &VirtualKeyboardMouseWidget::nullifyDialogPointer); + } + else if (withoutQuickSetDialog) + { + ButtonEditDialog::getInstance()->invokeMethodLastBtn(lastPressedBtn, helper, "setAssignedSlot", tempslot->getSlotCode(), -1, -1, tempslot->getSlotMode(), true, true, Qt::QueuedConnection, Qt::QueuedConnection, Qt::QueuedConnection); + ButtonEditDialog::getInstance()->refreshForLastBtn(); } } @@ -802,6 +839,7 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections QList newlist = keyboardTab->findChildren (); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualKeyPushButton *keybutton = iter.next(); @@ -810,22 +848,23 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardSingleSignalConnections } QListIterator iterActions(otherKeysMenu->actions()); + while (iterActions.hasNext()) { QAction *temp = iterActions.next(); disconnect(temp, &QAction::triggered, nullptr, nullptr); + connect(temp, &QAction::triggered, this, [this, temp](bool checked) { otherKeysActionSingle(temp, checked); }); } + disconnect(noneButton, &QPushButton::clicked, nullptr, nullptr); + connect(noneButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::clearButtonSlotsFinish); - disconnect(noneButton, &QPushButton::clicked, nullptr, nullptr); - connect(noneButton, &QPushButton::clicked, this, &VirtualKeyboardMouseWidget::clearButtonSlotsFinish); - - #ifndef QT_DEBUG_NO_OUTPUT + #ifndef QT_DEBUG_NO_OUTPUT qDebug() << "COUNT: " << newlist.count(); - #endif + #endif } void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnections() @@ -834,6 +873,7 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnectio QList newlist = keyboardTab->findChildren (); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualKeyPushButton *keybutton = iter.next(); @@ -842,10 +882,12 @@ void VirtualKeyboardMouseWidget::establishVirtualKeyboardAdvancedSignalConnectio } QListIterator iterActions(otherKeysMenu->actions()); + while (iterActions.hasNext()) { QAction *temp = iterActions.next(); disconnect(temp, &QAction::triggered, nullptr, nullptr); + connect(temp, &QAction::triggered, this, [this, temp](bool checked) { otherKeysActionAdvanced(temp, checked); }); @@ -861,6 +903,7 @@ void VirtualKeyboardMouseWidget::establishVirtualMouseSignalConnections() QList newlist = mouseTab->findChildren(); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualMousePushButton *mousebutton = iter.next(); @@ -875,6 +918,7 @@ void VirtualKeyboardMouseWidget::establishVirtualMouseAdvancedSignalConnections( QList newlist = mouseTab->findChildren(); QListIterator iter(newlist); + while (iter.hasNext()) { VirtualMousePushButton *mousebutton = iter.next(); @@ -887,14 +931,16 @@ void VirtualKeyboardMouseWidget::clearButtonSlots() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) - QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - - emit selectionCleared(); + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - } else { + emit selectionCleared(); + } + else + { QMessageBox::information(this, trUtf8("Last button"), trUtf8("Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad")); } } @@ -903,14 +949,15 @@ void VirtualKeyboardMouseWidget::clearButtonSlotsFinish() { qInstallMessageHandler(MessageHandler::myMessageOutput); - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) - QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); - - emit selectionFinished(); - - } else { + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + QMetaObject::invokeMethod(ButtonEditDialog::getInstance()->getLastJoyButton(), "clearSlotsEventReset", Qt::BlockingQueuedConnection); + emit selectionFinished(); + } + else + { QMessageBox::information(this, trUtf8("Last button"), trUtf8("Slots for button couldn't be cleared, because there was not any set button from keyboard for gamepad. Map at least one button from keyboard to gamepad")); } } @@ -929,17 +976,18 @@ void VirtualKeyboardMouseWidget::openMouseSettingsDialog() mouseSettingsPushButton->setEnabled(false); // TODO instead of buttons, get pointer to static getInstance from ButtonEditDialog for last pressed button, and then getting button from public method - if (ButtonEditDialog::getInstance() != nullptr) { - if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) { - + if (ButtonEditDialog::getInstance() != nullptr) + { + if (ButtonEditDialog::getInstance()->getLastJoyButton() != nullptr) + { MouseButtonSettingsDialog *dialog = new MouseButtonSettingsDialog(ButtonEditDialog::getInstance()->getLastJoyButton(), this); dialog->show(); QDialog *parent = qobject_cast(this->parentWidget()); // static_cast connect(parent, &QDialog::finished, dialog, &MouseButtonSettingsDialog::close); connect(dialog, &MouseButtonSettingsDialog::finished, this, &VirtualKeyboardMouseWidget::enableMouseSettingButton); - - } else { - + } + else + { QMessageBox::information(this, QObject::trUtf8("Last button"), QObject::trUtf8("There isn't a last button pressed from gamepad in data. Did you set at least one button from gamepad for keyboard?")); } } @@ -952,6 +1000,13 @@ void VirtualKeyboardMouseWidget::enableMouseSettingButton() mouseSettingsPushButton->setEnabled(true); } +void VirtualKeyboardMouseWidget::disableMouseSettingButton() +{ + qInstallMessageHandler(MessageHandler::myMessageOutput); + + mouseSettingsPushButton->setEnabled(false); +} + void VirtualKeyboardMouseWidget::resizeEvent(QResizeEvent *event) { qInstallMessageHandler(MessageHandler::myMessageOutput); @@ -968,13 +1023,13 @@ void VirtualKeyboardMouseWidget::setButtonFontSizes() QList buttonList = this->findChildren(); QListIterator iter(buttonList); + while (iter.hasNext()) { VirtualKeyPushButton *temp = iter.next(); QFont tempFont(temp->font()); tempFont.setPointSize(temp->calculateFontSize()); temp->setFont(tempFont); - } } @@ -1131,8 +1186,8 @@ void VirtualKeyboardMouseWidget::nullifyDialogPointer() } } -InputDevice* VirtualKeyboardMouseWidget::getJoystick() const { - +InputDevice* VirtualKeyboardMouseWidget::getJoystick() const +{ return joystick; } @@ -1141,32 +1196,32 @@ ButtonEditDialogHelper* VirtualKeyboardMouseWidget::getHelper() const { return helper; } -QWidget* VirtualKeyboardMouseWidget::getKeyboardTab() const { - +QWidget* VirtualKeyboardMouseWidget::getKeyboardTab() const +{ return keyboardTab; } -QWidget* VirtualKeyboardMouseWidget::getMouseTab() const { - +QWidget* VirtualKeyboardMouseWidget::getMouseTab() const +{ return mouseTab; } -QPushButton* VirtualKeyboardMouseWidget::getNoneButton() const { - +QPushButton* VirtualKeyboardMouseWidget::getNoneButton() const +{ return noneButton; } -QPushButton* VirtualKeyboardMouseWidget::getMouseSettingsPushButton() const { - +QPushButton* VirtualKeyboardMouseWidget::getMouseSettingsPushButton() const +{ return mouseSettingsPushButton; } -QMenu* VirtualKeyboardMouseWidget::getOtherKeysMenu() const { - +QMenu* VirtualKeyboardMouseWidget::getOtherKeysMenu() const +{ return otherKeysMenu; } -QuickSetDialog* VirtualKeyboardMouseWidget::getCurrentQuickDialog() const { - +QuickSetDialog* VirtualKeyboardMouseWidget::getCurrentQuickDialog() const +{ return currentQuickDialog; } diff --git a/src/keyboard/virtualkeyboardmousewidget.h b/src/keyboard/virtualkeyboardmousewidget.h index 35437928..7a5acd15 100755 --- a/src/keyboard/virtualkeyboardmousewidget.h +++ b/src/keyboard/virtualkeyboardmousewidget.h @@ -40,7 +40,7 @@ class VirtualKeyboardMouseWidget : public QTabWidget Q_OBJECT public: - explicit VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog = nullptr, QWidget *parent = nullptr); + explicit VirtualKeyboardMouseWidget(InputDevice *joystick, ButtonEditDialogHelper* helper, QuickSetDialog* quickSetDialog = nullptr, JoyButton* button = nullptr, QWidget *parent = nullptr); explicit VirtualKeyboardMouseWidget(QWidget *parent = nullptr); bool isKeyboardTabVisible(); bool is_numlock_activated(); @@ -84,6 +84,8 @@ public slots: void establishVirtualMouseSignalConnections(); void establishVirtualKeyboardAdvancedSignalConnections(); void establishVirtualMouseAdvancedSignalConnections(); + void enableMouseSettingButton(); + void disableMouseSettingButton(); private slots: void processSingleKeyboardSelection(int keycode, int alias); // (.., unsigned) @@ -93,7 +95,6 @@ private slots: void clearButtonSlots(); void clearButtonSlotsFinish(); void openMouseSettingsDialog(); - void enableMouseSettingButton(); void setButtonFontSizes(); void otherKeysActionSingle(QAction* action, bool triggered); void otherKeysActionAdvanced(QAction* action, bool triggered); @@ -101,7 +102,9 @@ private slots: private: bool isLaptopDevice; + bool withoutQuickSetDialog; InputDevice *joystick; + JoyButton* lastPressedBtn; ButtonEditDialogHelper* helper; QWidget *keyboardTab; QWidget *mouseTab;