#include <QSpinBox>
#include <QVariant>
-#include <QDebug>
-
#include "uisettings.h"
SettingsPage::SettingsPage(const QString &category, const QString &title, QWidget *parent)
void SettingsPage::initAutoWidgets() {
_autoWidgets.clear();
- if(settingsKey().isNull())
- return;
-
// find all descendants that should be considered auto widgets
// we need to climb the QObject tree recursively
findAutoWidgets(this, &_autoWidgets);
foreach(QObject *widget, _autoWidgets) {
- if(widget->inherits("QAbstractButton") || widget->inherits("QGroupBox"))
+ if(widget->inherits("ColorButton"))
+ connect(widget, SIGNAL(colorChanged(QColor)), SLOT(autoWidgetHasChanged()));
+ else if(widget->inherits("QAbstractButton") || widget->inherits("QGroupBox"))
connect(widget, SIGNAL(toggled(bool)), SLOT(autoWidgetHasChanged()));
else if(widget->inherits("QLineEdit") || widget->inherits("QTextEdit"))
connect(widget, SIGNAL(textChanged(const QString &)), SLOT(autoWidgetHasChanged()));
connect(widget, SIGNAL(currentIndexChanged(int)), SLOT(autoWidgetHasChanged()));
else if(widget->inherits("QSpinBox"))
connect(widget, SIGNAL(valueChanged(int)), SLOT(autoWidgetHasChanged()));
+ else if(widget->inherits("FontSelector"))
+ connect(widget, SIGNAL(fontChanged(QFont)), SLOT(autoWidgetHasChanged()));
else
qWarning() << "SettingsPage::init(): Unknown autoWidget type" << widget->metaObject()->className();
}
void SettingsPage::findAutoWidgets(QObject *parent, QObjectList *autoList) const {
foreach(QObject *child, parent->children()) {
- if(!child->property("settingsKey").toString().isEmpty())
+ if(child->property("settingsKey").isValid())
autoList->append(child);
findAutoWidgets(child, autoList);
}
QByteArray SettingsPage::autoWidgetPropertyName(QObject *widget) const {
QByteArray prop;
- if(widget->inherits("QAbstractButton") || widget->inherits("QGroupBox"))
+ if(widget->inherits("ColorButton"))
+ prop = "color";
+ else if(widget->inherits("QAbstractButton") || widget->inherits("QGroupBox"))
prop = "checked";
else if(widget->inherits("QLineEdit") || widget->inherits("QTextEdit"))
prop = "text";
prop = "currentIndex";
else if(widget->inherits("QSpinBox"))
prop = "value";
+ else if(widget->inherits("FontSelector"))
+ prop = "selectedFont";
else
qWarning() << "SettingsPage::autoWidgetPropertyName(): Unhandled widget type for" << widget;
QString SettingsPage::autoWidgetSettingsKey(QObject *widget) const {
QString key = widget->property("settingsKey").toString();
+ if(key.isEmpty())
+ return QString("");
if(key.startsWith('/'))
key.remove(0, 1);
else
void SettingsPage::load() {
UiSettings s("");
foreach(QObject *widget, _autoWidgets) {
- QVariant val = s.value(autoWidgetSettingsKey(widget), widget->property("defaultValue"));
+ QString key = autoWidgetSettingsKey(widget);
+ QVariant val;
+ if(key.isEmpty())
+ val = loadAutoWidgetValue(widget->objectName());
+ else
+ val = s.value(key, QVariant());
+ if(!val.isValid())
+ val = widget->property("defaultValue");
widget->setProperty(autoWidgetPropertyName(widget), val);
widget->setProperty("storedValue", val);
}
void SettingsPage::save() {
UiSettings s("");
foreach(QObject *widget, _autoWidgets) {
+ QString key = autoWidgetSettingsKey(widget);
QVariant val = widget->property(autoWidgetPropertyName(widget));
widget->setProperty("storedValue", val);
- s.setValue(autoWidgetSettingsKey(widget), val);
+ if(key.isEmpty())
+ saveAutoWidgetValue(widget->objectName(), val);
+ else
+ s.setValue(key, val);
}
bool old = hasChanged();
_autoWidgetsChanged = _changed = false;
}
autoWidgetHasChanged();
}
+
+QVariant SettingsPage::loadAutoWidgetValue(const QString &widgetName) {
+ qWarning() << "Could not load value for SettingsPage widget" << widgetName;
+ return QVariant();
+}
+
+void SettingsPage::saveAutoWidgetValue(const QString &widgetName, const QVariant &) {
+ qWarning() << "Could not save value for SettingsPage widget" << widgetName;
+}
+