diff --git a/src/keyboard_input/input_parser.cpp b/src/keyboard_input/input_parser.cpp index b9b6e73..9382a84 100644 --- a/src/keyboard_input/input_parser.cpp +++ b/src/keyboard_input/input_parser.cpp @@ -308,7 +308,11 @@ bool isModifier( const Token token ) noexcept [[fallthrough]]; case Token::MODIFIER_SHIFT: [[fallthrough]]; + case Token::MODIFIER_RSHIFT: + [[fallthrough]]; case Token::MODIFIER_SUPER: + [[fallthrough]]; + case Token::MODIFIER_TILDE: return true; default: return false; diff --git a/src/keyboard_input/input_parser.h b/src/keyboard_input/input_parser.h index 9ad8329..806654d 100644 --- a/src/keyboard_input/input_parser.h +++ b/src/keyboard_input/input_parser.h @@ -81,12 +81,15 @@ enum class Token // Misc tokens TOKEN_NEW_SEQUENCE, + TOKEN_NO_KEYUP_NEXT, // Modifiers MODIFIER_CTRL, MODIFIER_ALT, MODIFIER_SHIFT, + MODIFIER_RSHIFT, MODIFIER_SUPER, + MODIFIER_TILDE, }; std::vector diff --git a/src/keyboard_input/input_sender_X11.cpp b/src/keyboard_input/input_sender_X11.cpp index 6099e4e..f2e7bfd 100644 --- a/src/keyboard_input/input_sender_X11.cpp +++ b/src/keyboard_input/input_sender_X11.cpp @@ -151,8 +151,12 @@ unsigned int tokenToKeySym( const Token token ) return XK_Alt_L; case Token::MODIFIER_SHIFT: return XK_Shift_L; + case Token::MODIFIER_RSHIFT: + return XK_Shift_R; case Token::MODIFIER_SUPER: return XK_Super_L; + case Token::MODIFIER_TILDE: + return XK_grave; default: return 0; @@ -182,12 +186,22 @@ void sendTokensAsInput( const std::vector tokens ) XTestGrabControl( display, True ); std::vector heldInputs = {}; + bool noKeyUp = false; for ( const auto& token : tokens ) { + if ( token == Token::TOKEN_NO_KEYUP_NEXT ) + { + noKeyUp = true; + continue; + } + if ( isModifier( token ) ) { sendKeyPress( token, KeyStatus::Down, display ); - heldInputs.push_back( token ); + if ( noKeyUp ) + { + heldInputs.push_back( token ); + } continue; } @@ -204,7 +218,16 @@ void sendTokensAsInput( const std::vector tokens ) if ( isLiteral( token ) ) { sendKeyPress( token, KeyStatus::Down, display ); - sendKeyPress( token, KeyStatus::Up, display ); + if ( noKeyUp ) + { + sendKeyPress( token, KeyStatus::Up, display ); + } + continue; + } + + if ( token != Token::TOKEN_NO_KEYUP_NEXT ) + { + noKeyUp = false; continue; } } diff --git a/src/keyboard_input/input_sender_win.cpp b/src/keyboard_input/input_sender_win.cpp index f409a99..dfa436b 100644 --- a/src/keyboard_input/input_sender_win.cpp +++ b/src/keyboard_input/input_sender_win.cpp @@ -82,8 +82,12 @@ WORD convertToVirtualKeycode( const Token token ) return VK_MENU; case Token::MODIFIER_SHIFT: return VK_SHIFT; + case Token::MODIFIER_RSHIFT: + return VK_RSHIFT; case Token::MODIFIER_SUPER: return VK_LWIN; + case Token::MODIFIER_TILDE: + return VK_OEM_3; default: return 0; @@ -97,15 +101,32 @@ INPUT createInputStruct( const WORD virtualKeyCode, input.type = INPUT_KEYBOARD; - input.ki.wVk = virtualKeyCode; + if ( virtualKeyCode == VK_RSHIFT ) + { + input.ki.wVk = VK_SHIFT; + input.ki.wScan = 0x36; - if ( keyStatus == KeyStatus::Up ) - { - input.ki.dwFlags = KEYEVENTF_KEYUP; + if ( keyStatus == KeyStatus::Up ) + { + input.ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_SCANCODE; + } + else if ( keyStatus == KeyStatus::Down ) + { + input.ki.dwFlags = 0 | KEYEVENTF_SCANCODE; + } } - else if ( keyStatus == KeyStatus::Down ) + else { - input.ki.dwFlags = 0; + input.ki.wVk = virtualKeyCode; + + if ( keyStatus == KeyStatus::Up ) + { + input.ki.dwFlags = KEYEVENTF_KEYUP; + } + else if ( keyStatus == KeyStatus::Down ) + { + input.ki.dwFlags = 0; + } } return input; @@ -146,13 +167,23 @@ void sendTokensAsInput( const std::vector tokens ) { std::vector inputs = {}; std::vector heldInputs = {}; + bool noKeyUp = false; for ( const auto& token : tokens ) { + if ( token == Token::TOKEN_NO_KEYUP_NEXT ) + { + noKeyUp = true; + continue; + } + if ( isModifier( token ) ) { inputs.push_back( createInputStruct( convertToVirtualKeycode( token ), KeyStatus::Down ) ); - heldInputs.push_back( token ); + if ( !noKeyUp ) + { + heldInputs.push_back( token ); + } continue; } @@ -171,8 +202,16 @@ void sendTokensAsInput( const std::vector tokens ) { inputs.push_back( createInputStruct( convertToVirtualKeycode( token ), KeyStatus::Down ) ); - inputs.push_back( createInputStruct( - convertToVirtualKeycode( token ), KeyStatus::Up ) ); + if ( !noKeyUp ) + { + inputs.push_back( createInputStruct( + convertToVirtualKeycode( token ), KeyStatus::Up ) ); + } + continue; + } + if ( token != Token::TOKEN_NO_KEYUP_NEXT ) + { + noKeyUp = false; continue; } } diff --git a/src/keyboard_input/keyboard_input.cpp b/src/keyboard_input/keyboard_input.cpp index e5577d6..47d3d77 100644 --- a/src/keyboard_input/keyboard_input.cpp +++ b/src/keyboard_input/keyboard_input.cpp @@ -56,4 +56,184 @@ void sendKeyboardCtrlV() sendTokensAsInput( tokens ); } +void sendKeyboardRShiftTilde1() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_1 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde2() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_2 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde3() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_3 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde4() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_4 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde5() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_5 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde6() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_6 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde7() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_7 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde8() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_8 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde9() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_9 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde0() +{ + const auto tokens = std::vector{ + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_RSHIFT, + Token::TOKEN_NO_KEYUP_NEXT, Token::MODIFIER_TILDE, + Token::TOKEN_NO_KEYUP_NEXT, Token::KEY_0 + }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde1Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_1 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde2Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_2 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde3Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_3 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde4Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_4 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde5Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_5 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde6Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_6 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde7Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_7 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde8Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_8 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde9Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_9 }; + sendTokensAsInput( tokens ); +} + +void sendKeyboardRShiftTilde0Delayed() +{ + const auto tokens = std::vector{ Token::MODIFIER_RSHIFT, + Token::MODIFIER_TILDE, + Token::KEY_0 }; + sendTokensAsInput( tokens ); +} + } // namespace keyboardinput diff --git a/src/keyboard_input/keyboard_input.h b/src/keyboard_input/keyboard_input.h index 3c553fd..5b06b04 100644 --- a/src/keyboard_input/keyboard_input.h +++ b/src/keyboard_input/keyboard_input.h @@ -24,4 +24,35 @@ void sendKeyboardAltEnter(); void sendKeyboardCtrlC(); void sendKeyboardCtrlV(); +// the following functions are used for debug commands in VRChat +// I (Kung) wanted them personally because they're very hard to +// hit from in VR, but it's a narrow use case for a specific app +// so for now these will only be enabled in the UI via manually +// adding vrcDebug = true to [utilitiesSettings] in +// OpenVRAdvancedSettings.ini + +// These just call a thread +void sendKeyboardRShiftTilde1(); +void sendKeyboardRShiftTilde2(); +void sendKeyboardRShiftTilde3(); +void sendKeyboardRShiftTilde4(); +void sendKeyboardRShiftTilde5(); +void sendKeyboardRShiftTilde6(); +void sendKeyboardRShiftTilde7(); +void sendKeyboardRShiftTilde8(); +void sendKeyboardRShiftTilde9(); +void sendKeyboardRShiftTilde0(); + +// These should be run after a slight delay +void sendKeyboardRShiftTilde1Delayed(); +void sendKeyboardRShiftTilde2Delayed(); +void sendKeyboardRShiftTilde3Delayed(); +void sendKeyboardRShiftTilde4Delayed(); +void sendKeyboardRShiftTilde5Delayed(); +void sendKeyboardRShiftTilde6Delayed(); +void sendKeyboardRShiftTilde7Delayed(); +void sendKeyboardRShiftTilde8Delayed(); +void sendKeyboardRShiftTilde9Delayed(); +void sendKeyboardRShiftTilde0Delayed(); + } // namespace keyboardinput diff --git a/src/res/qml/utilities_page/keyboard_utils/KeyboardGroupBox.qml b/src/res/qml/utilities_page/keyboard_utils/KeyboardGroupBox.qml index bcdf896..210ab99 100644 --- a/src/res/qml/utilities_page/keyboard_utils/KeyboardGroupBox.qml +++ b/src/res/qml/utilities_page/keyboard_utils/KeyboardGroupBox.qml @@ -138,8 +138,451 @@ GroupBox { Layout.fillWidth: true } } + RowLayout { + spacing: 18 + Layout.fillWidth: true + id: vrcDebugRow + + MyPushButton { + id: rShiftTilde1Button + text: "RSh~1" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde1() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer1.restart() + } + } + + MyPushButton { + id: rShiftTilde2Button + text: "RSh~2" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde2() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer2.restart() + } + } + + MyPushButton { + id: rShiftTilde3Button + text: "RSh~3" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde3() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer3.restart() + } + } + + MyPushButton { + id: rShiftTilde4Button + text: "RSh~4" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde4() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer4.restart() + } + } + + MyPushButton { + id: rShiftTilde5Button + text: "RSh~5" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde5() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer5.restart() + } + } + + MyPushButton { + id: rShiftTilde6Button + text: "RSh~6" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde6() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer6.restart() + } + } + + MyPushButton { + id: rShiftTilde7Button + text: "RSh~7" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde7() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer7.restart() + } + } + + MyPushButton { + id: rShiftTilde8Button + text: "RSh~8" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde8() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer8.restart() + } + } + + MyPushButton { + id: rShiftTilde9Button + text: "RSh~9" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde9() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer9.restart() + } + } + + MyPushButton { + id: rShiftTilde0Button + text: "RSh~0" + Layout.fillWidth: true + onClicked: { + UtilitiesTabController.sendKeyboardRShiftTilde0() + rShiftTilde1Button.enabled = false + rShiftTilde2Button.enabled = false + rShiftTilde3Button.enabled = false + rShiftTilde4Button.enabled = false + rShiftTilde5Button.enabled = false + rShiftTilde6Button.enabled = false + rShiftTilde7Button.enabled = false + rShiftTilde8Button.enabled = false + rShiftTilde9Button.enabled = false + rShiftTilde0Button.enabled = false + timer0.restart() + } + } + + Timer { + id: timer1 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde1Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer2 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde2Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer3 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde3Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer4 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde4Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer5 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde5Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer6 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde6Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer7 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde7Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer8 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde8Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer9 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde9Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + Timer { + id: timer0 + interval: 50 + repeat: false + running: false + triggeredOnStart: false + + onTriggered: { + UtilitiesTabController.sendKeyboardRShiftTilde0Delayed() + rShiftTilde1Button.enabled = true + rShiftTilde2Button.enabled = true + rShiftTilde3Button.enabled = true + rShiftTilde4Button.enabled = true + rShiftTilde5Button.enabled = true + rShiftTilde6Button.enabled = true + rShiftTilde7Button.enabled = true + rShiftTilde8Button.enabled = true + rShiftTilde9Button.enabled = true + rShiftTilde0Button.enabled = true + } + + } + + } } Component.onCompleted: { keyboardGroupBox.visible = !OverlayController.desktopMode + vrcDebugRow.visible = UtilitiesTabController.vrcDebug + } + Connections { + target: UtilitiesTabController + onVrcDebugChanged: { + vrcDebugRow.visible = UtilitiesTabController.vrcDebug + } } } diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index f997aac..8f08dea 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -15,11 +15,13 @@ void UtilitiesTabController::initStage1() settings->beginGroup( "utilitiesSettings" ); auto qAlarmEnabled = settings->value( "alarmEnabled", m_alarmEnabled ); auto qAlarmIsModal = settings->value( "alarmIsModal", m_alarmIsModal ); + auto qVrcDebug = settings->value( "vrcDebug", m_vrcDebug ); auto qAlarmHour = settings->value( "alarmHour", 0 ); auto qAlarmMinute = settings->value( "alarmMinute", 0 ); settings->endGroup(); m_alarmEnabled = qAlarmEnabled.toBool(); m_alarmIsModal = qAlarmIsModal.toBool(); + m_vrcDebug = qVrcDebug.toBool(); m_alarmTime = QTime( qAlarmHour.toInt(), qAlarmMinute.toInt() ); } @@ -63,6 +65,106 @@ void UtilitiesTabController::sendKeyboardBackspace( const int count ) keyboardinput::sendKeyboardBackspace( count ); } +void UtilitiesTabController::sendKeyboardRShiftTilde1() +{ + keyboardinput::sendKeyboardRShiftTilde1(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde2() +{ + keyboardinput::sendKeyboardRShiftTilde2(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde3() +{ + keyboardinput::sendKeyboardRShiftTilde3(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde4() +{ + keyboardinput::sendKeyboardRShiftTilde4(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde5() +{ + keyboardinput::sendKeyboardRShiftTilde5(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde6() +{ + keyboardinput::sendKeyboardRShiftTilde6(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde7() +{ + keyboardinput::sendKeyboardRShiftTilde7(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde8() +{ + keyboardinput::sendKeyboardRShiftTilde8(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde9() +{ + keyboardinput::sendKeyboardRShiftTilde9(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde0() +{ + keyboardinput::sendKeyboardRShiftTilde0(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde1Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde1Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde2Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde2Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde3Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde3Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde4Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde4Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde5Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde5Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde6Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde6Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde7Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde7Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde8Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde8Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde9Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde9Delayed(); +} + +void UtilitiesTabController::sendKeyboardRShiftTilde0Delayed() +{ + keyboardinput::sendKeyboardRShiftTilde0Delayed(); +} + void UtilitiesTabController::sendMediaNextSong() { keyboardinput::sendMediaNextSong(); @@ -124,6 +226,11 @@ bool UtilitiesTabController::alarmIsModal() const return m_alarmIsModal; } +bool UtilitiesTabController::vrcDebug() const +{ + return m_vrcDebug; +} + int UtilitiesTabController::alarmTimeHour() const { return m_alarmTime.hour(); @@ -169,6 +276,23 @@ void UtilitiesTabController::setAlarmIsModal( bool modal, bool notify ) } } +void UtilitiesTabController::setVrcDebug( bool value, bool notify ) +{ + if ( m_vrcDebug != value ) + { + m_vrcDebug = value; + auto settings = OverlayController::appSettings(); + settings->beginGroup( "utilitiesSettings" ); + settings->setValue( "vrcDebug", m_vrcDebug ); + settings->endGroup(); + settings->sync(); + if ( notify ) + { + emit vrcDebugChanged( m_vrcDebug ); + } + } +} + void UtilitiesTabController::setAlarmTimeHour( int hour, bool notify ) { if ( m_alarmTime.hour() != hour ) diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 8efaab8..4bc39a7 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -22,6 +22,8 @@ class UtilitiesTabController : public QObject alarmEnabledChanged ) Q_PROPERTY( bool alarmIsModal READ alarmIsModal WRITE setAlarmIsModal NOTIFY alarmIsModalChanged ) + Q_PROPERTY( + bool vrcDebug READ vrcDebug WRITE setVrcDebug NOTIFY vrcDebugChanged ) Q_PROPERTY( int alarmTimeHour READ alarmTimeHour WRITE setAlarmTimeHour NOTIFY alarmTimeHourChanged ) Q_PROPERTY( int alarmTimeMinute READ alarmTimeMinute WRITE @@ -34,6 +36,7 @@ private: bool m_alarmEnabled = false; bool m_alarmIsModal = true; + bool m_vrcDebug = false; QTime m_alarmTime; QTime m_alarmLastCheckTime; @@ -50,6 +53,7 @@ public: bool alarmEnabled() const; bool alarmIsModal() const; + bool vrcDebug() const; int alarmTimeHour() const; int alarmTimeMinute() const; @@ -61,6 +65,26 @@ public slots: void sendKeyboardCtrlC(); void sendKeyboardCtrlV(); void sendKeyboardBackspace( const int count ); + void sendKeyboardRShiftTilde1(); + void sendKeyboardRShiftTilde2(); + void sendKeyboardRShiftTilde3(); + void sendKeyboardRShiftTilde4(); + void sendKeyboardRShiftTilde5(); + void sendKeyboardRShiftTilde6(); + void sendKeyboardRShiftTilde7(); + void sendKeyboardRShiftTilde8(); + void sendKeyboardRShiftTilde9(); + void sendKeyboardRShiftTilde0(); + void sendKeyboardRShiftTilde1Delayed(); + void sendKeyboardRShiftTilde2Delayed(); + void sendKeyboardRShiftTilde3Delayed(); + void sendKeyboardRShiftTilde4Delayed(); + void sendKeyboardRShiftTilde5Delayed(); + void sendKeyboardRShiftTilde6Delayed(); + void sendKeyboardRShiftTilde7Delayed(); + void sendKeyboardRShiftTilde8Delayed(); + void sendKeyboardRShiftTilde9Delayed(); + void sendKeyboardRShiftTilde0Delayed(); void sendMediaNextSong(); void sendMediaPreviousSong(); void sendMediaPausePlay(); @@ -71,6 +95,7 @@ public slots: void setAlarmEnabled( bool enabled, bool notify = true ); void setAlarmIsModal( bool modal, bool notify = true ); + void setVrcDebug( bool value, bool notify = true ); void setAlarmTimeHour( int hour, bool notify = true ); void setAlarmTimeMinute( int min, bool notify = true ); void setAlarmTimeToCurrentTime(); @@ -80,6 +105,7 @@ public slots: signals: void alarmEnabledChanged( bool enabled ); void alarmIsModalChanged( bool modal ); + void vrcDebugChanged( bool value ); void alarmTimeHourChanged( int hour ); void alarmTimeMinuteChanged( int min ); };