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)
else:
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
import json
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QMessageBox, QApplication
from PyQt5.QtWidgets import QHBoxLayout, QLabel, QVBoxLayout, QMessageBox
from PyQt5.QtCore import Qt
from any_keycode_dialog import AnyKeycodeDialog
@ -12,7 +11,7 @@ from keycodes import recreate_keyboard_keycodes, Keycode
from keymaps import KEYMAPS
from square_button import SquareButton
from tabbed_keycodes import TabbedKeycodes
from util import tr
from util import tr, KeycodeDisplay
from vial_device import VialKeyboard
@ -48,8 +47,6 @@ class KeymapEditor(BasicEditor):
layout_editor.changed.connect(self.on_layout_changed)
self.keymap_override = KEYMAPS[0][1]
self.container.anykey.connect(self.on_any_keycode)
self.tabbed_keycodes = TabbedKeycodes()
@ -60,6 +57,7 @@ class KeymapEditor(BasicEditor):
self.addWidget(self.tabbed_keycodes)
self.device = None
KeycodeDisplay.notify_keymap_override(self)
def on_container_clicked(self):
""" 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.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):
if self.container.active_key is None:
return
@ -148,17 +141,6 @@ class KeymapEditor(BasicEditor):
if dlg.exec_() and dlg.value >= 0:
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):
if widget.desc.row is not None:
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:
code = self.code_for_widget(widget)
text = self.get_label(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)
KeycodeDisplay.display_keycode(widget, code)
self.container.update()
self.container.updateGeometry()
@ -245,3 +214,6 @@ class KeymapEditor(BasicEditor):
self.refresh_layer_display()
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 tap_dance import TapDance
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 matrix_test import MatrixTest
@ -92,10 +92,10 @@ class MainWindow(QMainWindow):
layout.addWidget(self.tabs)
layout.addWidget(self.lbl_no_devices)
layout.setAlignment(self.lbl_no_devices, Qt.AlignHCenter)
self.popup_keycodes = TabbedKeycodes()
TabbedKeycodes.set_tray(self.popup_keycodes)
layout.addWidget(self.popup_keycodes)
self.popup_keycodes.hide()
self.tray_keycodes = TabbedKeycodes()
self.tray_keycodes.make_tray()
layout.addWidget(self.tray_keycodes)
self.tray_keycodes.hide()
w = QWidget()
w.setLayout(layout)
self.setCentralWidget(w)
@ -335,7 +335,7 @@ class MainWindow(QMainWindow):
def change_keyboard_layout(self, index):
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):
return self.settings.value("theme", "Dark")

View File

@ -8,9 +8,8 @@ from constants import KEYCODE_BTN_RATIO
from flowlayout import FlowLayout
from keycodes import KEYCODES_BASIC, KEYCODES_ISO, KEYCODES_MACRO, KEYCODES_LAYERS, KEYCODES_QUANTUM, \
KEYCODES_BACKLIGHT, KEYCODES_MEDIA, KEYCODES_SPECIAL, KEYCODES_SHIFTED, KEYCODES_USER, Keycode
from keymaps import KEYMAPS
from square_button import SquareButton
from util import tr
from util import tr, KeycodeDisplay
class TabbedKeycodes(QTabWidget):
@ -21,8 +20,8 @@ class TabbedKeycodes(QTabWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.keymap_override = None
self.target = None
self.is_tray = False
self.tab_basic = QScrollArea()
self.tab_iso = QScrollArea()
@ -74,7 +73,7 @@ class TabbedKeycodes(QTabWidget):
self.layer_keycode_buttons = []
self.macro_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):
buttons = []
@ -102,15 +101,14 @@ class TabbedKeycodes(QTabWidget):
self.widgets += self.layer_keycode_buttons + self.macro_keycode_buttons + self.user_keycode_buttons
self.relabel_buttons()
def set_keymap_override(self, override):
self.keymap_override = override
def on_keymap_override(self):
self.relabel_buttons()
def relabel_buttons(self):
for widget in self.widgets:
qmk_id = widget.keycode.qmk_id
if qmk_id in self.keymap_override:
label = self.keymap_override[qmk_id]
if qmk_id in KeycodeDisplay.keymap_override:
label = KeycodeDisplay.keymap_override[qmk_id]
highlight_color = QApplication.palette().color(QPalette.Link).getRgb()
widget.setStyleSheet("QPushButton {color: rgb"+str(highlight_color)+";}")
else:
@ -133,4 +131,19 @@ class TabbedKeycodes(QTabWidget):
def close_tray(cls):
if cls.tray.target is not None:
cls.tray.target.deselect()
cls.tray.target = None
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 PyQt5.QtCore import QCoreApplication, QStandardPaths
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication
from hidproxy import hid
from keycodes import Keycode
from keymaps import KEYMAPS
tr = QCoreApplication.translate
@ -147,3 +150,50 @@ def init_logger():
handler = RotatingFileHandler(path, maxBytes=5 * 1024 * 1024, backupCount=5)
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s"))
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()