[KBM] Convert RemapBufferRow to a struct with descriptive field names (#32545)

Use struct for RemapBufferRow

Co-authored-by: Stefan Markovic <stefan@janeasystems.com>
This commit is contained in:
Masaru Iritani
2024-08-15 17:05:16 +09:00
committed by GitHub
parent 67d99a8377
commit 2979dc7d15
8 changed files with 87 additions and 81 deletions

View File

@@ -29,9 +29,9 @@ namespace BufferValidationHelpers
if (selectedKeyCode != -1) if (selectedKeyCode != -1)
{ {
// Check if the value being set is the same as the other column // Check if the value being set is the same as the other column
if (remapBuffer[rowIndex].first[std::abs(colIndex - 1)].index() == 0) if (remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)].index() == 0)
{ {
DWORD otherColumnKeyCode = std::get<DWORD>(remapBuffer[rowIndex].first[std::abs(colIndex - 1)]); DWORD otherColumnKeyCode = std::get<DWORD>(remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)]);
if (otherColumnKeyCode == selectedKeyCode || IsKeyRemappingToItsCombinedKey(selectedKeyCode, otherColumnKeyCode)) if (otherColumnKeyCode == selectedKeyCode || IsKeyRemappingToItsCombinedKey(selectedKeyCode, otherColumnKeyCode))
{ {
errorType = ShortcutErrorType::MapToSameKey; errorType = ShortcutErrorType::MapToSameKey;
@@ -47,9 +47,9 @@ namespace BufferValidationHelpers
{ {
if (i != rowIndex) if (i != rowIndex)
{ {
if (remapBuffer[i].first[colIndex].index() == 0) if (remapBuffer[i].mapping[colIndex].index() == 0)
{ {
ShortcutErrorType result = EditorHelpers::DoKeysOverlap(std::get<DWORD>(remapBuffer[i].first[colIndex]), selectedKeyCode); ShortcutErrorType result = EditorHelpers::DoKeysOverlap(std::get<DWORD>(remapBuffer[i].mapping[colIndex]), selectedKeyCode);
if (result != ShortcutErrorType::NoError) if (result != ShortcutErrorType::NoError)
{ {
errorType = result; errorType = result;
@@ -65,17 +65,17 @@ namespace BufferValidationHelpers
// If there is no error, set the buffer // If there is no error, set the buffer
if (errorType == ShortcutErrorType::NoError) if (errorType == ShortcutErrorType::NoError)
{ {
remapBuffer[rowIndex].first[colIndex] = (DWORD)selectedKeyCode; remapBuffer[rowIndex].mapping[colIndex] = (DWORD)selectedKeyCode;
} }
else else
{ {
remapBuffer[rowIndex].first[colIndex] = (DWORD)0; remapBuffer[rowIndex].mapping[colIndex] = (DWORD)0;
} }
} }
else else
{ {
// Reset to null if the key is not found // Reset to null if the key is not found
remapBuffer[rowIndex].first[colIndex] = (DWORD)0; remapBuffer[rowIndex].mapping[colIndex] = (DWORD)0;
} }
return errorType; return errorType;
@@ -245,9 +245,9 @@ namespace BufferValidationHelpers
if (tempShortcut.index() == 1) if (tempShortcut.index() == 1)
{ {
// If shortcut to shortcut // If shortcut to shortcut
if (remapBuffer[rowIndex].first[std::abs(colIndex - 1)].index() == 1) if (remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)].index() == 1)
{ {
auto& shortcut = std::get<Shortcut>(remapBuffer[rowIndex].first[std::abs(colIndex - 1)]); auto& shortcut = std::get<Shortcut>(remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)]);
if (shortcut == std::get<Shortcut>(tempShortcut) && EditorHelpers::IsValidShortcut(shortcut) && EditorHelpers::IsValidShortcut(std::get<Shortcut>(tempShortcut))) if (shortcut == std::get<Shortcut>(tempShortcut) && EditorHelpers::IsValidShortcut(shortcut) && EditorHelpers::IsValidShortcut(std::get<Shortcut>(tempShortcut)))
{ {
errorType = ShortcutErrorType::MapToSameShortcut; errorType = ShortcutErrorType::MapToSameShortcut;
@@ -259,9 +259,9 @@ namespace BufferValidationHelpers
else else
{ {
// If key to key // If key to key
if (remapBuffer[rowIndex].first[std::abs(colIndex - 1)].index() == 0) if (remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)].index() == 0)
{ {
DWORD otherColumnKeyCode = std::get<DWORD>(remapBuffer[rowIndex].first[std::abs(colIndex - 1)]); DWORD otherColumnKeyCode = std::get<DWORD>(remapBuffer[rowIndex].mapping[std::abs(colIndex - 1)]);
DWORD shortcutKeyCode = std::get<DWORD>(tempShortcut); DWORD shortcutKeyCode = std::get<DWORD>(tempShortcut);
if ((otherColumnKeyCode == shortcutKeyCode || IsKeyRemappingToItsCombinedKey(otherColumnKeyCode, shortcutKeyCode)) && otherColumnKeyCode != NULL && shortcutKeyCode != NULL) if ((otherColumnKeyCode == shortcutKeyCode || IsKeyRemappingToItsCombinedKey(otherColumnKeyCode, shortcutKeyCode)) && otherColumnKeyCode != NULL && shortcutKeyCode != NULL)
{ {
@@ -277,7 +277,7 @@ namespace BufferValidationHelpers
// Check if the key is already remapped to something else for the same target app // Check if the key is already remapped to something else for the same target app
for (int i = 0; i < remapBuffer.size(); i++) for (int i = 0; i < remapBuffer.size(); i++)
{ {
std::wstring currAppName = remapBuffer[i].second; std::wstring currAppName = remapBuffer[i].appName;
std::transform(currAppName.begin(), currAppName.end(), currAppName.begin(), towlower); std::transform(currAppName.begin(), currAppName.end(), currAppName.begin(), towlower);
if (i != rowIndex && currAppName == appName) if (i != rowIndex && currAppName == appName)
@@ -285,23 +285,23 @@ namespace BufferValidationHelpers
ShortcutErrorType result = ShortcutErrorType::NoError; ShortcutErrorType result = ShortcutErrorType::NoError;
if (!isHybridControl) if (!isHybridControl)
{ {
result = EditorHelpers::DoShortcutsOverlap(std::get<Shortcut>(remapBuffer[i].first[colIndex]), std::get<Shortcut>(tempShortcut)); result = EditorHelpers::DoShortcutsOverlap(std::get<Shortcut>(remapBuffer[i].mapping[colIndex]), std::get<Shortcut>(tempShortcut));
} }
else else
{ {
if (tempShortcut.index() == 0 && remapBuffer[i].first[colIndex].index() == 0) if (tempShortcut.index() == 0 && remapBuffer[i].mapping[colIndex].index() == 0)
{ {
if (std::get<DWORD>(tempShortcut) != NULL && std::get<DWORD>(remapBuffer[i].first[colIndex]) != NULL) if (std::get<DWORD>(tempShortcut) != NULL && std::get<DWORD>(remapBuffer[i].mapping[colIndex]) != NULL)
{ {
result = EditorHelpers::DoKeysOverlap(std::get<DWORD>(remapBuffer[i].first[colIndex]), std::get<DWORD>(tempShortcut)); result = EditorHelpers::DoKeysOverlap(std::get<DWORD>(remapBuffer[i].mapping[colIndex]), std::get<DWORD>(tempShortcut));
} }
} }
else if (tempShortcut.index() == 1 && remapBuffer[i].first[colIndex].index() == 1) else if (tempShortcut.index() == 1 && remapBuffer[i].mapping[colIndex].index() == 1)
{ {
auto& shortcut = std::get<Shortcut>(remapBuffer[i].first[colIndex]); auto& shortcut = std::get<Shortcut>(remapBuffer[i].mapping[colIndex]);
if (EditorHelpers::IsValidShortcut(std::get<Shortcut>(tempShortcut)) && EditorHelpers::IsValidShortcut(shortcut)) if (EditorHelpers::IsValidShortcut(std::get<Shortcut>(tempShortcut)) && EditorHelpers::IsValidShortcut(shortcut))
{ {
result = EditorHelpers::DoShortcutsOverlap(std::get<Shortcut>(remapBuffer[i].first[colIndex]), std::get<Shortcut>(tempShortcut)); result = EditorHelpers::DoShortcutsOverlap(std::get<Shortcut>(remapBuffer[i].mapping[colIndex]), std::get<Shortcut>(tempShortcut));
} }
} }
// Other scenarios not possible since key to shortcut is with key to key, and shortcut to key is with shortcut to shortcut // Other scenarios not possible since key to shortcut is with key to key, and shortcut to key is with shortcut to shortcut

View File

@@ -348,7 +348,7 @@ inline void CreateEditShortcutsWindowImpl(HINSTANCE hInst, KBMEditor::KeyboardMa
auto indexToDelete = -1; auto indexToDelete = -1;
for (int i = 0; i < ShortcutControl::shortcutRemapBuffer.size(); i++) for (int i = 0; i < ShortcutControl::shortcutRemapBuffer.size(); i++)
{ {
auto tempShortcut = std::get<Shortcut>(ShortcutControl::shortcutRemapBuffer[i].first[0]); auto tempShortcut = std::get<Shortcut>(ShortcutControl::shortcutRemapBuffer[i].mapping[0]);
if (tempShortcut.ToHstringVK() == keysForShortcutToEdit) if (tempShortcut.ToHstringVK() == keysForShortcutToEdit)
{ {
indexToDelete = i; indexToDelete = i;

View File

@@ -281,19 +281,19 @@ void KeyDropDownControl::SetSelectionHandler(StackPanel& table, StackPanel row,
std::vector<int32_t> selectedKeyCodes = GetSelectedCodesFromStackPanel(parent); std::vector<int32_t> selectedKeyCodes = GetSelectedCodesFromStackPanel(parent);
if (!isHybridControl) if (!isHybridControl)
{ {
std::get<Shortcut>(shortcutRemapBuffer[validationResult.second].first[colIndex]).SetKeyCodes(selectedKeyCodes); std::get<Shortcut>(shortcutRemapBuffer[validationResult.second].mapping[colIndex]).SetKeyCodes(selectedKeyCodes);
} }
else else
{ {
// If exactly one key is selected consider it to be a key remap // If exactly one key is selected consider it to be a key remap
if (GetNumberOfSelectedKeys(selectedKeyCodes) == 1) if (GetNumberOfSelectedKeys(selectedKeyCodes) == 1)
{ {
shortcutRemapBuffer[validationResult.second].first[colIndex] = (DWORD)selectedKeyCodes[0]; shortcutRemapBuffer[validationResult.second].mapping[colIndex] = (DWORD)selectedKeyCodes[0];
} }
else else
{ {
// Assign instead of setting the value in the buffer since the previous value may not be a Shortcut // Assign instead of setting the value in the buffer since the previous value may not be a Shortcut
shortcutRemapBuffer[validationResult.second].first[colIndex] = Shortcut(selectedKeyCodes); shortcutRemapBuffer[validationResult.second].mapping[colIndex] = Shortcut(selectedKeyCodes);
} }
} }
@@ -305,11 +305,11 @@ void KeyDropDownControl::SetSelectionHandler(StackPanel& table, StackPanel row,
std::transform(lowercaseDefAppName.begin(), lowercaseDefAppName.end(), lowercaseDefAppName.begin(), towlower); std::transform(lowercaseDefAppName.begin(), lowercaseDefAppName.end(), lowercaseDefAppName.begin(), towlower);
if (newText == lowercaseDefAppName) if (newText == lowercaseDefAppName)
{ {
shortcutRemapBuffer[validationResult.second].second = L""; shortcutRemapBuffer[validationResult.second].appName = L"";
} }
else else
{ {
shortcutRemapBuffer[validationResult.second].second = targetApp.Text().c_str(); shortcutRemapBuffer[validationResult.second].appName = targetApp.Text().c_str();
} }
} }
} }

View File

@@ -20,9 +20,9 @@ namespace LoadingAndSavingRemappingHelper
std::map<std::wstring, std::set<KeyShortcutTextUnion>> ogKeys; std::map<std::wstring, std::set<KeyShortcutTextUnion>> ogKeys;
for (int i = 0; i < remappings.size(); i++) for (int i = 0; i < remappings.size(); i++)
{ {
KeyShortcutTextUnion ogKey = remappings[i].first[0]; KeyShortcutTextUnion ogKey = remappings[i].mapping[0];
KeyShortcutTextUnion newKey = remappings[i].first[1]; KeyShortcutTextUnion newKey = remappings[i].mapping[1];
std::wstring appName = remappings[i].second; std::wstring appName = remappings[i].appName;
const bool ogKeyValidity = (ogKey.index() == 0 && std::get<DWORD>(ogKey) != NULL) || (ogKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(ogKey))); const bool ogKeyValidity = (ogKey.index() == 0 && std::get<DWORD>(ogKey) != NULL) || (ogKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(ogKey)));
const bool newKeyValidity = (newKey.index() == 0 && std::get<DWORD>(newKey) != NULL) || (newKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey))) || (newKey.index() == 2 && !std::get<std::wstring>(newKey).empty()); const bool newKeyValidity = (newKey.index() == 0 && std::get<DWORD>(newKey) != NULL) || (newKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey))) || (newKey.index() == 2 && !std::get<std::wstring>(newKey).empty());
@@ -58,8 +58,8 @@ namespace LoadingAndSavingRemappingHelper
for (int i = 0; i < remappings.size(); i++) for (int i = 0; i < remappings.size(); i++)
{ {
DWORD ogKey = std::get<DWORD>(remappings[i].first[0]); DWORD ogKey = std::get<DWORD>(remappings[i].mapping[0]);
KeyShortcutTextUnion newKey = remappings[i].first[1]; KeyShortcutTextUnion newKey = remappings[i].mapping[1];
const bool hasValidKeyRemapping = newKey.index() == 0 && std::get<DWORD>(newKey) != 0; const bool hasValidKeyRemapping = newKey.index() == 0 && std::get<DWORD>(newKey) != 0;
const bool hasValidShortcutRemapping = newKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey)); const bool hasValidShortcutRemapping = newKey.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey));
@@ -69,7 +69,7 @@ namespace LoadingAndSavingRemappingHelper
ogKeys.insert(ogKey); ogKeys.insert(ogKey);
// newKey should be added only if the target is a key // newKey should be added only if the target is a key
if (remappings[i].first[1].index() == 0) if (remappings[i].mapping[1].index() == 0)
{ {
newKeys.insert(std::get<DWORD>(newKey)); newKeys.insert(std::get<DWORD>(newKey));
} }
@@ -125,8 +125,8 @@ namespace LoadingAndSavingRemappingHelper
DWORD successfulKeyToTextRemapCount = 0; DWORD successfulKeyToTextRemapCount = 0;
for (int i = 0; i < remappings.size(); i++) for (int i = 0; i < remappings.size(); i++)
{ {
const DWORD originalKey = std::get<DWORD>(remappings[i].first[0]); const DWORD originalKey = std::get<DWORD>(remappings[i].mapping[0]);
KeyShortcutTextUnion newKey = remappings[i].first[1]; KeyShortcutTextUnion newKey = remappings[i].mapping[1];
if (originalKey != NULL && !(newKey.index() == 0 && std::get<DWORD>(newKey) == NULL) && !(newKey.index() == 1 && !EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey))) && !(newKey.index() == 2 && std::get<std::wstring>(newKey).empty())) if (originalKey != NULL && !(newKey.index() == 0 && std::get<DWORD>(newKey) == NULL) && !(newKey.index() == 1 && !EditorHelpers::IsValidShortcut(std::get<Shortcut>(newKey))) && !(newKey.index() == 2 && std::get<std::wstring>(newKey).empty()))
{ {
@@ -203,12 +203,12 @@ namespace LoadingAndSavingRemappingHelper
// Save the shortcuts that are valid and report if any of them were invalid // Save the shortcuts that are valid and report if any of them were invalid
for (int i = 0; i < remappings.size(); i++) for (int i = 0; i < remappings.size(); i++)
{ {
Shortcut originalShortcut = std::get<Shortcut>(remappings[i].first[0]); Shortcut originalShortcut = std::get<Shortcut>(remappings[i].mapping[0]);
KeyShortcutTextUnion newShortcut = remappings[i].first[1]; KeyShortcutTextUnion newShortcut = remappings[i].mapping[1];
if (EditorHelpers::IsValidShortcut(originalShortcut) && ((newShortcut.index() == 0 && std::get<DWORD>(newShortcut) != NULL) || (newShortcut.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newShortcut))) || (newShortcut.index() == 2 && !std::get<std::wstring>(newShortcut).empty()))) if (EditorHelpers::IsValidShortcut(originalShortcut) && ((newShortcut.index() == 0 && std::get<DWORD>(newShortcut) != NULL) || (newShortcut.index() == 1 && EditorHelpers::IsValidShortcut(std::get<Shortcut>(newShortcut))) || (newShortcut.index() == 2 && !std::get<std::wstring>(newShortcut).empty())))
{ {
if (remappings[i].second == L"") if (remappings[i].appName == L"")
{ {
bool result = mappingConfiguration.AddOSLevelShortcut(originalShortcut, newShortcut); bool result = mappingConfiguration.AddOSLevelShortcut(originalShortcut, newShortcut);
if (result) if (result)
@@ -225,7 +225,7 @@ namespace LoadingAndSavingRemappingHelper
} }
else else
{ {
bool result = mappingConfiguration.AddAppSpecificShortcut(remappings[i].second, originalShortcut, newShortcut); bool result = mappingConfiguration.AddAppSpecificShortcut(remappings[i].appName, originalShortcut, newShortcut);
if (result) if (result)
{ {
if (newShortcut.index() == 0) if (newShortcut.index() == 0)

View File

@@ -217,7 +217,7 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
return; return;
} }
shortcutRemapBuffer[rowIndex].first[1] = text.c_str(); shortcutRemapBuffer[rowIndex].mapping[1] = text.c_str();
}); });
const bool textSelected = newKeys.index() == 2; const bool textSelected = newKeys.index() == 2;
@@ -338,7 +338,7 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
KeyDropDownControl::ValidateShortcutFromDropDownList(parent, row, keyboardRemapControlObjects[rowIndex][1]->shortcutDropDownVariableSizedWrapGrid.as<VariableSizedWrapGrid>(), 1, ShortcutControl::shortcutRemapBuffer, keyboardRemapControlObjects[rowIndex][1]->keyDropDownControlObjects, targetAppTextBox, true, false); KeyDropDownControl::ValidateShortcutFromDropDownList(parent, row, keyboardRemapControlObjects[rowIndex][1]->shortcutDropDownVariableSizedWrapGrid.as<VariableSizedWrapGrid>(), 1, ShortcutControl::shortcutRemapBuffer, keyboardRemapControlObjects[rowIndex][1]->keyDropDownControlObjects, targetAppTextBox, true, false);
// Reset the buffer based on the selected drop down items // Reset the buffer based on the selected drop down items
std::get<Shortcut>(shortcutRemapBuffer[rowIndex].first[0]).SetKeyCodes(KeyDropDownControl::GetSelectedCodesFromStackPanel(keyboardRemapControlObjects[rowIndex][0]->shortcutDropDownVariableSizedWrapGrid.as<VariableSizedWrapGrid>())); std::get<Shortcut>(shortcutRemapBuffer[rowIndex].mapping[0]).SetKeyCodes(KeyDropDownControl::GetSelectedCodesFromStackPanel(keyboardRemapControlObjects[rowIndex][0]->shortcutDropDownVariableSizedWrapGrid.as<VariableSizedWrapGrid>()));
// second column is a hybrid column // second column is a hybrid column
const bool regularShortcut = actionTypeCombo.SelectedIndex() == 0; const bool regularShortcut = actionTypeCombo.SelectedIndex() == 0;
@@ -348,7 +348,7 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
if (textSelected) if (textSelected)
{ {
shortcutRemapBuffer[rowIndex].first[1] = unicodeTextKeysInput.Text().c_str(); shortcutRemapBuffer[rowIndex].mapping[1] = unicodeTextKeysInput.Text().c_str();
} }
else else
{ {
@@ -359,14 +359,14 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
// If exactly one key is selected consider it to be a key remap // If exactly one key is selected consider it to be a key remap
if (selectedKeyCodes.size() == 1) if (selectedKeyCodes.size() == 1)
{ {
shortcutRemapBuffer[rowIndex].first[1] = (DWORD)selectedKeyCodes[0]; shortcutRemapBuffer[rowIndex].mapping[1] = (DWORD)selectedKeyCodes[0];
} }
else else
{ {
Shortcut tempShortcut; Shortcut tempShortcut;
tempShortcut.SetKeyCodes(selectedKeyCodes); tempShortcut.SetKeyCodes(selectedKeyCodes);
// Assign instead of setting the value in the buffer since the previous value may not be a Shortcut // Assign instead of setting the value in the buffer since the previous value may not be a Shortcut
shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
} }
} }
else if (runProgram) else if (runProgram)
@@ -388,7 +388,7 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
tempShortcut.alreadyRunningAction = static_cast<Shortcut::ProgramAlreadyRunningAction>(runProgramAlreadyRunningAction.SelectedIndex()); tempShortcut.alreadyRunningAction = static_cast<Shortcut::ProgramAlreadyRunningAction>(runProgramAlreadyRunningAction.SelectedIndex());
// Assign instead of setting the value in the buffer since the previous value may not be a Shortcut // Assign instead of setting the value in the buffer since the previous value may not be a Shortcut
shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
} }
else if (openUri) else if (openUri)
{ {
@@ -401,11 +401,11 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
std::transform(lowercaseDefAppName.begin(), lowercaseDefAppName.end(), lowercaseDefAppName.begin(), towlower); std::transform(lowercaseDefAppName.begin(), lowercaseDefAppName.end(), lowercaseDefAppName.begin(), towlower);
if (newText == lowercaseDefAppName) if (newText == lowercaseDefAppName)
{ {
shortcutRemapBuffer[rowIndex].second = L""; shortcutRemapBuffer[rowIndex].appName = L"";
} }
else else
{ {
shortcutRemapBuffer[rowIndex].second = targetAppTextBox.Text().c_str(); shortcutRemapBuffer[rowIndex].appName = targetAppTextBox.Text().c_str();
} }
// To set the accessible name of the target app text box when focus is lost // To set the accessible name of the target app text box when focus is lost
@@ -517,7 +517,7 @@ ShortcutControl& ShortcutControl::AddNewShortcutControlRow(StackPanel& parent, s
} }
else if (newKeys.index() == 2) else if (newKeys.index() == 2)
{ {
shortcutRemapBuffer.back().first[1] = std::get<std::wstring>(newKeys); shortcutRemapBuffer.back().mapping[1] = std::get<std::wstring>(newKeys);
const auto& remapControl = keyboardRemapControlObjects[keyboardRemapControlObjects.size() - 1][1]; const auto& remapControl = keyboardRemapControlObjects[keyboardRemapControlObjects.size() - 1][1];
actionTypeCombo.SelectedIndex(1); actionTypeCombo.SelectedIndex(1);
unicodeTextKeysInput.Text(std::get<std::wstring>(newKeys)); unicodeTextKeysInput.Text(std::get<std::wstring>(newKeys));
@@ -571,7 +571,7 @@ StackPanel SetupOpenURIControls(StackPanel& parent, StackPanel& row, Shortcut& s
Shortcut tempShortcut; Shortcut tempShortcut;
tempShortcut.operationType = Shortcut::OperationType::OpenURI; tempShortcut.operationType = Shortcut::OperationType::OpenURI;
tempShortcut.uriToOpen = ShortcutControl::RemoveExtraQuotes(uriTextBox.Text().c_str()); tempShortcut.uriToOpen = ShortcutControl::RemoveExtraQuotes(uriTextBox.Text().c_str());
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
_controlStackPanel.Children().Append(openUriStackPanel); _controlStackPanel.Children().Append(openUriStackPanel);
@@ -689,7 +689,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
} }
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(row, tempShortcut, rowIndex); CreateNewTempShortcut(row, tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
runProgramArgsForProgramInput.TextChanged([parent, row](winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::TextChangedEventArgs const& e) mutable { runProgramArgsForProgramInput.TextChanged([parent, row](winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::TextChangedEventArgs const& e) mutable {
@@ -701,7 +701,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(row, tempShortcut, rowIndex); CreateNewTempShortcut(row, tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
runProgramStartInDirInput.TextChanged([parent, row](winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::TextChangedEventArgs const& e) mutable { runProgramStartInDirInput.TextChanged([parent, row](winrt::Windows::Foundation::IInspectable const& sender, winrt::Windows::UI::Xaml::Controls::TextChangedEventArgs const& e) mutable {
@@ -718,7 +718,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(row, tempShortcut, rowIndex); CreateNewTempShortcut(row, tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
runProgramAlreadyRunningAction.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) { runProgramAlreadyRunningAction.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) {
@@ -735,7 +735,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex); CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
runProgramElevationTypeCombo.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) { runProgramElevationTypeCombo.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) {
@@ -751,7 +751,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
} }
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex); CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
runProgramStartWindow.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) { runProgramStartWindow.SelectionChanged([parent, row](winrt::Windows::Foundation::IInspectable const&, SelectionChangedEventArgs const&) {
@@ -769,7 +769,7 @@ StackPanel SetupRunProgramControls(StackPanel& parent, StackPanel& row, Shortcut
Shortcut tempShortcut; Shortcut tempShortcut;
CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex); CreateNewTempShortcut(static_cast<StackPanel>(row), tempShortcut, rowIndex);
ShortcutControl::shortcutRemapBuffer[rowIndex].first[1] = tempShortcut; ShortcutControl::shortcutRemapBuffer[rowIndex].mapping[1] = tempShortcut;
}); });
pickFileBtn.Click([&, parent, row](winrt::Windows::Foundation::IInspectable const& sender, RoutedEventArgs const&) { pickFileBtn.Click([&, parent, row](winrt::Windows::Foundation::IInspectable const& sender, RoutedEventArgs const&) {
@@ -943,17 +943,17 @@ void ShortcutControl::CreateDetectShortcutWindow(winrt::Windows::Foundation::IIn
{ {
if (colIndex == 0) if (colIndex == 0)
{ {
shortcut = std::get<Shortcut>(shortcutRemapBuffer[rowIndex].first[0]); shortcut = std::get<Shortcut>(shortcutRemapBuffer[rowIndex].mapping[0]);
} }
else else
{ {
if (shortcutRemapBuffer[rowIndex].first[1].index() != 1) if (shortcutRemapBuffer[rowIndex].mapping[1].index() != 1)
{ {
// not a shortcut, let's fix that. // not a shortcut, let's fix that.
Shortcut newShortcut; Shortcut newShortcut;
shortcutRemapBuffer[rowIndex].first[1] = newShortcut; shortcutRemapBuffer[rowIndex].mapping[1] = newShortcut;
} }
shortcut = std::get<Shortcut>(shortcutRemapBuffer[rowIndex].first[1]); shortcut = std::get<Shortcut>(shortcutRemapBuffer[rowIndex].mapping[1]);
} }
if (!shortcut.IsEmpty() && shortcut.HasChord()) if (!shortcut.IsEmpty() && shortcut.HasChord())
@@ -964,7 +964,7 @@ void ShortcutControl::CreateDetectShortcutWindow(winrt::Windows::Foundation::IIn
} }
} }
//remapBuffer[rowIndex].first. //remapBuffer[rowIndex].mapping.
// ContentDialog for detecting shortcuts. This is the parent UI element. // ContentDialog for detecting shortcuts. This is the parent UI element.
ContentDialog detectShortcutBox; ContentDialog detectShortcutBox;

View File

@@ -72,7 +72,7 @@ SingleKeyRemapControl::SingleKeyRemapControl(StackPanel table, StackPanel row, c
return; return;
} }
singleKeyRemapBuffer[rowIndex].first[1] = text.c_str(); singleKeyRemapBuffer[rowIndex].mapping[1] = text.c_str();
}); });
auto typeCombo = ComboBox(); auto typeCombo = ComboBox();

View File

@@ -69,10 +69,10 @@ namespace RemappingUITests
// Assert that the element is validated and buffer is updated // Assert that the element is validated and buffer is updated
Assert::AreEqual(true, error == ShortcutErrorType::NoError); Assert::AreEqual(true, error == ShortcutErrorType::NoError);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].mapping[0]));
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].first[1])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].mapping[1]));
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[0]));
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[1])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a new row // Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a new row
@@ -89,8 +89,8 @@ namespace RemappingUITests
// Assert that the element is validated and buffer is updated // Assert that the element is validated and buffer is updated
Assert::AreEqual(true, error == ShortcutErrorType::NoError); Assert::AreEqual(true, error == ShortcutErrorType::NoError);
Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].first[0])); Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].mapping[0]));
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].first[1])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a valid key to key // Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a valid key to key
@@ -107,8 +107,8 @@ namespace RemappingUITests
// Assert that the element is validated and buffer is updated // Assert that the element is validated and buffer is updated
Assert::AreEqual(true, error == ShortcutErrorType::NoError); Assert::AreEqual(true, error == ShortcutErrorType::NoError);
Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].first[0])); Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].mapping[0]));
Assert::AreEqual((DWORD)0x41, std::get<DWORD>(remapBuffer[0].first[1])); Assert::AreEqual((DWORD)0x41, std::get<DWORD>(remapBuffer[0].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a valid key to shortcut // Test if the ValidateAndUpdateKeyBufferElement method is successful when setting a key to non-null in a valid key to shortcut
@@ -125,8 +125,8 @@ namespace RemappingUITests
// Assert that the element is validated and buffer is updated // Assert that the element is validated and buffer is updated
Assert::AreEqual(true, error == ShortcutErrorType::NoError); Assert::AreEqual(true, error == ShortcutErrorType::NoError);
Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].first[0])); Assert::AreEqual((DWORD)0x42, std::get<DWORD>(remapBuffer[0].mapping[0]));
Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[0].first[1])); Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[0].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column to the same value as the right column // Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column to the same value as the right column
@@ -143,8 +143,8 @@ namespace RemappingUITests
// Assert that the element is invalid and buffer is not updated // Assert that the element is invalid and buffer is not updated
Assert::AreEqual(true, error == ShortcutErrorType::MapToSameKey); Assert::AreEqual(true, error == ShortcutErrorType::MapToSameKey);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[0].mapping[0]));
Assert::AreEqual((DWORD)0x41, std::get<DWORD>(remapBuffer[0].first[1])); Assert::AreEqual((DWORD)0x41, std::get<DWORD>(remapBuffer[0].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to key row to the same value as in another row // Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to key row to the same value as in another row
@@ -162,8 +162,8 @@ namespace RemappingUITests
// Assert that the element is invalid and buffer is not updated // Assert that the element is invalid and buffer is not updated
Assert::AreEqual(true, error == ShortcutErrorType::SameKeyPreviouslyMapped); Assert::AreEqual(true, error == ShortcutErrorType::SameKeyPreviouslyMapped);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[0]));
Assert::AreEqual((DWORD)0x43, std::get<DWORD>(remapBuffer[1].first[1])); Assert::AreEqual((DWORD)0x43, std::get<DWORD>(remapBuffer[1].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to shortcut row to the same value as in another row // Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to shortcut row to the same value as in another row
@@ -181,8 +181,8 @@ namespace RemappingUITests
// Assert that the element is invalid and buffer is not updated // Assert that the element is invalid and buffer is not updated
Assert::AreEqual(true, error == ShortcutErrorType::SameKeyPreviouslyMapped); Assert::AreEqual(true, error == ShortcutErrorType::SameKeyPreviouslyMapped);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[0]));
Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[1].first[1])); Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[1].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to key row to a conflicting modifier with another row // Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to key row to a conflicting modifier with another row
@@ -200,8 +200,8 @@ namespace RemappingUITests
// Assert that the element is invalid and buffer is not updated // Assert that the element is invalid and buffer is not updated
Assert::AreEqual(true, error == ShortcutErrorType::ConflictingModifierKey); Assert::AreEqual(true, error == ShortcutErrorType::ConflictingModifierKey);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[0]));
Assert::AreEqual((DWORD)0x43, std::get<DWORD>(remapBuffer[1].first[1])); Assert::AreEqual((DWORD)0x43, std::get<DWORD>(remapBuffer[1].mapping[1]));
} }
// Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to shortcut row to a conflicting modifier with another row // Test if the ValidateAndUpdateKeyBufferElement method is unsuccessful when setting first column of a key to shortcut row to a conflicting modifier with another row
@@ -219,8 +219,8 @@ namespace RemappingUITests
// Assert that the element is invalid and buffer is not updated // Assert that the element is invalid and buffer is not updated
Assert::AreEqual(true, error == ShortcutErrorType::ConflictingModifierKey); Assert::AreEqual(true, error == ShortcutErrorType::ConflictingModifierKey);
Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].first[0])); Assert::AreEqual((DWORD)NULL, std::get<DWORD>(remapBuffer[1].mapping[0]));
Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[1].first[1])); Assert::AreEqual(true, Shortcut(std::vector<int32_t>{ VK_CONTROL, 0x41 }) == std::get<Shortcut>(remapBuffer[1].mapping[1]));
} }
// Test if the ValidateShortcutBufferElement method is successful and no drop down action is required on setting a column to null in a new or valid row // Test if the ValidateShortcutBufferElement method is successful and no drop down action is required on setting a column to null in a new or valid row

View File

@@ -67,7 +67,7 @@ public:
std::wstring runProgramArgs; std::wstring runProgramArgs;
std::wstring runProgramStartInDir; std::wstring runProgramStartInDir;
std::wstring uriToOpen; std::wstring uriToOpen;
ProgramAlreadyRunningAction alreadyRunningAction = ProgramAlreadyRunningAction::ShowWindow; ProgramAlreadyRunningAction alreadyRunningAction = ProgramAlreadyRunningAction::ShowWindow;
ElevationLevel elevationLevel = ElevationLevel::NonElevated; ElevationLevel elevationLevel = ElevationLevel::NonElevated;
OperationType operationType = OperationType::RemapShortcut; OperationType operationType = OperationType::RemapShortcut;
@@ -189,5 +189,11 @@ public:
using KeyShortcutTextUnion = std::variant<DWORD, Shortcut, std::wstring>; using KeyShortcutTextUnion = std::variant<DWORD, Shortcut, std::wstring>;
using RemapBufferItem = std::vector<KeyShortcutTextUnion>; using RemapBufferItem = std::vector<KeyShortcutTextUnion>;
using RemapBufferRow = std::pair<RemapBufferItem, std::wstring>;
struct RemapBufferRow
{
RemapBufferItem mapping{};
std::wstring appName{};
};
using RemapBuffer = std::vector<RemapBufferRow>; using RemapBuffer = std::vector<RemapBufferRow>;