qmk_settings: don't display unsupported settings

main
Ilya Zhuravlev 2021-07-01 15:34:35 -04:00
parent 3318a2c167
commit 9b26c20d32
1 changed files with 47 additions and 7 deletions

View File

@ -19,7 +19,8 @@ class GenericOption:
self.qsid = self.option["qsid"]
self.container = container
self.container.addWidget(QLabel(option["title"]), self.row, 0)
self.lbl = QLabel(option["title"])
self.container.addWidget(self.lbl, self.row, 0)
def reload(self, keyboard):
data = keyboard.qmk_settings_get(self.qsid)
@ -27,6 +28,10 @@ class GenericOption:
raise RuntimeError("failed to retrieve setting {} from keyboard".format(self.option))
return data
def delete(self):
self.lbl.hide()
self.lbl.deleteLater()
class BooleanOption(GenericOption):
@ -50,6 +55,11 @@ class BooleanOption(GenericOption):
checked = int(self.checkbox.isChecked())
return checked << self.qsid_bit
def delete(self):
super().delete()
self.checkbox.hide()
self.checkbox.deleteLater()
class IntegerOption(GenericOption):
@ -68,6 +78,11 @@ class IntegerOption(GenericOption):
def value(self):
return self.spinbox.value().to_bytes(self.option["width"], byteorder="little")
def delete(self):
super().delete()
self.spinbox.hide()
self.spinbox.deleteLater()
class QmkSettings(BasicEditor):
@ -91,13 +106,15 @@ class QmkSettings(BasicEditor):
buttons.addWidget(btn_reset)
self.addLayout(buttons)
self.supported_settings = set()
self.tabs = []
self.create_gui()
self.misc_widgets = []
@staticmethod
def populate_tab(tab, container):
def populate_tab(self, tab, container):
options = []
for field in tab["fields"]:
if field["qsid"] not in self.supported_settings:
continue
if field["type"] == "boolean":
options.append(BooleanOption(field, container))
elif field["type"] == "integer":
@ -106,11 +123,33 @@ class QmkSettings(BasicEditor):
raise RuntimeError("unsupported field type: {}".format(field))
return options
def create_gui(self):
def recreate_gui(self):
# delete old GUI
for tab in self.tabs:
for field in tab:
field.delete()
self.tabs.clear()
for w in self.misc_widgets:
w.hide()
w.deleteLater()
self.misc_widgets.clear()
while self.tabs_widget.count() > 0:
self.tabs_widget.removeTab(0)
with open(self.appctx.get_resource("qmk_settings.json"), "r") as inf:
settings = json.load(inf)
# create new GUI
for tab in settings["tabs"]:
# don't bother creating tabs that would be empty - i.e. at least one qsid in a tab should be supported
use_tab = False
for field in tab["fields"]:
if field["qsid"] in self.supported_settings:
use_tab = True
break
if not use_tab:
continue
w = QWidget()
w.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
container = QGridLayout()
@ -120,12 +159,13 @@ class QmkSettings(BasicEditor):
l.setAlignment(w, QtCore.Qt.AlignHCenter)
w2 = QWidget()
w2.setLayout(l)
self.misc_widgets += [w, w2]
self.tabs_widget.addTab(w2, tab["name"])
self.tabs.append(self.populate_tab(tab, container))
def reload_settings(self):
settings = self.keyboard.qmk_settings_query()
print(settings)
self.supported_settings = set(self.keyboard.qmk_settings_query())
self.recreate_gui()
for tab in self.tabs:
for field in tab: