qmk_settings: disable save/undo buttons unless there are changes
parent
c7e782d23c
commit
13f6521076
|
|
@ -3,6 +3,7 @@ import json
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
from PyQt5 import QtCore
|
from PyQt5 import QtCore
|
||||||
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
from PyQt5.QtWidgets import QVBoxLayout, QCheckBox, QGridLayout, QLabel, QWidget, QSizePolicy, QTabWidget, QSpinBox, \
|
from PyQt5.QtWidgets import QVBoxLayout, QCheckBox, QGridLayout, QLabel, QWidget, QSizePolicy, QTabWidget, QSpinBox, \
|
||||||
QHBoxLayout, QPushButton, QMessageBox
|
QHBoxLayout, QPushButton, QMessageBox
|
||||||
|
|
||||||
|
|
@ -11,9 +12,13 @@ from util import tr
|
||||||
from vial_device import VialKeyboard
|
from vial_device import VialKeyboard
|
||||||
|
|
||||||
|
|
||||||
class GenericOption:
|
class GenericOption(QObject):
|
||||||
|
|
||||||
|
changed = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, option, container):
|
def __init__(self, option, container):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
self.row = container.rowCount()
|
self.row = container.rowCount()
|
||||||
self.option = option
|
self.option = option
|
||||||
self.qsid = self.option["qsid"]
|
self.qsid = self.option["qsid"]
|
||||||
|
|
@ -29,6 +34,9 @@ class GenericOption:
|
||||||
self.lbl.hide()
|
self.lbl.hide()
|
||||||
self.lbl.deleteLater()
|
self.lbl.deleteLater()
|
||||||
|
|
||||||
|
def on_change(self):
|
||||||
|
self.changed.emit()
|
||||||
|
|
||||||
|
|
||||||
class BooleanOption(GenericOption):
|
class BooleanOption(GenericOption):
|
||||||
|
|
||||||
|
|
@ -38,6 +46,7 @@ class BooleanOption(GenericOption):
|
||||||
self.qsid_bit = self.option["bit"]
|
self.qsid_bit = self.option["bit"]
|
||||||
|
|
||||||
self.checkbox = QCheckBox()
|
self.checkbox = QCheckBox()
|
||||||
|
self.checkbox.stateChanged.connect(self.on_change)
|
||||||
self.container.addWidget(self.checkbox, self.row, 1)
|
self.container.addWidget(self.checkbox, self.row, 1)
|
||||||
|
|
||||||
def reload(self, keyboard):
|
def reload(self, keyboard):
|
||||||
|
|
@ -66,10 +75,14 @@ class IntegerOption(GenericOption):
|
||||||
self.spinbox = QSpinBox()
|
self.spinbox = QSpinBox()
|
||||||
self.spinbox.setMinimum(option["min"])
|
self.spinbox.setMinimum(option["min"])
|
||||||
self.spinbox.setMaximum(option["max"])
|
self.spinbox.setMaximum(option["max"])
|
||||||
|
self.spinbox.valueChanged.connect(self.on_change)
|
||||||
self.container.addWidget(self.spinbox, self.row, 1)
|
self.container.addWidget(self.spinbox, self.row, 1)
|
||||||
|
|
||||||
def reload(self, keyboard):
|
def reload(self, keyboard):
|
||||||
self.spinbox.setValue(super().reload(keyboard))
|
value = super().reload(keyboard)
|
||||||
|
self.spinbox.blockSignals(True)
|
||||||
|
self.spinbox.setValue(value)
|
||||||
|
self.spinbox.blockSignals(False)
|
||||||
|
|
||||||
def value(self):
|
def value(self):
|
||||||
return self.spinbox.value()
|
return self.spinbox.value()
|
||||||
|
|
@ -90,12 +103,12 @@ class QmkSettings(BasicEditor):
|
||||||
self.addWidget(self.tabs_widget)
|
self.addWidget(self.tabs_widget)
|
||||||
buttons = QHBoxLayout()
|
buttons = QHBoxLayout()
|
||||||
buttons.addStretch()
|
buttons.addStretch()
|
||||||
btn_save = QPushButton(tr("QmkSettings", "Save"))
|
self.btn_save = QPushButton(tr("QmkSettings", "Save"))
|
||||||
btn_save.clicked.connect(self.save_settings)
|
self.btn_save.clicked.connect(self.save_settings)
|
||||||
buttons.addWidget(btn_save)
|
buttons.addWidget(self.btn_save)
|
||||||
btn_undo = QPushButton(tr("QmkSettings", "Undo"))
|
self.btn_undo = QPushButton(tr("QmkSettings", "Undo"))
|
||||||
btn_undo.clicked.connect(self.reload_settings)
|
self.btn_undo.clicked.connect(self.reload_settings)
|
||||||
buttons.addWidget(btn_undo)
|
buttons.addWidget(self.btn_undo)
|
||||||
btn_reset = QPushButton(tr("QmkSettings", "Reset"))
|
btn_reset = QPushButton(tr("QmkSettings", "Reset"))
|
||||||
btn_reset.clicked.connect(self.reset_settings)
|
btn_reset.clicked.connect(self.reset_settings)
|
||||||
buttons.addWidget(btn_reset)
|
buttons.addWidget(btn_reset)
|
||||||
|
|
@ -110,9 +123,13 @@ class QmkSettings(BasicEditor):
|
||||||
if field["qsid"] not in self.keyboard.supported_settings:
|
if field["qsid"] not in self.keyboard.supported_settings:
|
||||||
continue
|
continue
|
||||||
if field["type"] == "boolean":
|
if field["type"] == "boolean":
|
||||||
options.append(BooleanOption(field, container))
|
opt = BooleanOption(field, container)
|
||||||
|
options.append(opt)
|
||||||
|
opt.changed.connect(self.on_change)
|
||||||
elif field["type"] == "integer":
|
elif field["type"] == "integer":
|
||||||
options.append(IntegerOption(field, container))
|
opt = IntegerOption(field, container)
|
||||||
|
options.append(opt)
|
||||||
|
opt.changed.connect(self.on_change)
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("unsupported field type: {}".format(field))
|
raise RuntimeError("unsupported field type: {}".format(field))
|
||||||
return options
|
return options
|
||||||
|
|
@ -162,17 +179,32 @@ class QmkSettings(BasicEditor):
|
||||||
for field in tab:
|
for field in tab:
|
||||||
field.reload(self.keyboard)
|
field.reload(self.keyboard)
|
||||||
|
|
||||||
|
self.on_change()
|
||||||
|
|
||||||
|
def on_change(self):
|
||||||
|
changed = False
|
||||||
|
qsid_values = self.prepare_settings()
|
||||||
|
for qsid, value in qsid_values.items():
|
||||||
|
if self.keyboard.settings[qsid] != value:
|
||||||
|
changed = True
|
||||||
|
self.btn_save.setEnabled(changed)
|
||||||
|
self.btn_undo.setEnabled(changed)
|
||||||
|
|
||||||
def rebuild(self, device):
|
def rebuild(self, device):
|
||||||
super().rebuild(device)
|
super().rebuild(device)
|
||||||
if self.valid():
|
if self.valid():
|
||||||
self.keyboard = device.keyboard
|
self.keyboard = device.keyboard
|
||||||
self.reload_settings()
|
self.reload_settings()
|
||||||
|
|
||||||
def save_settings(self):
|
def prepare_settings(self):
|
||||||
qsid_values = defaultdict(int)
|
qsid_values = defaultdict(int)
|
||||||
for tab in self.tabs:
|
for tab in self.tabs:
|
||||||
for field in tab:
|
for field in tab:
|
||||||
qsid_values[field.qsid] |= field.value()
|
qsid_values[field.qsid] |= field.value()
|
||||||
|
return qsid_values
|
||||||
|
|
||||||
|
def save_settings(self):
|
||||||
|
qsid_values = self.prepare_settings()
|
||||||
for qsid, value in qsid_values.items():
|
for qsid, value in qsid_values.items():
|
||||||
self.keyboard.qmk_settings_set(qsid, value)
|
self.keyboard.qmk_settings_set(qsid, value)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue