move keymap override handling into global util

main
Ilya Zhuravlev 2021-07-03 14:56:41 -04:00
parent ec3df5bdd0
commit fea0dcaa9b
5 changed files with 89 additions and 50 deletions

View File

@ -23,3 +23,7 @@ class KeyWidget(KeyboardWidget):
TabbedKeycodes.open_tray(self) TabbedKeycodes.open_tray(self)
else: else:
TabbedKeycodes.close_tray() TabbedKeycodes.close_tray()
def on_keycode_changed(self, kc):
""" Unlike set_keycode, this handles setting masked keycode inside the mask """
print(kc)

View File

@ -1,8 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
import json import json
from PyQt5.QtGui import QPalette from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QMessageBox
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QMessageBox, QApplication
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from any_keycode_dialog import AnyKeycodeDialog from any_keycode_dialog import AnyKeycodeDialog
@ -12,7 +11,7 @@ from keycodes import recreate_keyboard_keycodes, Keycode
from keymaps import KEYMAPS from keymaps import KEYMAPS
from square_button import SquareButton from square_button import SquareButton
from tabbed_keycodes import TabbedKeycodes from tabbed_keycodes import TabbedKeycodes
from util import tr from util import tr, KeycodeDisplay
from vial_device import VialKeyboard from vial_device import VialKeyboard
@ -48,8 +47,6 @@ class KeymapEditor(BasicEditor):
layout_editor.changed.connect(self.on_layout_changed) layout_editor.changed.connect(self.on_layout_changed)
self.keymap_override = KEYMAPS[0][1]
self.container.anykey.connect(self.on_any_keycode) self.container.anykey.connect(self.on_any_keycode)
self.tabbed_keycodes = TabbedKeycodes() self.tabbed_keycodes = TabbedKeycodes()
@ -60,6 +57,7 @@ class KeymapEditor(BasicEditor):
self.addWidget(self.tabbed_keycodes) self.addWidget(self.tabbed_keycodes)
self.device = None self.device = None
KeycodeDisplay.notify_keymap_override(self)
def on_container_clicked(self): def on_container_clicked(self):
""" Called when a mouse click event is bubbled up to the editor's container """ """ Called when a mouse click event is bubbled up to the editor's container """
@ -135,11 +133,6 @@ class KeymapEditor(BasicEditor):
self.keyboard.restore_layout(data) self.keyboard.restore_layout(data)
self.refresh_layer_display() self.refresh_layer_display()
def set_keymap_override(self, override):
self.keymap_override = override
self.refresh_layer_display()
self.tabbed_keycodes.set_keymap_override(override)
def on_any_keycode(self): def on_any_keycode(self):
if self.container.active_key is None: if self.container.active_key is None:
return return
@ -148,17 +141,6 @@ class KeymapEditor(BasicEditor):
if dlg.exec_() and dlg.value >= 0: if dlg.exec_() and dlg.value >= 0:
self.on_keycode_changed(dlg.value) self.on_keycode_changed(dlg.value)
def code_is_overriden(self, code):
""" Check whether a country-specific keymap overrides a 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[Keycode.find_outer_keycode(code).qmk_id]
return Keycode.label(code)
def code_for_widget(self, widget): def code_for_widget(self, widget):
if widget.desc.row is not None: if widget.desc.row is not None:
return self.keyboard.layout[(self.current_layer, widget.desc.row, widget.desc.col)] return self.keyboard.layout[(self.current_layer, widget.desc.row, widget.desc.col)]
@ -177,20 +159,7 @@ class KeymapEditor(BasicEditor):
for widget in self.container.widgets: for widget in self.container.widgets:
code = self.code_for_widget(widget) code = self.code_for_widget(widget)
text = self.get_label(code) KeycodeDisplay.display_keycode(widget, code)
tooltip = Keycode.tooltip(code)
mask = Keycode.is_mask(code)
mask_text = self.get_label(code & 0xFF)
if mask:
text = text.split("\n")[0]
widget.masked = mask
widget.setText(text)
widget.setMaskText(mask_text)
widget.setToolTip(tooltip)
if self.code_is_overriden(code):
widget.setColor(QApplication.palette().color(QPalette.Link))
else:
widget.setColor(None)
self.container.update() self.container.update()
self.container.updateGeometry() self.container.updateGeometry()
@ -245,3 +214,6 @@ class KeymapEditor(BasicEditor):
self.refresh_layer_display() self.refresh_layer_display()
self.keyboard.set_layout_options(self.layout_editor.pack()) self.keyboard.set_layout_options(self.layout_editor.pack())
def on_keymap_override(self):
self.refresh_layer_display()

View File

@ -21,7 +21,7 @@ from rgb_configurator import RGBConfigurator
from tabbed_keycodes import TabbedKeycodes from tabbed_keycodes import TabbedKeycodes
from tap_dance import TapDance from tap_dance import TapDance
from unlocker import Unlocker from unlocker import Unlocker
from util import tr, find_vial_devices, EXAMPLE_KEYBOARDS from util import tr, find_vial_devices, EXAMPLE_KEYBOARDS, KeycodeDisplay
from vial_device import VialKeyboard from vial_device import VialKeyboard
from matrix_test import MatrixTest from matrix_test import MatrixTest
@ -92,10 +92,10 @@ class MainWindow(QMainWindow):
layout.addWidget(self.tabs) layout.addWidget(self.tabs)
layout.addWidget(self.lbl_no_devices) layout.addWidget(self.lbl_no_devices)
layout.setAlignment(self.lbl_no_devices, Qt.AlignHCenter) layout.setAlignment(self.lbl_no_devices, Qt.AlignHCenter)
self.popup_keycodes = TabbedKeycodes() self.tray_keycodes = TabbedKeycodes()
TabbedKeycodes.set_tray(self.popup_keycodes) self.tray_keycodes.make_tray()
layout.addWidget(self.popup_keycodes) layout.addWidget(self.tray_keycodes)
self.popup_keycodes.hide() self.tray_keycodes.hide()
w = QWidget() w = QWidget()
w.setLayout(layout) w.setLayout(layout)
self.setCentralWidget(w) self.setCentralWidget(w)
@ -335,7 +335,7 @@ class MainWindow(QMainWindow):
def change_keyboard_layout(self, index): def change_keyboard_layout(self, index):
self.settings.setValue("keymap", KEYMAPS[index][0]) self.settings.setValue("keymap", KEYMAPS[index][0])
self.keymap_editor.set_keymap_override(KEYMAPS[index][1]) KeycodeDisplay.set_keymap_override(KEYMAPS[index][1])
def get_theme(self): def get_theme(self):
return self.settings.value("theme", "Dark") return self.settings.value("theme", "Dark")

View File

@ -8,9 +8,8 @@ from constants import KEYCODE_BTN_RATIO
from flowlayout import FlowLayout from flowlayout import FlowLayout
from keycodes import KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_QUANTUM, \ from keycodes import KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_QUANTUM, \
KEYCODES_BACKLIGHT, KEYCODES_MEDIA, KEYCODES_SPECIAL, KEYCODES_SHIFTED, KEYCODES_USER, Keycode KEYCODES_BACKLIGHT, KEYCODES_MEDIA, KEYCODES_SPECIAL, KEYCODES_SHIFTED, KEYCODES_USER, Keycode
from keymaps import KEYMAPS
from square_button import SquareButton from square_button import SquareButton
from util import tr from util import tr, KeycodeDisplay
class TabbedKeycodes(QTabWidget): class TabbedKeycodes(QTabWidget):
@ -21,8 +20,8 @@ class TabbedKeycodes(QTabWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self.keymap_override = None
self.target = None self.target = None
self.is_tray = False
self.tab_basic = QScrollArea() self.tab_basic = QScrollArea()
self.tab_iso = QScrollArea() self.tab_iso = QScrollArea()
@ -74,7 +73,7 @@ class TabbedKeycodes(QTabWidget):
self.layer_keycode_buttons = [] self.layer_keycode_buttons = []
self.macro_keycode_buttons = [] self.macro_keycode_buttons = []
self.user_keycode_buttons = [] self.user_keycode_buttons = []
self.set_keymap_override(KEYMAPS[0][1]) KeycodeDisplay.notify_keymap_override(self)
def create_buttons(self, layout, keycodes, wordWrap = False): def create_buttons(self, layout, keycodes, wordWrap = False):
buttons = [] buttons = []
@ -102,15 +101,14 @@ class TabbedKeycodes(QTabWidget):
self.widgets += self.layer_keycode_buttons + self.macro_keycode_buttons + self.user_keycode_buttons self.widgets += self.layer_keycode_buttons + self.macro_keycode_buttons + self.user_keycode_buttons
self.relabel_buttons() self.relabel_buttons()
def set_keymap_override(self, override): def on_keymap_override(self):
self.keymap_override = override
self.relabel_buttons() self.relabel_buttons()
def relabel_buttons(self): def relabel_buttons(self):
for widget in self.widgets: for widget in self.widgets:
qmk_id = widget.keycode.qmk_id qmk_id = widget.keycode.qmk_id
if qmk_id in self.keymap_override: if qmk_id in KeycodeDisplay.keymap_override:
label = self.keymap_override[qmk_id] label = KeycodeDisplay.keymap_override[qmk_id]
highlight_color = QApplication.palette().color(QPalette.Link).getRgb() highlight_color = QApplication.palette().color(QPalette.Link).getRgb()
widget.setStyleSheet("QPushButton {color: rgb"+str(highlight_color)+";}") widget.setStyleSheet("QPushButton {color: rgb"+str(highlight_color)+";}")
else: else:
@ -133,4 +131,19 @@ class TabbedKeycodes(QTabWidget):
def close_tray(cls): def close_tray(cls):
if cls.tray.target is not None: if cls.tray.target is not None:
cls.tray.target.deselect() cls.tray.target.deselect()
cls.tray.target = None
cls.tray.hide() cls.tray.hide()
def make_tray(self):
self.is_tray = True
TabbedKeycodes.set_tray(self)
self.keycode_changed.connect(self.on_tray_keycode_changed)
self.anykey.connect(self.on_tray_anykey)
def on_tray_keycode_changed(self, kc):
if self.target is not None:
self.target.on_keycode_changed(kc)
def on_tray_anykey(self):
pass

View File

@ -5,9 +5,12 @@ import time
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
from PyQt5.QtCore import QCoreApplication, QStandardPaths from PyQt5.QtCore import QCoreApplication, QStandardPaths
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication
from hidproxy import hid from hidproxy import hid
from keycodes import Keycode
from keymaps import KEYMAPS
tr = QCoreApplication.translate tr = QCoreApplication.translate
@ -147,3 +150,50 @@ def init_logger():
handler = RotatingFileHandler(path, maxBytes=5 * 1024 * 1024, backupCount=5) handler = RotatingFileHandler(path, maxBytes=5 * 1024 * 1024, backupCount=5)
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s")) handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s"))
logging.getLogger().addHandler(handler) logging.getLogger().addHandler(handler)
class KeycodeDisplay:
keymap_override = KEYMAPS[0][1]
clients = []
@classmethod
def get_label(cls, code):
""" Get label for a specific keycode """
if cls.code_is_overriden(code):
return cls.keymap_override[Keycode.find_outer_keycode(code).qmk_id]
return Keycode.label(code)
@classmethod
def code_is_overriden(cls, code):
""" Check whether a country-specific keymap overrides a code """
key = Keycode.find_outer_keycode(code)
return key is not None and key.qmk_id in cls.keymap_override
@classmethod
def display_keycode(cls, widget, code):
text = cls.get_label(code)
tooltip = Keycode.tooltip(code)
mask = Keycode.is_mask(code)
mask_text = cls.get_label(code & 0xFF)
if mask:
text = text.split("\n")[0]
widget.masked = mask
widget.setText(text)
widget.setMaskText(mask_text)
widget.setToolTip(tooltip)
if cls.code_is_overriden(code):
widget.setColor(QApplication.palette().color(QPalette.Link))
else:
widget.setColor(None)
@classmethod
def set_keymap_override(cls, override):
cls.keymap_override = override
for client in cls.clients:
client.on_keymap_override()
@classmethod
def notify_keymap_override(cls, client):
cls.clients.append(client)
client.on_keymap_override()