Add dynamically-generated layer keycodes
parent
c1a1b93859
commit
bd1e167f85
|
|
@ -224,3 +224,28 @@ def keycode_tooltip(code):
|
|||
if keycode.tooltip:
|
||||
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
||||
return tooltip
|
||||
|
||||
def recreate_layer_keycodes(layers):
|
||||
""" Generates layer keycodes based on number of layers a keyboard provides """
|
||||
|
||||
def generate_keycodes_for_mask(label, mask):
|
||||
keycodes = []
|
||||
for layer in range(layers):
|
||||
lbl = "{}({})".format(label, layer)
|
||||
keycodes.append(Keycode(mask | layer, lbl, lbl))
|
||||
return keycodes
|
||||
|
||||
KEYCODES_LAYERS.clear()
|
||||
|
||||
if layers >= 4:
|
||||
KEYCODES_LAYERS.append(Keycode(0x5F10, "FN_MO13", "Fn1\n(Fn3)"))
|
||||
KEYCODES_LAYERS.append(Keycode(0x5F11, "FN_MO23", "Fn2\n(Fn3)"))
|
||||
|
||||
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("MO", 0x5100))
|
||||
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TG", 0x5300))
|
||||
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TT", 0x5800))
|
||||
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("OSL", 0x5400))
|
||||
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TO", 0x5000 | (1 << 4)))
|
||||
|
||||
KEYCODES.clear()
|
||||
KEYCODES.extend(KEYCODES_BASIC + KEYCODES_ISO + KEYCODES_MACRO + KEYCODES_LAYERS + KEYCODES_SPECIAL)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
from fbs_runtime.application_context.PyQt5 import ApplicationContext
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtWidgets import QWidget, QTabWidget, QVBoxLayout, QPushButton, QLabel, QComboBox, QToolButton, QHBoxLayout, QSizePolicy
|
||||
|
||||
import sys
|
||||
|
|
@ -14,7 +14,7 @@ from flowlayout import FlowLayout
|
|||
from util import tr, find_vial_keyboards, open_device, hid_send, MSG_LEN
|
||||
from kle_serial import Serial as KleSerial
|
||||
from clickable_label import ClickableLabel
|
||||
from keycodes import keycode_label, keycode_tooltip, KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_SPECIAL
|
||||
from keycodes import keycode_label, keycode_tooltip, recreate_layer_keycodes, KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_SPECIAL
|
||||
|
||||
|
||||
class TabbedKeycodes(QTabWidget):
|
||||
|
|
@ -35,11 +35,15 @@ class TabbedKeycodes(QTabWidget):
|
|||
(self.tab_layers, "Layers", KEYCODES_LAYERS),
|
||||
(self.tab_special, "Special", KEYCODES_SPECIAL),
|
||||
]:
|
||||
self.create_buttons(tab, keycodes)
|
||||
layout = FlowLayout()
|
||||
buttons = self.create_buttons(layout, keycodes)
|
||||
tab.setLayout(layout)
|
||||
self.addTab(tab, tr("TabbedKeycodes", label))
|
||||
|
||||
def create_buttons(self, tab, keycodes):
|
||||
layout = FlowLayout()
|
||||
self.layer_keycode_buttons = []
|
||||
|
||||
def create_buttons(self, layout, keycodes):
|
||||
buttons = []
|
||||
|
||||
for keycode in keycodes:
|
||||
btn = QPushButton(keycode.label)
|
||||
|
|
@ -47,8 +51,14 @@ class TabbedKeycodes(QTabWidget):
|
|||
btn.setToolTip(keycode_tooltip(keycode.code))
|
||||
btn.clicked.connect(lambda st, k=keycode: kb.set_key(k.code))
|
||||
layout.addWidget(btn)
|
||||
buttons.append(btn)
|
||||
|
||||
tab.setLayout(layout)
|
||||
return buttons
|
||||
|
||||
def recreate_layer_keycode_buttons(self):
|
||||
for btn in self.layer_keycode_buttons:
|
||||
btn.deleteLater()
|
||||
self.layer_keycode_buttons = self.create_buttons(self.tab_layers.layout(), KEYCODES_LAYERS)
|
||||
|
||||
|
||||
KEY_WIDTH = 40
|
||||
|
|
@ -58,6 +68,8 @@ KEY_SPACING = 4
|
|||
|
||||
class KeyboardContainer(QWidget):
|
||||
|
||||
number_layers_changed = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
|
|
@ -88,6 +100,7 @@ class KeyboardContainer(QWidget):
|
|||
|
||||
def rebuild_layers(self, dev):
|
||||
self.layers = hid_send(dev, b"\x11")[1]
|
||||
self.number_layers_changed.emit()
|
||||
|
||||
for label in self.layer_labels:
|
||||
label.deleteLater()
|
||||
|
|
@ -212,6 +225,7 @@ class MainWindow(QWidget):
|
|||
self.devices = []
|
||||
|
||||
self.keyboard_container = KeyboardContainer()
|
||||
self.keyboard_container.number_layers_changed.connect(self.on_number_layers_changed)
|
||||
|
||||
self.tabbed_keycodes = TabbedKeycodes(self.keyboard_container)
|
||||
|
||||
|
|
@ -273,6 +287,10 @@ class MainWindow(QWidget):
|
|||
payload = json.loads(lzma.decompress(payload))
|
||||
self.keyboard_container.rebuild(self.device, payload)
|
||||
|
||||
def on_number_layers_changed(self):
|
||||
recreate_layer_keycodes(self.keyboard_container.layers)
|
||||
self.tabbed_keycodes.recreate_layer_keycode_buttons()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
appctxt = ApplicationContext() # 1. Instantiate ApplicationContext
|
||||
|
|
|
|||
Loading…
Reference in New Issue