From dd7986aaa9dd7994b73219772a4169db879cf3ac Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 21 Jun 2022 12:31:38 -0700 Subject: [PATCH] Improved handling of conflict of key chord prefix and one-key command --- IDE/src/Settings.bf | 2 +- IDE/src/ui/SettingsDialog.bf | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/IDE/src/Settings.bf b/IDE/src/Settings.bf index aee80420..5e4ab36e 100644 --- a/IDE/src/Settings.bf +++ b/IDE/src/Settings.bf @@ -953,7 +953,7 @@ namespace IDE curCmdMap = (*valuePtr) as CommandMap; if (curCmdMap == null) { - curCmdMap.FailValues.Add(ideCommand); + gApp.OutputLineSmart("ERROR: The same key is bound for '{0}' and as part of a key chord", entry.mCommand); break; } } diff --git a/IDE/src/ui/SettingsDialog.bf b/IDE/src/ui/SettingsDialog.bf index 8c4e9c93..e7e1da9a 100644 --- a/IDE/src/ui/SettingsDialog.bf +++ b/IDE/src/ui/SettingsDialog.bf @@ -221,6 +221,30 @@ namespace IDE.ui } } + // Do chord prefix search + for (var propEntries in mPropPage.mPropEntries.Values) + { + var propEntry = propEntries[0]; + let keyEntry = (KeyEntry)propEntry.mTarget; + let origKeys = propEntry.mCurValue.Get>(); + var keys = scope List(origKeys.GetEnumerator()); + while (keys.Count > 1) + { + keys.PopBack(); + let keyEntryStr = scope String(); + KeyState.ToString(keys, keyEntryStr); + keyEntryStr.Append(" "); + CommandContextToString(keyEntry.mContextFlags, keyEntryStr); + + if (mappedEntries.TryGet(keyEntryStr, var keyPtr, var valuePtr)) + { + let other = valuePtr; + other.mHasConflict = true; + keyEntry.mHasConflict = true; + } + } + } + for (let keyEntryStr in mappedEntries.Keys) delete keyEntryStr;