From e52ac85a1bf945bdb79b487d0efea50e8b5b44bd Mon Sep 17 00:00:00 2001 From: Hao Liu Date: Thu, 6 Mar 2025 17:56:13 +0800 Subject: [PATCH] [FHL] Save Remapping Config and Data (#37787) * load URL remapping * Save Remapping Config and Data * update mock data for testing * fix app mapping * update xaml --- .../KeyboardManagerEditorLibraryWrapper.cpp | 26 ++++++ .../KeyboardManagerEditorLibraryWrapper.h | 4 + .../Helpers/Remapping.cs | 2 +- .../Interop/KeyboardManagerInterop.cs | 11 +++ .../Interop/KeyboardMappingService.cs | 22 +++++ .../KeyboardManagerEditorUI.csproj | 3 - .../Pages/Programs.xaml | 13 ++- .../Pages/Programs.xaml.cs | 2 +- .../Pages/Shortcuts.xaml.cs | 87 ++++++++++++++++++- .../Pages/Text.xaml.cs | 7 +- .../KeyboardManagerEditorUI/Pages/URLs.xaml | 7 +- .../Pages/URLs.xaml.cs | 67 +++++++++++++- .../Styles/InputControl.xaml.cs | 20 +++++ 13 files changed, 247 insertions(+), 24 deletions(-) diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.cpp index 0eeec07b29..63a66e631f 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.cpp @@ -495,6 +495,20 @@ bool GetShortcutRemapByType(void* config, int operationType, int index, Shortcut return mappingConfig->AddSingleKeyToTextRemap(static_cast(originalKey), text); } + bool AddSingleKeyToShortcutRemap(void* config, int originalKey, const wchar_t* targetKeys) + { + auto mappingConfig = static_cast(config); + + if (!targetKeys) + { + return false; + } + + Shortcut targetShortcut(targetKeys); + + return mappingConfig->AddSingleKeyRemap(static_cast(originalKey), targetShortcut); + } + bool AddShortcutRemap(void* config, const wchar_t* originalKeys, const wchar_t* targetKeys, @@ -527,6 +541,18 @@ bool GetShortcutRemapByType(void* config, int operationType, int index, Shortcut std::wstring name = layoutMap.GetKeyName(static_cast(keyCode)); wcsncpy_s(keyName, maxCount, name.c_str(), _TRUNCATE); } + + int GetKeyCodeFromName(const wchar_t* keyName) + { + if (keyName == nullptr) + { + return 0; + } + + LayoutMap layoutMap; + std::wstring name(keyName); + return static_cast(layoutMap.GetKeyFromName(name)); + } } // Test function to call the remapping helper function diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.h b/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.h index 0fe876d54d..3b2050b5fe 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.h +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibraryWrapper/KeyboardManagerEditorLibraryWrapper.h @@ -56,12 +56,16 @@ extern "C" __declspec(dllexport) bool AddSingleKeyRemap(void* config, int originalKey, int targetKey); __declspec(dllexport) bool AddSingleKeyToTextRemap(void* config, int originalKey, const wchar_t* text); + __declspec(dllexport) bool AddSingleKeyToShortcutRemap(void* config, + int originalKey, + const wchar_t* targetKeys); __declspec(dllexport) bool AddShortcutRemap(void* config, const wchar_t* originalKeys, const wchar_t* targetKeys, const wchar_t* targetApp); __declspec(dllexport) void GetKeyDisplayName(int keyCode, wchar_t* keyName, int maxCount); + __declspec(dllexport) int GetKeyCodeFromName(const wchar_t* keyName); __declspec(dllexport) void FreeString(wchar_t* str); } extern "C" __declspec(dllexport) bool CheckIfRemappingsAreValid(); diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs index 1f593177cc..97164a32e2 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Helpers/Remapping.cs @@ -18,7 +18,7 @@ namespace KeyboardManagerEditorUI.Helpers public bool IsAllApps { get; set; } = true; - public string AppName { get; set; } = "All apps"; + public string AppName { get; set; } = "All Apps"; public bool IsEnabled { get; set; } = true; } diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardManagerInterop.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardManagerInterop.cs index bb8521e643..205e9c861d 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardManagerInterop.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardManagerInterop.cs @@ -68,6 +68,13 @@ namespace KeyboardManagerEditorUI.Interop [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool AddSingleKeyRemap(IntPtr config, int originalKey, int targetKey); + [DllImport(DllName)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool AddSingleKeyToShortcutRemap( + IntPtr config, + int originalKey, + [MarshalAs(UnmanagedType.LPWStr)] string targetKeys); + [DllImport(DllName)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool AddShortcutRemap( @@ -76,6 +83,10 @@ namespace KeyboardManagerEditorUI.Interop [MarshalAs(UnmanagedType.LPWStr)] string targetKeys, [MarshalAs(UnmanagedType.LPWStr)] string targetApp); + [DllImport(DllName)] + internal static extern int GetKeyCodeFromName( + [MarshalAs(UnmanagedType.LPWStr)] string keyName); + [DllImport(DllName)] internal static extern void FreeString(IntPtr str); diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardMappingService.cs b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardMappingService.cs index 51c69d70b8..f3104f72b0 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardMappingService.cs +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Interop/KeyboardMappingService.cs @@ -129,8 +129,30 @@ namespace KeyboardManagerEditorUI.Interop return KeyboardManagerInterop.AddSingleKeyRemap(_configHandle, originalKey, targetKey); } + public bool AddSingleKeyMapping(int originalKey, string targetKeys) + { + if (string.IsNullOrEmpty(targetKeys)) + { + return false; + } + + if (!targetKeys.Contains(';') && int.TryParse(targetKeys, out int targetKey)) + { + return KeyboardManagerInterop.AddSingleKeyRemap(_configHandle, originalKey, targetKey); + } + else + { + return KeyboardManagerInterop.AddSingleKeyToShortcutRemap(_configHandle, originalKey, targetKeys); + } + } + public bool AddShortcutMapping(string originalKeys, string targetKeys, string targetApp = "") { + if (string.IsNullOrEmpty(originalKeys) || string.IsNullOrEmpty(targetKeys)) + { + return false; + } + return KeyboardManagerInterop.AddShortcutRemap(_configHandle, originalKeys, targetKeys, targetApp); } diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/KeyboardManagerEditorUI.csproj b/src/modules/keyboardmanager/KeyboardManagerEditorUI/KeyboardManagerEditorUI.csproj index 58f7a1e829..ce78901841 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/KeyboardManagerEditorUI.csproj +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/KeyboardManagerEditorUI.csproj @@ -55,9 +55,6 @@ - - - MSBuild:Compile diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/Programs.xaml b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/Programs.xaml index 1e5e2b4c86..e49c8cd836 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/Programs.xaml +++ b/src/modules/keyboardmanager/KeyboardManagerEditorUI/Pages/Programs.xaml @@ -119,8 +119,7 @@ Grid.Column="1" Orientation="Horizontal" Spacing="8"> - - + - - + + @@ -193,7 +192,7 @@ - +