minor style refactoring

main
Ilya Zhuravlev 2020-10-16 15:26:11 -04:00
parent 92a4d6e3f4
commit 347fa7c421
7 changed files with 25 additions and 17 deletions

View File

@ -3,3 +3,6 @@ KEY_HEIGHT = KEY_WIDTH
KEY_SPACING = 4
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"

View File

@ -14,6 +14,11 @@ class Keyboard:
def __init__(self, dev):
self.dev = dev
self.rowcol = set()
self.layout = dict()
self.layers = 0
self.keys = []
def reload(self):
""" Load information about the keyboard: number of layers, physical key layout """

View File

@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout
from clickable_label import ClickableLabel
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
@ -39,9 +39,10 @@ class KeyboardContainer(QWidget):
self.selected_key = None
self.selected_row = -1
self.selected_col = -1
self.keyboard = None
self.current_layer = 0
def rebuild_layers(self):
self.layers = self.keyboard.layers
self.number_layers_changed.emit()
# delete old layer labels
@ -50,7 +51,7 @@ class KeyboardContainer(QWidget):
self.layer_labels = []
# create new layer labels
for x in range(self.layers):
for x in range(self.keyboard.layers):
label = ClickableLabel(str(x))
label.setAlignment(Qt.AlignCenter)
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 """
for label in self.layer_labels:
label.setStyleSheet("border: 1px solid black; padding: 5px")
self.layer_labels[self.current_layer].setStyleSheet("border: 1px solid black; padding: 5px; background-color: black; color: white")
label.setStyleSheet(LAYER_BTN_STYLE)
self.layer_labels[self.current_layer].setStyleSheet(ACTIVE_LAYER_BTN_STYLE)
for (row, col), widgets in self.rowcol.items():
code = self.keyboard.layout[(self.current_layer, row, col)]
@ -142,4 +143,4 @@ class KeyboardContainer(QWidget):
self.selected_row = row
self.selected_col = col
break
self.refresh_layer_display()
self.refresh_layer_display()

View File

@ -211,18 +211,21 @@ KEYCODES = KEYCODES_BASIC + KEYCODES_ISO + KEYCODES_MACRO + KEYCODES_LAYERS + KE
K = None
def find_keycode(code):
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:
@ -232,6 +235,7 @@ def keycode_tooltip(code):
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
return tooltip
def recreate_layer_keycodes(layers):
""" Generates layer keycodes based on number of layers a keyboard provides """

View File

@ -193,12 +193,3 @@ class Serial:
# 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))

View File

@ -58,8 +58,8 @@ class MainWindow(QWidget):
self.keyboard_container.rebuild(keyboard)
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()
def on_keycode_changed(self, code):
self.keyboard_container.set_key(code)
self.keyboard_container.set_key(code)

View File

@ -16,6 +16,7 @@ VIAL_SERIAL_NUMBER_MAGIC = "vial:f64c2b3c"
MSG_LEN = 32
def hid_send(dev, msg):
if len(msg) > MSG_LEN:
raise RuntimeError("message must be less than 32 bytes")
@ -26,10 +27,12 @@ def hid_send(dev, msg):
return bytes(dev.read(MSG_LEN))
def is_rawhid(dev):
# TODO: this is only broken on linux, other platforms should be able to check usage_page
return dev["interface_number"] == 1
def find_vial_keyboards():
filtered = []
for dev in hid.enumerate():
@ -37,6 +40,7 @@ def find_vial_keyboards():
filtered.append(dev)
return filtered
def open_device(desc):
# TODO: error handling here
dev = hid.device()