diff --git a/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj b/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj index 5f513f8831c7..802b186f73a9 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj +++ b/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj @@ -154,7 +154,9 @@ - + + Designer + diff --git a/src/modules/keyboardmanager/KeyboardManagerEditor/Resources.resx b/src/modules/keyboardmanager/KeyboardManagerEditor/Resources.resx index 1e342b4414f4..84fdcfa84f3f 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditor/Resources.resx +++ b/src/modules/keyboardmanager/KeyboardManagerEditor/Resources.resx @@ -294,6 +294,10 @@ Key/Shortcut Key on a keyboard + + Run Program + Run Program + Add key remapping Key on a keyboard diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp index e5a80db5a7a4..37d18837065c 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp @@ -246,6 +246,12 @@ inline void CreateEditShortcutsWindowImpl(HINSTANCE hInst, KBMEditor::KeyboardMa // Create copy of the remaps to avoid concurrent access ShortcutRemapTable osLevelShortcutReMapCopy = mappingConfiguration.osLevelShortcutReMap; + while (!true) + { + // debugger wait + Sleep(1000); + } + for (const auto& it : osLevelShortcutReMapCopy) { ShortcutControl::AddNewShortcutControlRow(shortcutTable, keyboardRemapControlObjects, it.first, it.second.targetShortcut); diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditorHelpers.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditorHelpers.cpp index e21f0c9aa914..d2c8df204a41 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditorHelpers.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditorHelpers.cpp @@ -52,6 +52,11 @@ namespace EditorHelpers // Function to return true if the shortcut is valid. A valid shortcut has atleast one modifier, as well as an action key bool IsValidShortcut(Shortcut shortcut) { + if (shortcut.isRunProgram) + { + return true; + } + if (shortcut.actionKey != NULL) { if (shortcut.winKey != ModifierKey::Disabled || shortcut.ctrlKey != ModifierKey::Disabled || shortcut.altKey != ModifierKey::Disabled || shortcut.shiftKey != ModifierKey::Disabled) diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyDropDownControl.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyDropDownControl.cpp index 39a7bb2aa321..8f029af53b11 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyDropDownControl.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyDropDownControl.cpp @@ -87,7 +87,7 @@ void KeyDropDownControl::SetDefaultProperties(bool isShortcut, bool renderDisabl auto child0 = Media::VisualTreeHelper::GetChild(combo, 0); if (!child0) return; - + auto grid = child0.as(); if (!grid) return; @@ -95,7 +95,7 @@ void KeyDropDownControl::SetDefaultProperties(bool isShortcut, bool renderDisabl auto& gridChildren = grid.Children(); if (!gridChildren) return; - + gridChildren.Append(warningTip); }); @@ -432,7 +432,7 @@ void KeyDropDownControl::AddShortcutToControl(Shortcut shortcut, StackPanel tabl // Remove references to the old drop down objects to destroy them keyDropDownControlObjects.clear(); std::vector shortcutKeyCodes = shortcut.GetKeyCodes(); - if (shortcutKeyCodes.size() != 0) + if (shortcutKeyCodes.size() != 0 || shortcut.isRunProgram) { bool ignoreWarning = false; diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyboardManagerEditorStrings.h b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyboardManagerEditorStrings.h index 360e9fe0bc1e..d64207540256 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyboardManagerEditorStrings.h +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/KeyboardManagerEditorStrings.h @@ -22,6 +22,11 @@ namespace KeyboardManagerEditorStrings return GET_RESOURCE_STRING(IDS_MAPPING_TYPE_DROPDOWN_KEY_SHORTCUT); } + inline std::wstring MappingTypeRunProgram() + { + return GET_RESOURCE_STRING(IDS_MAPPING_TYPE_DROPDOWN_RUN_PROGRAM); + } + // Function to return the error message winrt::hstring GetErrorMessage(ShortcutErrorType errorType); } diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/ShortcutControl.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/ShortcutControl.cpp index 4091c4e4d2d4..19a06c8cc276 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/ShortcutControl.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/ShortcutControl.cpp @@ -122,14 +122,17 @@ void ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, std::vectorGetShortcutControl(); target.Width(EditorConstants::ShortcutTargetColumnWidth); + // add shortcut type choice auto typeCombo = ComboBox(); typeCombo.Width(EditorConstants::RemapTableDropDownWidth); typeCombo.Items().Append(winrt::box_value(KeyboardManagerEditorStrings::MappingTypeKeyShortcut())); typeCombo.Items().Append(winrt::box_value(KeyboardManagerEditorStrings::MappingTypeText())); + typeCombo.Items().Append(winrt::box_value(KeyboardManagerEditorStrings::MappingTypeRunProgram())); auto controlStackPanel = keyboardRemapControlObjects.back()[1]->shortcutControlLayout.as(); auto firstLineStackPanel = keyboardRemapControlObjects.back()[1]->keyComboAndSelectStackPanel.as(); firstLineStackPanel.Children().InsertAt(0, typeCombo); + // add textbox for when it's a text input auto textInput = TextBox(); auto textInputMargin = Windows::UI::Xaml::Thickness(); textInputMargin.Top = -EditorConstants::ShortcutTableDropDownSpacing; @@ -141,6 +144,7 @@ void ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, std::vector(); auto text = textbox.Text(); @@ -154,26 +158,100 @@ void ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, std::vectorshortcutDropDownVariableSizedWrapGrid.as(); - auto gridMargin = Windows::UI::Xaml::Thickness(); - gridMargin.Bottom = -EditorConstants::ShortcutTableDropDownSpacing; // compensate for a collapsed textInput - grid.Margin(gridMargin); - auto button = keyboardRemapControlObjects.back()[1]->typeShortcut.as