Refactor keycodes moving helper functions into the class
parent
4fb584b6c3
commit
ad34e2464b
|
|
@ -34,6 +34,18 @@ class Keycode:
|
|||
if masked:
|
||||
self.masked_keycodes.add(code)
|
||||
|
||||
@classmethod
|
||||
def find_outer_keycode(cls, code):
|
||||
"""
|
||||
Finds outer keycode, i.e. if it is masked like 0x5Fxx, just return the 0x5F00 portion
|
||||
"""
|
||||
if cls.is_mask(code):
|
||||
code = code & 0xFF00
|
||||
for keycode in KEYCODES:
|
||||
if keycode.code == code:
|
||||
return keycode
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def find_by_recorder_alias(cls, alias):
|
||||
return cls.recorder_alias_to_keycode.get(alias)
|
||||
|
|
@ -42,6 +54,41 @@ class Keycode:
|
|||
def find_by_qmk_id(cls, qmk_id):
|
||||
return cls.qmk_id_to_keycode.get(qmk_id)
|
||||
|
||||
@classmethod
|
||||
def is_mask(cls, code):
|
||||
return (code & 0xFF00) in cls.masked_keycodes
|
||||
|
||||
@classmethod
|
||||
def label(cls, code):
|
||||
keycode = cls.find_outer_keycode(code)
|
||||
if keycode is None:
|
||||
return "0x{:X}".format(code)
|
||||
return keycode.label
|
||||
|
||||
@classmethod
|
||||
def tooltip(cls, code):
|
||||
keycode = cls.find_outer_keycode(code)
|
||||
if keycode is None:
|
||||
return None
|
||||
tooltip = keycode.qmk_id
|
||||
if keycode.tooltip:
|
||||
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
||||
return tooltip
|
||||
|
||||
@classmethod
|
||||
def serialize(cls, qmk_id):
|
||||
# TODO
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def deserialize(cls, val):
|
||||
if isinstance(val, int):
|
||||
return val
|
||||
if "(" not in val and val in cls.qmk_id_to_keycode:
|
||||
return cls.qmk_id_to_keycode[val].code
|
||||
# TODO: process macro-like keycodes with () etc
|
||||
return 0
|
||||
|
||||
|
||||
K = Keycode
|
||||
|
||||
|
|
@ -446,37 +493,6 @@ KEYCODES = []
|
|||
K = None
|
||||
|
||||
|
||||
def find_keycode(code):
|
||||
if keycode_is_mask(code):
|
||||
code = code & 0xFF00
|
||||
|
||||
for keycode in KEYCODES:
|
||||
if keycode.code == code:
|
||||
return keycode
|
||||
return None
|
||||
|
||||
|
||||
def keycode_label(code):
|
||||
keycode = find_keycode(code)
|
||||
if keycode is None:
|
||||
return "0x{:X}".format(code)
|
||||
return keycode.label
|
||||
|
||||
|
||||
def keycode_tooltip(code):
|
||||
keycode = find_keycode(code)
|
||||
if keycode is None:
|
||||
return None
|
||||
tooltip = keycode.qmk_id
|
||||
if keycode.tooltip:
|
||||
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
||||
return tooltip
|
||||
|
||||
|
||||
def keycode_is_mask(code):
|
||||
return (code & 0xFF00) in Keycode.masked_keycodes
|
||||
|
||||
|
||||
def recreate_keycodes():
|
||||
""" Regenerates global KEYCODES array """
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from PyQt5.QtCore import Qt
|
|||
from any_keycode_dialog import AnyKeycodeDialog
|
||||
from basic_editor import BasicEditor
|
||||
from keyboard_widget import KeyboardWidget, EncoderWidget
|
||||
from keycodes import recreate_keyboard_keycodes, find_keycode, keycode_label, keycode_tooltip, keycode_is_mask
|
||||
from keycodes import recreate_keyboard_keycodes, Keycode
|
||||
from keymaps import KEYMAPS
|
||||
from square_button import SquareButton
|
||||
from tabbed_keycodes import TabbedKeycodes
|
||||
|
|
@ -124,14 +124,14 @@ class KeymapEditor(BasicEditor):
|
|||
|
||||
def code_is_overriden(self, code):
|
||||
""" Check whether a country-specific keymap overrides a code """
|
||||
key = find_keycode(code)
|
||||
key = Keycode.find_outer_keycode(code)
|
||||
return key is not None and key.qmk_id in self.keymap_override
|
||||
|
||||
def get_label(self, code):
|
||||
""" Get label for a specific keycode """
|
||||
if self.code_is_overriden(code):
|
||||
return self.keymap_override[find_keycode(code).qmk_id]
|
||||
return keycode_label(code)
|
||||
return self.keymap_override[Keycode.find_outer_keycode(code).qmk_id]
|
||||
return Keycode.label(code)
|
||||
|
||||
def refresh_layer_display(self):
|
||||
""" Refresh text on key widgets to display data corresponding to current layer """
|
||||
|
|
@ -149,8 +149,8 @@ class KeymapEditor(BasicEditor):
|
|||
code = self.keyboard.encoder_layout[(self.current_layer, widget.desc.encoder_idx,
|
||||
widget.desc.encoder_dir)]
|
||||
text = self.get_label(code)
|
||||
tooltip = keycode_tooltip(code)
|
||||
mask = keycode_is_mask(code)
|
||||
tooltip = Keycode.tooltip(code)
|
||||
mask = Keycode.is_mask(code)
|
||||
mask_text = self.get_label(code & 0xFF)
|
||||
if mask:
|
||||
text = text.split("\n")[0]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
from keycodes import keycode_label
|
||||
from keycodes import Keycode
|
||||
|
||||
|
||||
class BasicKey:
|
||||
|
|
@ -13,7 +13,7 @@ class KeyDown(BasicKey):
|
|||
self.keycode = keycode
|
||||
|
||||
def __repr__(self):
|
||||
return "Down({})".format(keycode_label(self.keycode.code))
|
||||
return "Down({})".format(Keycode.label(self.keycode.code))
|
||||
|
||||
def __eq__(self, other):
|
||||
return isinstance(other, KeyDown) and other.keycode == self.keycode
|
||||
|
|
@ -25,7 +25,7 @@ class KeyUp(BasicKey):
|
|||
self.keycode = keycode
|
||||
|
||||
def __repr__(self):
|
||||
return "Up({})".format(keycode_label(self.keycode.code))
|
||||
return "Up({})".format(Keycode.label(self.keycode.code))
|
||||
|
||||
def __eq__(self, other):
|
||||
return isinstance(other, KeyUp) and other.keycode == self.keycode
|
||||
|
|
@ -37,7 +37,7 @@ class KeyTap(BasicKey):
|
|||
self.keycode = keycode
|
||||
|
||||
def __repr__(self):
|
||||
return "Tap({})".format(keycode_label(self.keycode.code))
|
||||
return "Tap({})".format(Keycode.label(self.keycode.code))
|
||||
|
||||
def __eq__(self, other):
|
||||
return isinstance(other, KeyTap) and other.keycode == self.keycode
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from PyQt5.QtWidgets import QPushButton, QGridLayout, QHBoxLayout, QToolButton,
|
|||
QTabWidget, QWidget, QLabel, QMenu, QScrollArea, QFrame
|
||||
|
||||
from basic_editor import BasicEditor
|
||||
from keycodes import find_keycode
|
||||
from keycodes import Keycode
|
||||
from macro_action import ActionText, ActionTap, ActionDown, ActionUp, SS_TAP_CODE, SS_DOWN_CODE, SS_UP_CODE
|
||||
from macro_key import KeyString, KeyDown, KeyUp, KeyTap
|
||||
from macro_line import MacroLine
|
||||
|
|
@ -154,7 +154,7 @@ class MacroTab(QVBoxLayout):
|
|||
# map integer values to qmk keycodes
|
||||
keycodes = []
|
||||
for code in s[1]:
|
||||
keycode = find_keycode(code)
|
||||
keycode = Keycode.find_outer_keycode(code)
|
||||
if keycode:
|
||||
keycodes.append(keycode)
|
||||
cls = {SS_TAP_CODE: ActionTap, SS_DOWN_CODE: ActionDown, SS_UP_CODE: ActionUp}[s[0]]
|
||||
|
|
@ -164,7 +164,7 @@ class MacroTab(QVBoxLayout):
|
|||
self.changed.emit()
|
||||
|
||||
def on_tap_enter(self):
|
||||
self.add_action(ActionTap(self.container, [find_keycode(0x28)]))
|
||||
self.add_action(ActionTap(self.container, [Keycode.find_by_qmk_id("KC_ENTER")]))
|
||||
|
||||
def pre_record(self):
|
||||
self.btn_record.hide()
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ from PyQt5.QtGui import QPalette
|
|||
|
||||
from constants import KEYCODE_BTN_RATIO
|
||||
from flowlayout import FlowLayout
|
||||
from keycodes import keycode_tooltip, KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_QUANTUM, \
|
||||
KEYCODES_BACKLIGHT, KEYCODES_MEDIA, KEYCODES_SPECIAL, KEYCODES_SHIFTED, KEYCODES_USER
|
||||
from keycodes import KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_QUANTUM, \
|
||||
KEYCODES_BACKLIGHT, KEYCODES_MEDIA, KEYCODES_SPECIAL, KEYCODES_SHIFTED, KEYCODES_USER, Keycode
|
||||
from keymaps import KEYMAPS
|
||||
from square_button import SquareButton
|
||||
from util import tr
|
||||
|
|
@ -78,7 +78,7 @@ class TabbedKeycodes(QTabWidget):
|
|||
for keycode in keycodes:
|
||||
btn = SquareButton()
|
||||
btn.setRelSize(KEYCODE_BTN_RATIO)
|
||||
btn.setToolTip(keycode_tooltip(keycode.code))
|
||||
btn.setToolTip(Keycode.tooltip(keycode.code))
|
||||
btn.clicked.connect(lambda st, k=keycode: self.keycode_changed.emit(k.code))
|
||||
btn.keycode = keycode
|
||||
layout.addWidget(btn)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
import unittest
|
||||
|
||||
from keycodes import Keycode
|
||||
|
||||
|
||||
class TestKeycode(unittest.TestCase):
|
||||
|
||||
def test_serialize(self):
|
||||
print(Keycode.serialize(0x100))
|
||||
print(Keycode.deserialize("KC_A"))
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
import unittest
|
||||
|
||||
from keycodes import find_keycode
|
||||
from keycodes import Keycode
|
||||
from macro_key import KeyDown, KeyTap, KeyUp, KeyString
|
||||
from macro_optimizer import remove_repeats, replace_with_tap, replace_with_string
|
||||
|
||||
KC_A = find_keycode(0x04)
|
||||
KC_B = find_keycode(0x05)
|
||||
KC_C = find_keycode(0x06)
|
||||
KC_A = Keycode.find_by_qmk_id("KC_A")
|
||||
KC_B = Keycode.find_by_qmk_id("KC_B")
|
||||
KC_C = Keycode.find_by_qmk_id("KC_C")
|
||||
|
||||
|
||||
class TestMacro(unittest.TestCase):
|
||||
|
|
|
|||
Loading…
Reference in New Issue