From cb00696aaed4488de9d7c25e9a3f9d361fdea44a Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Sat, 22 May 2021 12:46:17 -0400 Subject: [PATCH] rgb_configurator: refactor to allow multiple rgb handlers --- src/main/python/rgb_configurator.py | 176 ++++++++++++++++++---------- 1 file changed, 116 insertions(+), 60 deletions(-) diff --git a/src/main/python/rgb_configurator.py b/src/main/python/rgb_configurator.py index 04c10d5..2bdb495 100644 --- a/src/main/python/rgb_configurator.py +++ b/src/main/python/rgb_configurator.py @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0-or-later from PyQt5 import QtCore +from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtGui import QColor from PyQt5.QtWidgets import QWidget, QPushButton, QHBoxLayout, QSizePolicy, QGridLayout, QLabel, QSlider, \ 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): def __init__(self): @@ -73,26 +175,9 @@ class RGBConfigurator(BasicEditor): self.addWidget(w) self.setAlignment(w, QtCore.Qt.AlignHCenter) - self.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) - 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.handler_rgblight = QmkRgblightHandler(self.container) + self.handler_rgblight.update.connect(self.update_from_keyboard) + self.handlers = [self.handler_rgblight] self.addStretch() buttons = QHBoxLayout() @@ -102,30 +187,6 @@ class RGBConfigurator(BasicEditor): save_btn.clicked.connect(self.on_save) 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): self.device.keyboard.save_rgb() @@ -133,35 +194,30 @@ class RGBConfigurator(BasicEditor): return isinstance(self.device, VialKeyboard) and self.device.keyboard.lighting_qmk_rgblight def block_signals(self): - self.underglow_brightness.blockSignals(True) - self.underglow_effect.blockSignals(True) - self.underglow_color.blockSignals(True) + for h in self.handlers: + h.block_signals() def unblock_signals(self): - self.underglow_brightness.blockSignals(False) - self.underglow_effect.blockSignals(False) - self.underglow_color.blockSignals(False) + for h in self.handlers: + h.unblock_signals() - 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) - - def update_color_from_keyboard(self): + def update_from_keyboard(self): self.device.keyboard.reload_rgb() self.block_signals() - 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()) + for h in self.handlers: + h.update_from_keyboard() self.unblock_signals() def rebuild(self, device): super().rebuild(device) + for h in self.handlers: + h.set_device(device) + if not self.valid(): return - self.update_color_from_keyboard() + self.update_from_keyboard()