implement key remapping
parent
42d4a91a8e
commit
c556163ce6
|
|
@ -177,6 +177,8 @@ KEYCODES = [
|
||||||
K(0x5C00, "RESET", "Reset"),
|
K(0x5C00, "RESET", "Reset"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
KEYCODES_BASIC = KEYCODES
|
||||||
|
|
||||||
K = None
|
K = None
|
||||||
|
|
||||||
def keycode_to_label(code):
|
def keycode_to_label(code):
|
||||||
|
|
|
||||||
|
|
@ -12,19 +12,20 @@ from flowlayout import FlowLayout
|
||||||
from util import tr, find_vial_keyboards, open_device, hid_send, MSG_LEN
|
from util import tr, find_vial_keyboards, open_device, hid_send, MSG_LEN
|
||||||
from kle_serial import Serial as KleSerial
|
from kle_serial import Serial as KleSerial
|
||||||
from clickable_label import ClickableLabel
|
from clickable_label import ClickableLabel
|
||||||
from keycodes import keycode_to_label
|
from keycodes import keycode_to_label, KEYCODES_BASIC
|
||||||
|
|
||||||
|
|
||||||
class TabbedKeycodes(QTabWidget):
|
class TabbedKeycodes(QTabWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, kb, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.tab_basic = QWidget()
|
self.tab_basic = QWidget()
|
||||||
layout = FlowLayout()
|
layout = FlowLayout()
|
||||||
|
|
||||||
for lbl in ["", "hello", "Esc", "A", "B", "C", "D", "E", "F"]:
|
for keycode in KEYCODES_BASIC:
|
||||||
btn = QPushButton(lbl)
|
btn = QPushButton(keycode.label)
|
||||||
btn.setFixedSize(50, 50)
|
btn.setFixedSize(50, 50)
|
||||||
|
btn.clicked.connect(lambda st, k=keycode: kb.set_key(k.keycode))
|
||||||
layout.addWidget(btn)
|
layout.addWidget(btn)
|
||||||
self.tab_basic.setLayout(layout)
|
self.tab_basic.setLayout(layout)
|
||||||
|
|
||||||
|
|
@ -67,6 +68,9 @@ class KeyboardContainer(QWidget):
|
||||||
self.layer_labels = []
|
self.layer_labels = []
|
||||||
self.rowcol = defaultdict(list)
|
self.rowcol = defaultdict(list)
|
||||||
self.layout = dict()
|
self.layout = dict()
|
||||||
|
self.selected_key = None
|
||||||
|
self.selected_row = -1
|
||||||
|
self.selected_col = -1
|
||||||
|
|
||||||
def rebuild_layers(self, dev):
|
def rebuild_layers(self, dev):
|
||||||
self.layers = hid_send(dev, b"\x11")[1]
|
self.layers = hid_send(dev, b"\x11")[1]
|
||||||
|
|
@ -110,7 +114,8 @@ class KeyboardContainer(QWidget):
|
||||||
max_w = max_h = 0
|
max_w = max_h = 0
|
||||||
|
|
||||||
for key in kb.keys:
|
for key in kb.keys:
|
||||||
widget = QLabel()
|
widget = ClickableLabel()
|
||||||
|
widget.clicked.connect(lambda w=widget: self.select_key(w))
|
||||||
|
|
||||||
if key.labels[0] and "," in key.labels[0]:
|
if key.labels[0] and "," in key.labels[0]:
|
||||||
row, col = key.labels[0].split(",")
|
row, col = key.labels[0].split(",")
|
||||||
|
|
@ -118,7 +123,6 @@ class KeyboardContainer(QWidget):
|
||||||
self.rowcol[(row, col)].append(widget)
|
self.rowcol[(row, col)].append(widget)
|
||||||
|
|
||||||
widget.setParent(self.container)
|
widget.setParent(self.container)
|
||||||
widget.setStyleSheet('background-color:white; border: 1px solid black')
|
|
||||||
widget.setAlignment(Qt.AlignCenter)
|
widget.setAlignment(Qt.AlignCenter)
|
||||||
|
|
||||||
x = (KEY_WIDTH + KEY_SPACING) * key.x
|
x = (KEY_WIDTH + KEY_SPACING) * key.x
|
||||||
|
|
@ -151,10 +155,36 @@ class KeyboardContainer(QWidget):
|
||||||
keycode = self.layout[(self.current_layer, row, col)]
|
keycode = self.layout[(self.current_layer, row, col)]
|
||||||
text = keycode_to_label(keycode)
|
text = keycode_to_label(keycode)
|
||||||
for widget in widgets:
|
for widget in widgets:
|
||||||
|
widget.setStyleSheet('background-color:white; border: 1px solid black')
|
||||||
|
if widget == self.selected_key:
|
||||||
|
widget.setStyleSheet('background-color:black; color: white; border: 1px solid black')
|
||||||
widget.setText(text)
|
widget.setText(text)
|
||||||
|
|
||||||
def switch_layer(self, idx):
|
def switch_layer(self, idx):
|
||||||
self.current_layer = idx
|
self.current_layer = idx
|
||||||
|
self.selected_key = None
|
||||||
|
self.selected_row = -1
|
||||||
|
self.selected_col = -1
|
||||||
|
self.refresh_layer_display()
|
||||||
|
|
||||||
|
def set_key(self, keycode):
|
||||||
|
""" Change currently selected key to provided keycode """
|
||||||
|
|
||||||
|
if self.selected_row >= 0 and self.selected_col >= 0:
|
||||||
|
hid_send(self.dev, struct.pack(">BBBBH", 5, self.current_layer, self.selected_row, self.selected_col, keycode))
|
||||||
|
self.layout[(self.current_layer, self.selected_row, self.selected_col)] = keycode
|
||||||
|
|
||||||
|
self.refresh_layer_display()
|
||||||
|
|
||||||
|
def select_key(self, widget):
|
||||||
|
""" Change which key is currently selected """
|
||||||
|
|
||||||
|
self.selected_key = widget
|
||||||
|
for (row, col), widgets in self.rowcol.items():
|
||||||
|
if widget in widgets:
|
||||||
|
self.selected_row = row
|
||||||
|
self.selected_col = col
|
||||||
|
break
|
||||||
self.refresh_layer_display()
|
self.refresh_layer_display()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -167,7 +197,7 @@ class MainWindow(QWidget):
|
||||||
|
|
||||||
self.keyboard_container = KeyboardContainer()
|
self.keyboard_container = KeyboardContainer()
|
||||||
|
|
||||||
self.tabbed_keycodes = TabbedKeycodes()
|
self.tabbed_keycodes = TabbedKeycodes(self.keyboard_container)
|
||||||
|
|
||||||
self.combobox_devices = QComboBox()
|
self.combobox_devices = QComboBox()
|
||||||
self.combobox_devices.currentIndexChanged.connect(self.on_device_selected)
|
self.combobox_devices.currentIndexChanged.connect(self.on_device_selected)
|
||||||
|
|
@ -199,9 +229,11 @@ class MainWindow(QWidget):
|
||||||
|
|
||||||
def on_device_selected(self):
|
def on_device_selected(self):
|
||||||
self.device = None
|
self.device = None
|
||||||
|
self.keyboard_container.dev = None
|
||||||
idx = self.combobox_devices.currentIndex()
|
idx = self.combobox_devices.currentIndex()
|
||||||
if idx >= 0:
|
if idx >= 0:
|
||||||
self.device = open_device(self.devices[idx])
|
self.device = open_device(self.devices[idx])
|
||||||
|
self.keyboard_container.dev = self.device
|
||||||
self.reload_layout()
|
self.reload_layout()
|
||||||
|
|
||||||
def reload_layout(self):
|
def reload_layout(self):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue