move keymap override handling into global util
parent
ec3df5bdd0
commit
fea0dcaa9b
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue