rgb_configurator: refactor to allow multiple rgb handlers
parent
841ec5678c
commit
cb00696aae
|
|
@ -1,5 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
from PyQt5 import QtCore
|
from PyQt5 import QtCore
|
||||||
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
from PyQt5.QtGui import QColor
|
from PyQt5.QtGui import QColor
|
||||||
from PyQt5.QtWidgets import QWidget, QPushButton, QHBoxLayout, QSizePolicy, QGridLayout, QLabel, QSlider, \
|
from PyQt5.QtWidgets import QWidget, QPushButton, QHBoxLayout, QSizePolicy, QGridLayout, QLabel, QSlider, \
|
||||||
QComboBox, QColorDialog
|
QComboBox, QColorDialog
|
||||||
|
|
@ -59,6 +60,107 @@ QMK_RGBLIGHT_EFFECTS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class BasicHandler(QObject):
|
||||||
|
|
||||||
|
update = pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, contaxiner):
|
||||||
|
super().__init__()
|
||||||
|
self.device = None
|
||||||
|
|
||||||
|
def set_device(self, device):
|
||||||
|
self.device = device
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def hide(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def block_signals(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def unblock_signals(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def update_from_keyboard(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
class QmkRgblightHandler(BasicHandler):
|
||||||
|
|
||||||
|
def __init__(self, container):
|
||||||
|
super().__init__(container)
|
||||||
|
|
||||||
|
container.addWidget(QLabel(tr("RGBConfigurator", "Underglow Effect")), 0, 0)
|
||||||
|
self.underglow_effect = QComboBox()
|
||||||
|
for ef in QMK_RGBLIGHT_EFFECTS:
|
||||||
|
self.underglow_effect.addItem(ef.name)
|
||||||
|
container.addWidget(self.underglow_effect, 0, 1)
|
||||||
|
|
||||||
|
container.addWidget(QLabel(tr("RGBConfigurator", "Underglow Brightness")), 1, 0)
|
||||||
|
self.underglow_brightness = QSlider(QtCore.Qt.Horizontal)
|
||||||
|
self.underglow_brightness.setMinimum(0)
|
||||||
|
self.underglow_brightness.setMaximum(255)
|
||||||
|
self.underglow_brightness.valueChanged.connect(self.on_underglow_brightness_changed)
|
||||||
|
container.addWidget(self.underglow_brightness, 1, 1)
|
||||||
|
|
||||||
|
self.lbl_underglow_color = QLabel(tr("RGBConfigurator", "Underglow Color"))
|
||||||
|
container.addWidget(self.lbl_underglow_color, 3, 0)
|
||||||
|
self.underglow_color = ClickableLabel(" ")
|
||||||
|
self.underglow_color.clicked.connect(self.on_underglow_color)
|
||||||
|
container.addWidget(self.underglow_color, 3, 1)
|
||||||
|
|
||||||
|
self.underglow_effect.currentIndexChanged.connect(self.on_underglow_effect_changed)
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def hide(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def block_signals(self):
|
||||||
|
self.underglow_brightness.blockSignals(True)
|
||||||
|
self.underglow_effect.blockSignals(True)
|
||||||
|
self.underglow_color.blockSignals(True)
|
||||||
|
|
||||||
|
def unblock_signals(self):
|
||||||
|
self.underglow_brightness.blockSignals(False)
|
||||||
|
self.underglow_effect.blockSignals(False)
|
||||||
|
self.underglow_color.blockSignals(False)
|
||||||
|
|
||||||
|
def update_from_keyboard(self):
|
||||||
|
self.underglow_brightness.setValue(self.device.keyboard.underglow_brightness)
|
||||||
|
self.underglow_effect.setCurrentIndex(self.device.keyboard.underglow_effect)
|
||||||
|
self.underglow_color.setStyleSheet("QWidget { background-color: %s}" % self.current_color().name())
|
||||||
|
|
||||||
|
def on_underglow_brightness_changed(self, value):
|
||||||
|
self.device.keyboard.set_qmk_rgblight_brightness(value)
|
||||||
|
self.update.emit()
|
||||||
|
|
||||||
|
def on_underglow_effect_changed(self, index):
|
||||||
|
self.lbl_underglow_color.setVisible(QMK_RGBLIGHT_EFFECTS[index].color_picker)
|
||||||
|
self.underglow_color.setVisible(QMK_RGBLIGHT_EFFECTS[index].color_picker)
|
||||||
|
|
||||||
|
self.device.keyboard.set_qmk_rgblight_effect(index)
|
||||||
|
|
||||||
|
def on_underglow_color(self):
|
||||||
|
color = QColorDialog.getColor(self.current_color())
|
||||||
|
if not color.isValid():
|
||||||
|
return
|
||||||
|
self.underglow_color.setStyleSheet("QWidget { background-color: %s}" % color.name())
|
||||||
|
h, s, v, a = color.getHsvF()
|
||||||
|
if h < 0:
|
||||||
|
h = 0
|
||||||
|
self.device.keyboard.set_qmk_rgblight_color(int(255 * h), int(255 * s), int(255 * v))
|
||||||
|
self.update.emit()
|
||||||
|
|
||||||
|
def current_color(self):
|
||||||
|
return QColor.fromHsvF(self.device.keyboard.underglow_color[0] / 255.0,
|
||||||
|
self.device.keyboard.underglow_color[1] / 255.0,
|
||||||
|
self.device.keyboard.underglow_brightness / 255.0)
|
||||||
|
|
||||||
|
|
||||||
class RGBConfigurator(BasicEditor):
|
class RGBConfigurator(BasicEditor):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
@ -73,26 +175,9 @@ class RGBConfigurator(BasicEditor):
|
||||||
self.addWidget(w)
|
self.addWidget(w)
|
||||||
self.setAlignment(w, QtCore.Qt.AlignHCenter)
|
self.setAlignment(w, QtCore.Qt.AlignHCenter)
|
||||||
|
|
||||||
self.container.addWidget(QLabel(tr("RGBConfigurator", "Underglow Effect")), 0, 0)
|
self.handler_rgblight = QmkRgblightHandler(self.container)
|
||||||
self.underglow_effect = QComboBox()
|
self.handler_rgblight.update.connect(self.update_from_keyboard)
|
||||||
for ef in QMK_RGBLIGHT_EFFECTS:
|
self.handlers = [self.handler_rgblight]
|
||||||
self.underglow_effect.addItem(ef.name)
|
|
||||||
self.container.addWidget(self.underglow_effect, 0, 1)
|
|
||||||
|
|
||||||
self.container.addWidget(QLabel(tr("RGBConfigurator", "Underglow Brightness")), 1, 0)
|
|
||||||
self.underglow_brightness = QSlider(QtCore.Qt.Horizontal)
|
|
||||||
self.underglow_brightness.setMinimum(0)
|
|
||||||
self.underglow_brightness.setMaximum(255)
|
|
||||||
self.underglow_brightness.valueChanged.connect(self.on_underglow_brightness_changed)
|
|
||||||
self.container.addWidget(self.underglow_brightness, 1, 1)
|
|
||||||
|
|
||||||
self.lbl_underglow_color = QLabel(tr("RGBConfigurator", "Underglow Color"))
|
|
||||||
self.container.addWidget(self.lbl_underglow_color, 3, 0)
|
|
||||||
self.underglow_color = ClickableLabel(" ")
|
|
||||||
self.underglow_color.clicked.connect(self.on_underglow_color)
|
|
||||||
self.container.addWidget(self.underglow_color, 3, 1)
|
|
||||||
|
|
||||||
self.underglow_effect.currentIndexChanged.connect(self.on_underglow_effect_changed)
|
|
||||||
|
|
||||||
self.addStretch()
|
self.addStretch()
|
||||||
buttons = QHBoxLayout()
|
buttons = QHBoxLayout()
|
||||||
|
|
@ -102,30 +187,6 @@ class RGBConfigurator(BasicEditor):
|
||||||
save_btn.clicked.connect(self.on_save)
|
save_btn.clicked.connect(self.on_save)
|
||||||
self.addLayout(buttons)
|
self.addLayout(buttons)
|
||||||
|
|
||||||
def on_underglow_brightness_changed(self, value):
|
|
||||||
self.device.keyboard.set_qmk_rgblight_brightness(value)
|
|
||||||
self.update_color_from_keyboard()
|
|
||||||
|
|
||||||
def on_underglow_effect_changed(self, index):
|
|
||||||
self.lbl_underglow_color.setVisible(QMK_RGBLIGHT_EFFECTS[index].color_picker)
|
|
||||||
self.underglow_color.setVisible(QMK_RGBLIGHT_EFFECTS[index].color_picker)
|
|
||||||
|
|
||||||
self.device.keyboard.set_qmk_rgblight_effect(index)
|
|
||||||
|
|
||||||
def on_underglow_effect_speed_changed(self, value):
|
|
||||||
self.device.keyboard.set_qmk_rgblight_effect_speed(value)
|
|
||||||
|
|
||||||
def on_underglow_color(self):
|
|
||||||
color = QColorDialog.getColor(self.current_color())
|
|
||||||
if not color.isValid():
|
|
||||||
return
|
|
||||||
self.underglow_color.setStyleSheet("QWidget { background-color: %s}" % color.name())
|
|
||||||
h, s, v, a = color.getHsvF()
|
|
||||||
if h < 0:
|
|
||||||
h = 0
|
|
||||||
self.device.keyboard.set_qmk_rgblight_color(int(255 * h), int(255 * s), int(255 * v))
|
|
||||||
self.update_color_from_keyboard()
|
|
||||||
|
|
||||||
def on_save(self):
|
def on_save(self):
|
||||||
self.device.keyboard.save_rgb()
|
self.device.keyboard.save_rgb()
|
||||||
|
|
||||||
|
|
@ -133,35 +194,30 @@ class RGBConfigurator(BasicEditor):
|
||||||
return isinstance(self.device, VialKeyboard) and self.device.keyboard.lighting_qmk_rgblight
|
return isinstance(self.device, VialKeyboard) and self.device.keyboard.lighting_qmk_rgblight
|
||||||
|
|
||||||
def block_signals(self):
|
def block_signals(self):
|
||||||
self.underglow_brightness.blockSignals(True)
|
for h in self.handlers:
|
||||||
self.underglow_effect.blockSignals(True)
|
h.block_signals()
|
||||||
self.underglow_color.blockSignals(True)
|
|
||||||
|
|
||||||
def unblock_signals(self):
|
def unblock_signals(self):
|
||||||
self.underglow_brightness.blockSignals(False)
|
for h in self.handlers:
|
||||||
self.underglow_effect.blockSignals(False)
|
h.unblock_signals()
|
||||||
self.underglow_color.blockSignals(False)
|
|
||||||
|
|
||||||
def current_color(self):
|
def update_from_keyboard(self):
|
||||||
return QColor.fromHsvF(self.device.keyboard.underglow_color[0] / 255.0,
|
|
||||||
self.device.keyboard.underglow_color[1] / 255.0,
|
|
||||||
self.device.keyboard.underglow_brightness / 255.0)
|
|
||||||
|
|
||||||
def update_color_from_keyboard(self):
|
|
||||||
self.device.keyboard.reload_rgb()
|
self.device.keyboard.reload_rgb()
|
||||||
|
|
||||||
self.block_signals()
|
self.block_signals()
|
||||||
|
|
||||||
self.underglow_brightness.setValue(self.device.keyboard.underglow_brightness)
|
for h in self.handlers:
|
||||||
self.underglow_effect.setCurrentIndex(self.device.keyboard.underglow_effect)
|
h.update_from_keyboard()
|
||||||
self.underglow_color.setStyleSheet("QWidget { background-color: %s}" % self.current_color().name())
|
|
||||||
|
|
||||||
self.unblock_signals()
|
self.unblock_signals()
|
||||||
|
|
||||||
def rebuild(self, device):
|
def rebuild(self, device):
|
||||||
super().rebuild(device)
|
super().rebuild(device)
|
||||||
|
|
||||||
|
for h in self.handlers:
|
||||||
|
h.set_device(device)
|
||||||
|
|
||||||
if not self.valid():
|
if not self.valid():
|
||||||
return
|
return
|
||||||
|
|
||||||
self.update_color_from_keyboard()
|
self.update_from_keyboard()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue