From c5ed279da0e74adb79c6c2a3e485cb9668b1c130 Mon Sep 17 00:00:00 2001 From: aqua Date: Wed, 24 Aug 2022 16:38:49 +0300 Subject: SettingsDialog: save settings when changed - connect Restore Defaults button --- scripts/rekonf.py | 93 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 46 deletions(-) (limited to 'scripts') diff --git a/scripts/rekonf.py b/scripts/rekonf.py index 48706c3d..941c29c7 100755 --- a/scripts/rekonf.py +++ b/scripts/rekonf.py @@ -13,56 +13,59 @@ import sys from xml.etree import ElementTree -def write_int_entry(entry): - '''Add a QSpinBox connected to an Int entry''' - obj = entry.attrib['key'] - default = entry.find('{*}default').text +def write_int_entry(obj, name, default): + """Add a QSpinBox connected to an Int (obj, name, default)""" print(f' auto* { obj } = new QSpinBox(this);') print(f' { obj }->setValue(s->value("{ obj }", { default }).toInt());') - print(f' formLayout->addRow(tr("{ entry.attrib["name"] }"), { obj });') + print(f' connect({ obj }, &QSpinBox::valueChanged, this, [this]() {{ emit changed(); }});') + print(f' formLayout->addRow(tr("{ name }"), { obj });') -def write_bool_entry(entry): - '''Add a QCheckBox connected to a Bool entry''' - obj = entry.attrib['key'] - default = entry.find('{*}default').text - print(f' auto* { obj } = new QCheckBox(tr("{ entry.attrib["name"] }"), this);') +def write_bool_entry(obj, name, default): + """Add a QCheckBox connected to a Bool (obj, name, default)""" + print(f' auto* { obj } = new QCheckBox(tr("{ name }"), this);') print(f' { obj }->setChecked(s->value("{ obj }", { default }).toBool());') + print(f' connect({ obj }, &QCheckBox::stateChanged, this, [this]() {{ emit changed(); }});') print(f' formLayout->addRow(QString(), { obj });') -def write_string_entry(entry): - '''Add a QLineEdit connected to a String entry''' - obj = entry.attrib['key'] - default = entry.find('{*}default').text +def write_string_entry(obj, name, default): + """Add a QLineEdit connected to a String (obj, name, default)""" print(f' auto* {obj} = new QLineEdit(this);') - print(f' {obj}->setText(s->value("{ obj }", "{ default }").toString());') - print(f' formLayout->addRow(tr("{ entry.attrib["name"] }"), { obj });') + print(f' { obj }->setText(s->value("{ obj }", "{ default }").toString());') + print(f' connect({ obj }, &QLineEdit::textChanged, this, [this]() {{ emit changed(); }});') + print(f' formLayout->addRow(tr("{ name }"), { obj });') -def write_font_entry(entry): - '''Add a QFontComboBox connected to a Font entry''' - obj = entry.attrib['key'] - default = entry.find('{*}default').text +def write_font_entry(obj, name, default): + """Add a QFontComboBox connected to a Font (obj, name, default)""" print(f' auto* { obj } = new QFontComboBox(this);') print(f' { obj }->setCurrentFont(s->value("{ obj }", "{ default }").toString());') - print(f' formLayout->addRow(tr("{ entry.attrib["name"] }"), { obj });') + print(f' connect({ obj }, &QFontComboBox::currentFontChanged, this, [this]() {{ emit changed(); }});') + print(f' formLayout->addRow(tr("{ name }"), { obj });') -def write_shortcut_entry(entry): - '''Add a QKeySequenceEdit connected to a Shortcut entry''' - obj = entry.attrib['key'] - default = entry.find('{*}default').text - print(f' auto* { entry.attrib["key"] } = new QKeySequenceEdit(this);') +def write_shortcut_entry(obj, name, default): + """Add a QKeySequenceEdit connected to a Shortcut (obj, name, default)""" + print(f' auto* { obj } = new QKeySequenceEdit(this);') print(f' { obj }->setKeySequence(s->value("{ obj }", "{ default }").toString());') - print(f' formLayout->addRow(tr("{ entry.attrib["name"] }"), { obj });') + print(f' connect({ obj }, &QKeySequenceEdit::keySequenceChanged, this, [this]() {{ emit changed(); }});') + print(f' formLayout->addRow(tr("{ name }"), { obj });') def generate_group_widget(root, group): - '''Generate a class based on the group name''' + """Generate a class based on the group name""" class_group = group.attrib["name"].replace(' ', '') class_name = group.attrib["name"].replace(' ', '') + 'SettingsWidget' + write_entry_fn = { + 'Int': write_int_entry, + 'Bool': write_bool_entry, + 'String': write_string_entry, + 'Font': write_font_entry, + 'Shortcut': write_shortcut_entry + } + # includes print('// Includes') print('#include "settingswidgets.hpp"') @@ -78,8 +81,11 @@ def generate_group_widget(root, group): print(f'#include <{ include.text }>') print('') + # ctor print(f'{ class_name }::{ class_name }(RekonqSettings *s, QWidget *parent) : SettingsWidget(s, parent) {{') - print(f' s->beginGroup("{ class_group }");') + print(f' setObjectName("{ class_group }");') + if class_group != 'General': + print(f' s->beginGroup("{ class_group }");') print(' auto *formLayout = new QFormLayout;') print(' setLayout(formLayout);') print('') @@ -88,28 +94,22 @@ def generate_group_widget(root, group): for entry in group.findall('{http://www.kde.org/standards/kcfg/1.0}entry'): if entry.attrib.get("hidden") == "true": print(f' // hidden entry { entry.attrib.get("name") }') - elif entry.attrib['type'] == 'Int': - write_int_entry(entry) - elif entry.attrib['type'] == 'Bool': - write_bool_entry(entry) - elif entry.attrib['type'] == 'String': - write_string_entry(entry) - elif entry.attrib['type'] == 'Font': - write_font_entry(entry) - elif entry.attrib['type'] == 'Shortcut': - write_shortcut_entry(entry) else: - print(f'#error entry with unknown type { entry.attrib["type"] }') + obj = entry.attrib['key'] + name = entry.attrib["name"] + default = entry.find('{*}default').text + write_entry_fn.get(entry.attrib['type'])(obj, name, default) + print(f' { obj }->setObjectName("{ obj }");') + print(f' { obj }->setProperty("defaultValue", "{ default }");') print('') - print(' s->endGroup();') + if class_group != 'General': + print(' s->endGroup();') print('}\n') - print(f'void { class_name }::save() {{ }}') - print(f'void { class_name }::reset() {{ }}') - -def generate_group_ini(root, group): +def generate_group_ini(group): + """Generate settings in ini format for group""" group_name = group.attrib["name"].replace(' ', '') print(f'[{ group_name }]') for entry in group.findall('{http://www.kde.org/standards/kcfg/1.0}entry'): @@ -122,6 +122,7 @@ def generate_group_ini(root, group): def main(): + """main function""" parser = argparse.ArgumentParser(description='Generate SettingsWidgets') parser.add_argument('file', type=str, help='kcfg file') parser.add_argument('--group', type=str, required=True, help='Group') @@ -134,7 +135,7 @@ def main(): if args.group == 'all': for group in root.findall('{http://www.kde.org/standards/kcfg/1.0}group'): - generate_group_ini(root, group) + generate_group_ini(group) else: for group in root.findall('{http://www.kde.org/standards/kcfg/1.0}group'): if group.attrib["name"] == args.group: -- cgit v1.2.1