rgb_configurator: refactor to allow multiple rgb handlers

main
Ilya Zhuravlev 2021-05-22 12:46:17 -04:00
parent 841ec5678c
commit cb00696aae
1 changed files with 116 additions and 60 deletions

View File

@ -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()