Skip to content

Commit

Permalink
Merge pull request #1656 from dgelessus/fix_secondary_key_binding_opt…
Browse files Browse the repository at this point in the history
…ions

Fix Key Map options not saving secondary key bindings
  • Loading branch information
Hoikas authored Jan 27, 2025
2 parents 4b5c2b4 + 976d675 commit 3c9d64e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 32 deletions.
30 changes: 12 additions & 18 deletions Scripts/Python/plasma/Plasma.py
Original file line number Diff line number Diff line change
Expand Up @@ -5355,9 +5355,8 @@ def __init__(self):
"""None"""
pass

def bindKey(self):
"""Params key1,key2,action
Bind keys to an action"""
def bindKey(self, key1, key2, action):
"""Bind keys to an action"""
pass

def bindKeyToConsoleCommand(self,keyStr1, command):
Expand All @@ -5376,37 +5375,32 @@ def convertCharToVKey(self,charString):
"""Convert char string to virtual key"""
pass

def convertControlCodeToString(self):
"""Params controlCode
Convert control code to character string"""
def convertControlCodeToString(self, controlCode):
"""Convert control code to character string"""
pass

def convertVKeyToChar(self,virtualKey,flags):
"""Convert virtual key and shift flags to string"""
pass

def getBindingFlags1(self):
"""Params controlCode
Returns modifier flags for controlCode"""
def getBindingFlags1(self, controlCode):
"""Returns modifier flags for controlCode"""
pass

def getBindingFlags2(self):
"""Params controlCode
Returns modifier flags for controlCode"""
def getBindingFlags2(self, controlCode):
"""Returns modifier flags for controlCode"""
pass

def getBindingFlagsConsole(self,command):
"""Returns modifier flags for the console command mapping"""
pass

def getBindingKey1(self):
"""Params controlCode
Returns key code for controlCode"""
def getBindingKey1(self, controlCode):
"""Returns key code for controlCode"""
pass

def getBindingKey2(self):
"""Params controlCode
Returns key code for controlCode"""
def getBindingKey2(self, controlCode):
"""Returns key code for controlCode"""
pass

def getBindingKeyConsole(self,command):
Expand Down
23 changes: 15 additions & 8 deletions Scripts/Python/xOptionsMenu.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,6 @@
kKMEditLine16Row1 = 315
kKMEditLine17Row1 = 316
kKMEditLine18Row1 = 317
# these MUST be 100 more than the above constants
kKMEditLine1Row2 = 400
kKMEditLine2Row2 = 401
kKMEditLine3Row2 = 402
Expand Down Expand Up @@ -254,7 +253,7 @@
#

class _KeyLine(NamedTuple):
controlCode: Union[str, int, None]
controlCode: Union[int, str, None]
singlePlayer: bool
multiPlayer: bool

Expand Down Expand Up @@ -322,8 +321,6 @@ class _KeyLine(NamedTuple):
"Game.KICreateMarker": ("F7", "(unmapped)"),
}

kControlCodes = tuple(kDefaultControlCodeBinds.keys())

kVideoQuality = ["Low", "Medium", "High", "Ultra"]
kVideoTextureQuality = ["Low", "Medium", "High"]
kVideoAntiAliasing = {"0": 0, "2": 1, "4": 2, "6": 3}
Expand Down Expand Up @@ -699,11 +696,22 @@ def OnGUINotify(self,id,control,event):
if kmID == kKMOkBtn:
KeyMapDlg.dialog.hide()
elif kmID in gKM1ControlCodesRow1 or kmID in gKM1ControlCodesRow2:
try:
keyLine = gKM1ControlCodesRow1[kmID]
isPrimary = True
except KeyError:
keyLine = gKM1ControlCodesRow2[kmID]
isPrimary = False

if keyLine.controlCode is None:
PtDebugPrint(f"Missing control code definition for ID {kmID}")
return

self.ISetKeyMapping(
kmID - 300,
keyLine.controlCode,
control.getLastKeyCaptured(),
control.getLastModifiersCaptured(),
kmID in gKM1ControlCodesRow1
isPrimary
)
KeyMapDlg.dialog.noFocus()
self.IShowMappedKeys(KeyMapDlg.dialog, gKM1ControlCodesRow1, gKM1ControlCodesRow2)
Expand Down Expand Up @@ -1806,12 +1814,11 @@ def IGetBoundKey(self, controlCode: Union[int, str], keyIdx: int = 0) -> str:
else:
raise ValueError(f"{keyIdx=}")

def ISetKeyMapping(self, controlCodeId: int, vkey: int, modifiers: int, isPrimary: bool) -> None:
def ISetKeyMapping(self, controlCode: Union[int, str], vkey: int, modifiers: int, isPrimary: bool) -> None:
km = ptKeyMap()
newKeyStr = km.convertVKeyToChar(vkey, modifiers)

# If this is the same key as before, unmap the binding.
controlCode = kControlCodes[controlCodeId]
if self.IGetBoundKey(controlCode, keyIdx=0 if isPrimary else 1) == newKeyStr:
newKeyStr = "(unmapped)"

Expand Down
12 changes: 6 additions & 6 deletions Sources/Plasma/FeatureLib/pfPython/pyKeyMapGlue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,12 +212,12 @@ PYTHON_START_METHODS_TABLE(ptKeyMap)
PYTHON_METHOD(ptKeyMap, convertCharToVKey, "Params: charString\nConvert char string to virtual key"),
PYTHON_METHOD(ptKeyMap, convertCharToFlags, "Params: charString\nConvert char string to flags"),
PYTHON_METHOD(ptKeyMap, convertCharToControlCode, "Params: controlCodeString\nConvert string version of control code to number"),
PYTHON_METHOD(ptKeyMap, convertControlCodeToString, "Params controlCode\nConvert control code to character string"),
PYTHON_METHOD(ptKeyMap, bindKey, "Params key1,key2,action\nBind keys to an action"),
PYTHON_METHOD(ptKeyMap, getBindingKey1, "Params controlCode\nReturns key code for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingFlags1, "Params controlCode\nReturns modifier flags for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingKey2, "Params controlCode\nReturns key code for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingFlags2, "Params controlCode\nReturns modifier flags for controlCode"),
PYTHON_METHOD(ptKeyMap, convertControlCodeToString, "Params: controlCode\nConvert control code to character string"),
PYTHON_METHOD(ptKeyMap, bindKey, "Params: key1,key2,action\nBind keys to an action"),
PYTHON_METHOD(ptKeyMap, getBindingKey1, "Params: controlCode\nReturns key code for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingFlags1, "Params: controlCode\nReturns modifier flags for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingKey2, "Params: controlCode\nReturns key code for controlCode"),
PYTHON_METHOD(ptKeyMap, getBindingFlags2, "Params: controlCode\nReturns modifier flags for controlCode"),
PYTHON_METHOD(ptKeyMap, bindKeyToConsoleCommand, "Params: keyStr1, command\nBinds key to console command"),
PYTHON_METHOD(ptKeyMap, getBindingKeyConsole, "Params: command\nReturns key for console command mapping"),
PYTHON_METHOD(ptKeyMap, getBindingFlagsConsole, "Params: command\nReturns modifier flags for the console command mapping"),
Expand Down

0 comments on commit 3c9d64e

Please sign in to comment.