minor style refactoring
parent
92a4d6e3f4
commit
347fa7c421
|
|
@ -3,3 +3,6 @@ KEY_HEIGHT = KEY_WIDTH
|
||||||
KEY_SPACING = 4
|
KEY_SPACING = 4
|
||||||
|
|
||||||
WINDOW_WIDTH, WINDOW_HEIGHT = 1024, 768
|
WINDOW_WIDTH, WINDOW_HEIGHT = 1024, 768
|
||||||
|
|
||||||
|
LAYER_BTN_STYLE = "border: 1px solid black; padding: 5px"
|
||||||
|
ACTIVE_LAYER_BTN_STYLE = "border: 1px solid black; padding: 5px; background-color: black; color: white"
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,11 @@ class Keyboard:
|
||||||
def __init__(self, dev):
|
def __init__(self, dev):
|
||||||
self.dev = dev
|
self.dev = dev
|
||||||
|
|
||||||
|
self.rowcol = set()
|
||||||
|
self.layout = dict()
|
||||||
|
self.layers = 0
|
||||||
|
self.keys = []
|
||||||
|
|
||||||
def reload(self):
|
def reload(self):
|
||||||
""" Load information about the keyboard: number of layers, physical key layout """
|
""" Load information about the keyboard: number of layers, physical key layout """
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout
|
||||||
|
|
||||||
from clickable_label import ClickableLabel
|
from clickable_label import ClickableLabel
|
||||||
from keycodes import keycode_label, keycode_tooltip
|
from keycodes import keycode_label, keycode_tooltip
|
||||||
from constants import KEY_WIDTH, KEY_SPACING, KEY_HEIGHT
|
from constants import KEY_WIDTH, KEY_SPACING, KEY_HEIGHT, LAYER_BTN_STYLE, ACTIVE_LAYER_BTN_STYLE
|
||||||
from util import tr
|
from util import tr
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,9 +39,10 @@ class KeyboardContainer(QWidget):
|
||||||
self.selected_key = None
|
self.selected_key = None
|
||||||
self.selected_row = -1
|
self.selected_row = -1
|
||||||
self.selected_col = -1
|
self.selected_col = -1
|
||||||
|
self.keyboard = None
|
||||||
|
self.current_layer = 0
|
||||||
|
|
||||||
def rebuild_layers(self):
|
def rebuild_layers(self):
|
||||||
self.layers = self.keyboard.layers
|
|
||||||
self.number_layers_changed.emit()
|
self.number_layers_changed.emit()
|
||||||
|
|
||||||
# delete old layer labels
|
# delete old layer labels
|
||||||
|
|
@ -50,7 +51,7 @@ class KeyboardContainer(QWidget):
|
||||||
self.layer_labels = []
|
self.layer_labels = []
|
||||||
|
|
||||||
# create new layer labels
|
# create new layer labels
|
||||||
for x in range(self.layers):
|
for x in range(self.keyboard.layers):
|
||||||
label = ClickableLabel(str(x))
|
label = ClickableLabel(str(x))
|
||||||
label.setAlignment(Qt.AlignCenter)
|
label.setAlignment(Qt.AlignCenter)
|
||||||
label.clicked.connect(lambda idx=x: self.switch_layer(idx))
|
label.clicked.connect(lambda idx=x: self.switch_layer(idx))
|
||||||
|
|
@ -105,8 +106,8 @@ class KeyboardContainer(QWidget):
|
||||||
""" Refresh text on key widgets to display data corresponding to current layer """
|
""" Refresh text on key widgets to display data corresponding to current layer """
|
||||||
|
|
||||||
for label in self.layer_labels:
|
for label in self.layer_labels:
|
||||||
label.setStyleSheet("border: 1px solid black; padding: 5px")
|
label.setStyleSheet(LAYER_BTN_STYLE)
|
||||||
self.layer_labels[self.current_layer].setStyleSheet("border: 1px solid black; padding: 5px; background-color: black; color: white")
|
self.layer_labels[self.current_layer].setStyleSheet(ACTIVE_LAYER_BTN_STYLE)
|
||||||
|
|
||||||
for (row, col), widgets in self.rowcol.items():
|
for (row, col), widgets in self.rowcol.items():
|
||||||
code = self.keyboard.layout[(self.current_layer, row, col)]
|
code = self.keyboard.layout[(self.current_layer, row, col)]
|
||||||
|
|
@ -142,4 +143,4 @@ class KeyboardContainer(QWidget):
|
||||||
self.selected_row = row
|
self.selected_row = row
|
||||||
self.selected_col = col
|
self.selected_col = col
|
||||||
break
|
break
|
||||||
self.refresh_layer_display()
|
self.refresh_layer_display()
|
||||||
|
|
|
||||||
|
|
@ -211,18 +211,21 @@ KEYCODES = KEYCODES_BASIC + KEYCODES_ISO + KEYCODES_MACRO + KEYCODES_LAYERS + KE
|
||||||
|
|
||||||
K = None
|
K = None
|
||||||
|
|
||||||
|
|
||||||
def find_keycode(code):
|
def find_keycode(code):
|
||||||
for keycode in KEYCODES:
|
for keycode in KEYCODES:
|
||||||
if keycode.code == code:
|
if keycode.code == code:
|
||||||
return keycode
|
return keycode
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def keycode_label(code):
|
def keycode_label(code):
|
||||||
keycode = find_keycode(code)
|
keycode = find_keycode(code)
|
||||||
if keycode is None:
|
if keycode is None:
|
||||||
return "0x{:X}".format(code)
|
return "0x{:X}".format(code)
|
||||||
return keycode.label
|
return keycode.label
|
||||||
|
|
||||||
|
|
||||||
def keycode_tooltip(code):
|
def keycode_tooltip(code):
|
||||||
keycode = find_keycode(code)
|
keycode = find_keycode(code)
|
||||||
if keycode is None:
|
if keycode is None:
|
||||||
|
|
@ -232,6 +235,7 @@ def keycode_tooltip(code):
|
||||||
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
||||||
return tooltip
|
return tooltip
|
||||||
|
|
||||||
|
|
||||||
def recreate_layer_keycodes(layers):
|
def recreate_layer_keycodes(layers):
|
||||||
""" Generates layer keycodes based on number of layers a keyboard provides """
|
""" Generates layer keycodes based on number of layers a keyboard provides """
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -193,12 +193,3 @@ class Serial:
|
||||||
|
|
||||||
|
|
||||||
# TODO: add tests
|
# TODO: add tests
|
||||||
|
|
||||||
|
|
||||||
# serial = Serial()
|
|
||||||
# data = open("plain60.json", "r").read()
|
|
||||||
# data = json.loads(data)
|
|
||||||
# kb = serial.deserialize(data["layouts"]["keymap"])
|
|
||||||
|
|
||||||
# for key in kb.keys:
|
|
||||||
# print("{} {}x{}+{}x{}".format(key.labels, key.x, key.y, key.width, key.height))
|
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,8 @@ class MainWindow(QWidget):
|
||||||
self.keyboard_container.rebuild(keyboard)
|
self.keyboard_container.rebuild(keyboard)
|
||||||
|
|
||||||
def on_number_layers_changed(self):
|
def on_number_layers_changed(self):
|
||||||
recreate_layer_keycodes(self.keyboard_container.layers)
|
recreate_layer_keycodes(self.keyboard_container.keyboard.layers)
|
||||||
self.tabbed_keycodes.recreate_layer_keycode_buttons()
|
self.tabbed_keycodes.recreate_layer_keycode_buttons()
|
||||||
|
|
||||||
def on_keycode_changed(self, code):
|
def on_keycode_changed(self, code):
|
||||||
self.keyboard_container.set_key(code)
|
self.keyboard_container.set_key(code)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ VIAL_SERIAL_NUMBER_MAGIC = "vial:f64c2b3c"
|
||||||
|
|
||||||
MSG_LEN = 32
|
MSG_LEN = 32
|
||||||
|
|
||||||
|
|
||||||
def hid_send(dev, msg):
|
def hid_send(dev, msg):
|
||||||
if len(msg) > MSG_LEN:
|
if len(msg) > MSG_LEN:
|
||||||
raise RuntimeError("message must be less than 32 bytes")
|
raise RuntimeError("message must be less than 32 bytes")
|
||||||
|
|
@ -26,10 +27,12 @@ def hid_send(dev, msg):
|
||||||
|
|
||||||
return bytes(dev.read(MSG_LEN))
|
return bytes(dev.read(MSG_LEN))
|
||||||
|
|
||||||
|
|
||||||
def is_rawhid(dev):
|
def is_rawhid(dev):
|
||||||
# TODO: this is only broken on linux, other platforms should be able to check usage_page
|
# TODO: this is only broken on linux, other platforms should be able to check usage_page
|
||||||
return dev["interface_number"] == 1
|
return dev["interface_number"] == 1
|
||||||
|
|
||||||
|
|
||||||
def find_vial_keyboards():
|
def find_vial_keyboards():
|
||||||
filtered = []
|
filtered = []
|
||||||
for dev in hid.enumerate():
|
for dev in hid.enumerate():
|
||||||
|
|
@ -37,6 +40,7 @@ def find_vial_keyboards():
|
||||||
filtered.append(dev)
|
filtered.append(dev)
|
||||||
return filtered
|
return filtered
|
||||||
|
|
||||||
|
|
||||||
def open_device(desc):
|
def open_device(desc):
|
||||||
# TODO: error handling here
|
# TODO: error handling here
|
||||||
dev = hid.device()
|
dev = hid.device()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue