cmake: Add missing Boost dependency
[quassel.git] / src / uisupport / settingspage.cpp
index bb9d934..f2b2cf7 100644 (file)
 
 #include "settingspage.h"
 
+#include <utility>
+
 #include <QCheckBox>
 #include <QComboBox>
 #include <QSpinBox>
 #include <QVariant>
 
+#include "fontselector.h"
 #include "uisettings.h"
+#include "widgethelpers.h"
 
-SettingsPage::SettingsPage(const QString &category, const QString &title, QWidget *parent)
-    : QWidget(parent),
-    _category(category),
-    _title(title),
-    _changed(false),
-    _autoWidgetsChanged(false)
-{
-}
-
+SettingsPage::SettingsPage(QString category, QString title, QWidget* parent)
+    : QWidget(parent)
+    , _category(std::move(category))
+    , _title(std::move(title))
+    , _changed(false)
+    , _autoWidgetsChanged(false)
+{}
 
 void SettingsPage::setChangedState(bool hasChanged_)
 {
@@ -47,46 +49,49 @@ void SettingsPage::setChangedState(bool hasChanged_)
     }
 }
 
-
-void SettingsPage::load(QCheckBox *box, bool checked)
+void SettingsPage::load(QCheckBox* box, bool checked)
 {
     box->setProperty("storedValue", checked);
     box->setChecked(checked);
 }
 
-
-bool SettingsPage::hasChanged(QCheckBox *box)
+bool SettingsPage::hasChanged(QCheckBox* box)
 {
     return box->property("storedValue").toBool() != box->isChecked();
 }
 
-
-void SettingsPage::load(QComboBox *box, int index)
+void SettingsPage::load(QComboBox* box, int index)
 {
     box->setProperty("storedValue", index);
     box->setCurrentIndex(index);
 }
 
-
-bool SettingsPage::hasChanged(QComboBox *box)
+bool SettingsPage::hasChanged(QComboBox* box)
 {
     return box->property("storedValue").toInt() != box->currentIndex();
 }
 
-
-void SettingsPage::load(QSpinBox *box, int value)
+void SettingsPage::load(QSpinBox* box, int value)
 {
     box->setProperty("storedValue", value);
     box->setValue(value);
 }
 
-
-bool SettingsPage::hasChanged(QSpinBox *box)
+bool SettingsPage::hasChanged(QSpinBox* box)
 {
     return box->property("storedValue").toInt() != box->value();
 }
+
+void SettingsPage::load(FontSelector* box, QFont value)
+{
+    box->setProperty("storedValue", value);
+    box->setSelectedFont(value);
 }
 
+bool SettingsPage::hasChanged(FontSelector* box)
+{
+    return box->property("storedValue").value<QFont>() != box->selectedFont();
+}
 
 /*** Auto child widget handling ***/
 
@@ -98,36 +103,21 @@ void SettingsPage::initAutoWidgets()
     // 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();
+    if (!connectToWidgetsChangedSignals(_autoWidgets, this, &SettingsPage::autoWidgetHasChanged)) {
+        qWarning() << "SettingsPage::initAutoWidgets(): Unsupported auto widget type(s)!";
     }
 }
 
-
-void SettingsPage::findAutoWidgets(QObject *parent, QObjectList *autoList) const
+void SettingsPage::findAutoWidgets(QObject* parent, QObjectList* autoList) const
 {
-    foreach(QObject *child, parent->children()) {
+    foreach (QObject* child, parent->children()) {
         if (child->property("settingsKey").isValid())
             autoList->append(child);
         findAutoWidgets(child, autoList);
     }
 }
 
-
-QByteArray SettingsPage::autoWidgetPropertyName(QObject *widget) const
+QByteArray SettingsPage::autoWidgetPropertyName(QObject* widget) const
 {
     QByteArray prop;
     if (widget->inherits("ColorButton"))
@@ -148,8 +138,7 @@ QByteArray SettingsPage::autoWidgetPropertyName(QObject *widget) const
     return prop;
 }
 
-
-QString SettingsPage::autoWidgetSettingsKey(QObject *widget) const
+QString SettingsPage::autoWidgetSettingsKey(QObject* widget) const
 {
     QString key = widget->property("settingsKey").toString();
     if (key.isEmpty())
@@ -161,11 +150,10 @@ QString SettingsPage::autoWidgetSettingsKey(QObject *widget) const
     return key;
 }
 
-
 void SettingsPage::autoWidgetHasChanged()
 {
     bool changed_ = false;
-    foreach(QObject *widget, _autoWidgets) {
+    foreach (QObject* widget, _autoWidgets) {
         QVariant curValue = widget->property(autoWidgetPropertyName(widget));
         if (!curValue.isValid())
             qWarning() << "SettingsPage::autoWidgetHasChanged(): Unknown property";
@@ -184,11 +172,10 @@ void SettingsPage::autoWidgetHasChanged()
     }
 }
 
-
 void SettingsPage::load()
 {
     UiSettings s("");
-    foreach(QObject *widget, _autoWidgets) {
+    foreach (QObject* widget, _autoWidgets) {
         QString key = autoWidgetSettingsKey(widget);
         QVariant val;
         if (key.isEmpty())
@@ -206,11 +193,10 @@ void SettingsPage::load()
         emit changed(hasChanged());
 }
 
-
 void SettingsPage::save()
 {
     UiSettings s("");
-    foreach(QObject *widget, _autoWidgets) {
+    foreach (QObject* widget, _autoWidgets) {
         QString key = autoWidgetSettingsKey(widget);
         QVariant val = widget->property(autoWidgetPropertyName(widget));
         widget->setProperty("storedValue", val);
@@ -225,25 +211,22 @@ void SettingsPage::save()
         emit changed(hasChanged());
 }
 
-
 void SettingsPage::defaults()
 {
-    foreach(QObject *widget, _autoWidgets) {
+    foreach (QObject* widget, _autoWidgets) {
         QVariant val = widget->property("defaultValue");
         widget->setProperty(autoWidgetPropertyName(widget), val);
     }
     autoWidgetHasChanged();
 }
 
-
-QVariant SettingsPage::loadAutoWidgetValue(const QString &widgetName)
+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 &)
+void SettingsPage::saveAutoWidgetValue(const QString& widgetName, const QVariant&)
 {
     qWarning() << "Could not save value for SettingsPage widget" << widgetName;
 }