+ _autoWidgets.clear();
+
+ // 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("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()));
+ else if (widget->inherits("QComboBox"))
+ 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").isValid())
+ autoList->append(child);
+ findAutoWidgets(child, autoList);
+ }
+}
+
+
+QByteArray SettingsPage::autoWidgetPropertyName(QObject *widget) const
+{
+ QByteArray prop;
+ 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";
+ else if (widget->inherits("QComboBox"))
+ 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;
+
+ return prop;