cmake: avoid de-duplication of user's CXXFLAGS
[quassel.git] / src / qtui / coreconfigwizard.cpp
index 669d670..72a16bb 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2018 by the Quassel Project                        *
+ *   Copyright (C) 2005-2022 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 #include "coreconfigwizard.h"
 
-#include <QDebug>
 #include <QAbstractButton>
 #include <QCoreApplication>
+#include <QDebug>
 #include <QFormLayout>
 #include <QSpinBox>
 
 #include "client.h"
 #include "coreconnection.h"
 #include "icon.h"
+#include "util.h"
 
 namespace {
 
-QGroupBox *createDescriptionBox(const QString &description)
+QGroupBox* createDescriptionBox(const QString& description)
 {
     auto box = new QGroupBox;
     auto layout = new QVBoxLayout(box);
@@ -44,9 +45,8 @@ QGroupBox *createDescriptionBox(const QString &description)
     return box;
 }
 
-
 template<typename FieldInfo>
-QGroupBox *createFieldBox(const QString &title, const std::vector<FieldInfo> &fieldInfos)
+QGroupBox* createFieldBox(const QString& title, const std::vector<FieldInfo>& fieldInfos)
 {
     // Create a config UI based on the field types sent from the backend
     // We make some assumptions here (like integer range and password field names) that may not
@@ -54,29 +54,29 @@ QGroupBox *createFieldBox(const QString &title, const std::vector<FieldInfo> &fi
     // provide specialized config widgets for those (which may be a good idea anyway, e.g. if we
     // think about client-side translations...)
 
-    auto *fieldBox = new QGroupBox;
+    autofieldBox = new QGroupBox;
     fieldBox->setTitle(title);
-    auto *formLayout = new QFormLayout;
+    autoformLayout = new QFormLayout;
     fieldBox->setLayout(formLayout);
 
-    for (auto &&fieldInfo : fieldInfos) {
-        QWidget *widget {nullptr};
+    for (auto&& fieldInfo : fieldInfos) {
+        QWidget* widget{nullptr};
         switch (std::get<2>(fieldInfo).type()) {
-            case QVariant::Int:
-                widget = new QSpinBox(fieldBox);
-                // Here we assume that int fields are always in 16 bit range, like ports
-                static_cast<QSpinBox *>(widget)->setMinimum(0);
-                static_cast<QSpinBox *>(widget)->setMaximum(65535);
-                static_cast<QSpinBox *>(widget)->setValue(std::get<2>(fieldInfo).toInt());
-                break;
-            case QVariant::String:
-                widget = new QLineEdit(std::get<2>(fieldInfo).toString(), fieldBox);
-                // Here we assume that fields named something with "password" are actual password inputs
-                if (std::get<0>(fieldInfo).toLower().contains("password"))
-                    static_cast<QLineEdit *>(widget)->setEchoMode(QLineEdit::Password);
-                break;
-            default:
-                qWarning() << "Unsupported type for backend property" << std::get<0>(fieldInfo);
+        case QVariant::Int:
+            widget = new QSpinBox(fieldBox);
+            // Here we assume that int fields are always in 16 bit range, like ports
+            static_cast<QSpinBox*>(widget)->setMinimum(0);
+            static_cast<QSpinBox*>(widget)->setMaximum(65535);
+            static_cast<QSpinBox*>(widget)->setValue(std::get<2>(fieldInfo).toInt());
+            break;
+        case QVariant::String:
+            widget = new QLineEdit(std::get<2>(fieldInfo).toString(), fieldBox);
+            // Here we assume that fields named something with "password" are actual password inputs
+            if (std::get<0>(fieldInfo).toLower().contains("password"))
+                static_cast<QLineEdit*>(widget)->setEchoMode(QLineEdit::Password);
+            break;
+        default:
+            qWarning() << "Unsupported type for backend property" << std::get<0>(fieldInfo);
         }
         if (widget) {
             widget->setObjectName(std::get<0>(fieldInfo));
@@ -86,48 +86,46 @@ QGroupBox *createFieldBox(const QString &title, const std::vector<FieldInfo> &fi
     return fieldBox;
 }
 
-
 template<typename FieldInfo>
-QVariantMap propertiesFromFieldWidgets(QGroupBox *fieldBox, const std::vector<FieldInfo> &fieldInfos)
+QVariantMap propertiesFromFieldWidgets(QGroupBox* fieldBox, const std::vector<FieldInfo>& fieldInfos)
 {
     QVariantMap properties;
     if (!fieldBox)
         return properties;
 
-    for (auto &&fieldInfo : fieldInfos) {
+    for (auto&& fieldInfo : fieldInfos) {
         QString key = std::get<0>(fieldInfo);
         QVariant value;
         switch (std::get<2>(fieldInfo).type()) {
-            case QVariant::Int: {
-                auto *spinBox = fieldBox->findChild<QSpinBox *>(key);
-                if (spinBox)
-                    value = spinBox->value();
-                else
-                    qWarning() << "Could not find child widget for field" << key;
-                break;
-            }
-            case QVariant::String: {
-                auto *lineEdit = fieldBox->findChild<QLineEdit *>(key);
-                if (lineEdit)
-                    value = lineEdit->text();
-                else
-                    qWarning() << "Could not find child widget for field" << key;
-                break;
-            }
-            default:
-                qWarning() << "Unsupported type for backend property" << key;
+        case QVariant::Int: {
+            auto* spinBox = fieldBox->findChild<QSpinBox*>(key);
+            if (spinBox)
+                value = spinBox->value();
+            else
+                qWarning() << "Could not find child widget for field" << key;
+            break;
+        }
+        case QVariant::String: {
+            auto* lineEdit = fieldBox->findChild<QLineEdit*>(key);
+            if (lineEdit)
+                value = lineEdit->text();
+            else
+                qWarning() << "Could not find child widget for field" << key;
+            break;
+        }
+        default:
+            qWarning() << "Unsupported type for backend property" << key;
         }
         properties[key] = std::move(value);
     }
     return properties;
 }
 
-} // anon
-
+}  // namespace
 
-CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QVariantList &backendInfos, const QVariantList &authInfos, QWidget *parent)
-    : QWizard(parent),
-    _connection{connection}
+CoreConfigWizard::CoreConfigWizard(CoreConnection* connection, const QVariantList& backendInfos, const QVariantList& authInfos, QWidget* parent)
+    : QWizard(parent)
+    _connection{connection}
 {
     setModal(true);
     setAttribute(Qt::WA_DeleteOnClose);
@@ -137,8 +135,7 @@ CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QVariantLis
     setPage(AuthenticationSelectionPage, new CoreConfigWizardPages::AuthenticationSelectionPage(authInfos, this));
     setPage(StorageSelectionPage, new CoreConfigWizardPages::StorageSelectionPage(backendInfos, this));
     syncPage = new CoreConfigWizardPages::SyncPage(this);
-    connect(syncPage, &CoreConfigWizardPages::SyncPage::setupCore,
-            this, &CoreConfigWizard::prepareCoreSetup);
+    connect(syncPage, &CoreConfigWizardPages::SyncPage::setupCore, this, &CoreConfigWizard::prepareCoreSetup);
     setPage(SyncPage, syncPage);
     syncRelayPage = new CoreConfigWizardPages::SyncRelayPage(this);
     connect(syncRelayPage, &CoreConfigWizardPages::SyncRelayPage::startOver, this, &CoreConfigWizard::startOver);
@@ -165,8 +162,7 @@ CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QVariantLis
     connect(connection, &CoreConnection::coreSetupSuccess, this, &CoreConfigWizard::coreSetupSuccess);
     connect(connection, &CoreConnection::coreSetupFailed, this, &CoreConfigWizard::coreSetupFailed);
     connect(connection, &CoreConnection::synchronized, this, &CoreConfigWizard::syncFinished);
-    connect(this, SIGNAL(rejected()), connection, SLOT(disconnectFromCore()));
-
+    connect(this, &QDialog::rejected, connection, selectOverload<>(&CoreConnection::disconnectFromCore));
 
     // Resize all pages to the size hint of the largest one, so the wizard is large enough
     QSize maxSize;
@@ -180,79 +176,85 @@ CoreConfigWizard::CoreConfigWizard(CoreConnection *connection, const QVariantLis
     }
 }
 
-
-void CoreConfigWizard::prepareCoreSetup(const QString &backend, const QVariantMap &properties, const QString &authenticator, const QVariantMap &authProperties)
+void CoreConfigWizard::prepareCoreSetup(const QString& backend,
+                                        const QVariantMap& properties,
+                                        const QString& authenticator,
+                                        const QVariantMap& authProperties)
 {
     // Prevent the user from changing any settings he already specified...
-    for (auto &&idx : visitedPages())
+    for (auto&& idx : visitedPages())
         page(idx)->setEnabled(false);
 
     // FIXME? We need to be able to set up older cores that don't have auth backend support.
     // So if the core doesn't support that feature, don't pass those parameters.
     if (!Client::isCoreFeatureEnabled(Quassel::Feature::Authenticators)) {
-        coreConnection()->setupCore(Protocol::SetupData(field("adminUser.user").toString(), field("adminUser.password").toString(), backend, properties));
+        coreConnection()->setupCore(
+            Protocol::SetupData(field("adminUser.user").toString(), field("adminUser.password").toString(), backend, properties));
     }
     else {
-        coreConnection()->setupCore(Protocol::SetupData(field("adminUser.user").toString(), field("adminUser.password").toString(), backend, properties, authenticator, authProperties));
+        coreConnection()->setupCore(Protocol::SetupData(field("adminUser.user").toString(),
+                                                        field("adminUser.password").toString(),
+                                                        backend,
+                                                        properties,
+                                                        authenticator,
+                                                        authProperties));
     }
 }
 
-
 void CoreConfigWizard::coreSetupSuccess()
 {
     syncPage->setStatus(tr("Your core has been successfully configured. Logging you in..."));
     syncPage->setError(false);
     syncRelayPage->setMode(CoreConfigWizardPages::SyncRelayPage::Success);
-    coreConnection()->loginToCore(field("adminUser.user").toString(), field("adminUser.password").toString(), field("adminUser.rememberPasswd").toBool());
+    coreConnection()->loginToCore(field("adminUser.user").toString(),
+                                  field("adminUser.password").toString(),
+                                  field("adminUser.rememberPasswd").toBool());
 }
 
-
-void CoreConfigWizard::coreSetupFailed(const QString &error)
+void CoreConfigWizard::coreSetupFailed(const QString& error)
 {
     syncPage->setStatus(tr("Core configuration failed:<br><b>%1</b><br>Press <em>Next</em> to start over.").arg(error));
     syncPage->setError(true);
     syncRelayPage->setMode(CoreConfigWizardPages::SyncRelayPage::Error);
-    //foreach(int idx, visitedPages()) page(idx)->setEnabled(true);
-    //setStartId(SyncPage);
-    //restart();
+    // foreach(int idx, visitedPages()) page(idx)->setEnabled(true);
+    // setStartId(SyncPage);
+    // restart();
 }
 
-
 void CoreConfigWizard::startOver()
 {
-    foreach(int idx, visitedPages()) page(idx)->setEnabled(true);
+    foreach (int idx, visitedPages())
+        page(idx)->setEnabled(true);
     setStartId(CoreConfigWizard::AdminUserPage);
     restart();
 }
 
-
 void CoreConfigWizard::syncFinished()
 {
     accept();
 }
 
-
 namespace CoreConfigWizardPages {
 /*** Intro Page ***/
 
-IntroPage::IntroPage(QWidget *parent) : QWizardPage(parent)
+IntroPage::IntroPage(QWidget* parent)
+    : QWizardPage(parent)
 {
     ui.setupUi(this);
     setTitle(tr("Introduction"));
-    //setSubTitle(tr("foobar"));
-    //setPixmap(QWizard::WatermarkPixmap, QPixmap(":icons/quassel-icon.png"));
+    // setSubTitle(tr("foobar"));
+    // setPixmap(QWizard::WatermarkPixmap, QPixmap(":icons/quassel-icon.png"));
 }
 
-
 int IntroPage::nextId() const
 {
     return CoreConfigWizard::AdminUserPage;
 }
 
-
 /*** Admin User Page ***/
 
-AdminUserPage::AdminUserPage(QWidget *parent) : QWizardPage(parent)
+AdminUserPage::AdminUserPage(QWidget* parent)
+    : QWizardPage(parent)
 {
     ui.setupUi(this);
     setTitle(tr("Create Admin User"));
@@ -264,7 +266,6 @@ AdminUserPage::AdminUserPage(QWidget *parent) : QWizardPage(parent)
     registerField("adminUser.rememberPasswd", ui.rememberPasswd);
 }
 
-
 int AdminUserPage::nextId() const
 {
     // If the core doesn't support auth backends, skip that page!
@@ -276,7 +277,6 @@ int AdminUserPage::nextId() const
     }
 }
 
-
 bool AdminUserPage::isComplete() const
 {
     bool ok = !ui.user->text().isEmpty() && !ui.password->text().isEmpty() && ui.password->text() == ui.password2->text();
@@ -285,7 +285,7 @@ bool AdminUserPage::isComplete() const
 
 /*** Authentication Selection Page ***/
 
-AuthenticationSelectionPage::AuthenticationSelectionPage(const QVariantList &authInfos, QWidget *parent)
+AuthenticationSelectionPage::AuthenticationSelectionPage(const QVariantList& authInfos, QWidget* parent)
     : QWizardPage(parent)
 {
     ui.setupUi(this);
@@ -295,13 +295,13 @@ AuthenticationSelectionPage::AuthenticationSelectionPage(const QVariantList &aut
 
     registerField("authentication.backend", ui.backendList);
 
-    for (auto &&authInfo : authInfos) {
+    for (auto&& authInfo : authInfos) {
         auto props = authInfo.toMap();
         // Extract field infos to avoid having to reparse the list
         std::vector<FieldInfo> fields;
-        const auto &list = props["SetupData"].toList();
+        const autolist = props["SetupData"].toList();
         for (int i = 0; i + 2 < list.size(); i += 3) {
-            fields.emplace_back(std::make_tuple(list[i].toString(), list[i+1].toString(), list[i+2]));
+            fields.emplace_back(std::make_tuple(list[i].toString(), list[i + 1].toString(), list[i + 2]));
         }
         props.remove("SetupData");
 
@@ -328,32 +328,27 @@ AuthenticationSelectionPage::AuthenticationSelectionPage(const QVariantList &aut
     ui.backendList->setCurrentIndex(0);
 }
 
-
 int AuthenticationSelectionPage::nextId() const
 {
     return CoreConfigWizard::StorageSelectionPage;
 }
 
-
 QString AuthenticationSelectionPage::displayName() const
 {
     return ui.backendList->currentText();
 }
 
-
 QString AuthenticationSelectionPage::authenticator() const
 {
     return ui.backendList->currentData().toString();
 }
 
-
 QVariantMap AuthenticationSelectionPage::authProperties() const
 {
-    return propertiesFromFieldWidgets(qobject_cast<QGroupBox *>(ui.authSettingsStack->currentWidget()),
+    return propertiesFromFieldWidgets(qobject_cast<QGroupBox*>(ui.authSettingsStack->currentWidget()),
                                       _authFields[ui.backendList->currentIndex()]);
 }
 
-
 void AuthenticationSelectionPage::on_backendList_currentIndexChanged(int index)
 {
     ui.descriptionStack->setCurrentIndex(index);
@@ -363,7 +358,7 @@ void AuthenticationSelectionPage::on_backendList_currentIndexChanged(int index)
 
 /*** Storage Selection Page ***/
 
-StorageSelectionPage::StorageSelectionPage(const QVariantList &backendInfos, QWidget *parent)
+StorageSelectionPage::StorageSelectionPage(const QVariantList& backendInfos, QWidget* parent)
     : QWizardPage(parent)
 {
     ui.setupUi(this);
@@ -374,17 +369,17 @@ StorageSelectionPage::StorageSelectionPage(const QVariantList &backendInfos, QWi
 
     registerField("storage.backend", ui.backendList);
 
-    int defaultIndex {0};  // Legacy cores send backend infos in arbitrary order
+    int defaultIndex{0};  // Legacy cores send backend infos in arbitrary order
 
-    for (auto &&backendInfo : backendInfos) {
+    for (auto&& backendInfo : backendInfos) {
         auto props = backendInfo.toMap();
         // Extract field infos to avoid having to reparse the list
         std::vector<FieldInfo> fields;
 
         // Legacy cores (prior to 0.13) didn't send SetupData for storage backends; deal with this
         if (!props.contains("SetupData")) {
-            const auto &defaultValues = props["SetupDefaults"].toMap();
-            for (auto &&key : props["SetupKeys"].toStringList()) {
+            const autodefaultValues = props["SetupDefaults"].toMap();
+            for (auto&& key : props["SetupKeys"].toStringList()) {
                 fields.emplace_back(std::make_tuple(key, key, defaultValues.value(key, QString{})));
             }
             if (props.value("IsDefault", false).toBool()) {
@@ -392,9 +387,9 @@ StorageSelectionPage::StorageSelectionPage(const QVariantList &backendInfos, QWi
             }
         }
         else {
-            const auto &list = props["SetupData"].toList();
+            const autolist = props["SetupData"].toList();
             for (int i = 0; i + 2 < list.size(); i += 3) {
-                fields.emplace_back(std::make_tuple(list[i].toString(), list[i+1].toString(), list[i+2]));
+                fields.emplace_back(std::make_tuple(list[i].toString(), list[i + 1].toString(), list[i + 2]));
             }
             props.remove("SetupData");
         }
@@ -426,32 +421,27 @@ StorageSelectionPage::StorageSelectionPage(const QVariantList &backendInfos, QWi
     ui.backendList->setCurrentIndex(defaultIndex);
 }
 
-
 int StorageSelectionPage::nextId() const
 {
     return CoreConfigWizard::SyncPage;
 }
 
-
 QString StorageSelectionPage::displayName() const
 {
     return ui.backendList->currentText();
 }
 
-
 QString StorageSelectionPage::backend() const
 {
     return ui.backendList->currentData().toString();
 }
 
-
 QVariantMap StorageSelectionPage::backendProperties() const
 {
-    return propertiesFromFieldWidgets(qobject_cast<QGroupBox *>(ui.storageSettingsStack->currentWidget()),
+    return propertiesFromFieldWidgets(qobject_cast<QGroupBox*>(ui.storageSettingsStack->currentWidget()),
                                       _backendFields[ui.backendList->currentIndex()]);
 }
 
-
 void StorageSelectionPage::on_backendList_currentIndexChanged(int index)
 {
     ui.descriptionStack->setCurrentIndex(index);
@@ -459,17 +449,16 @@ void StorageSelectionPage::on_backendList_currentIndexChanged(int index)
     ui.storageSettingsStack->setVisible(!_backendFields[index].empty());
 }
 
-
 /*** Sync Page ***/
 
-SyncPage::SyncPage(QWidget *parent) : QWizardPage(parent)
+SyncPage::SyncPage(QWidget* parent)
+    : QWizardPage(parent)
 {
     ui.setupUi(this);
     setTitle(tr("Storing Your Settings"));
     setSubTitle(tr("Your settings are now being stored in the core, and you will be logged in automatically."));
 }
 
-
 void SyncPage::initializePage()
 {
     _complete = false;
@@ -477,13 +466,13 @@ void SyncPage::initializePage()
     emit completeChanged();
 
     // Fill in sync info about the storage layer.
-    auto *storagePage = qobject_cast<StorageSelectionPage *>(wizard()->page(CoreConfigWizard::StorageSelectionPage));
+    auto* storagePage = qobject_cast<StorageSelectionPage*>(wizard()->page(CoreConfigWizard::StorageSelectionPage));
     QString backend = storagePage->backend();
     QVariantMap backendProperties = storagePage->backendProperties();
     ui.backend->setText(storagePage->displayName());
 
     // Fill in sync info about the authentication layer.
-    auto *authPage = qobject_cast<AuthenticationSelectionPage *>(wizard()->page(CoreConfigWizard::AuthenticationSelectionPage));
+    auto* authPage = qobject_cast<AuthenticationSelectionPage*>(wizard()->page(CoreConfigWizard::AuthenticationSelectionPage));
     QString authenticator = authPage->authenticator();
     QVariantMap authProperties = authPage->authProperties();
     ui.authenticator->setText(authPage->displayName());
@@ -493,7 +482,6 @@ void SyncPage::initializePage()
     emit setupCore(backend, backendProperties, authenticator, authProperties);
 }
 
-
 int SyncPage::nextId() const
 {
     if (!_hasError)
@@ -501,19 +489,16 @@ int SyncPage::nextId() const
     return CoreConfigWizard::SyncRelayPage;
 }
 
-
 bool SyncPage::isComplete() const
 {
     return _complete || _hasError;
 }
 
-
-void SyncPage::setStatus(const QString &status)
+void SyncPage::setStatus(const QString& status)
 {
     ui.status->setText(status);
 }
 
-
 void SyncPage::setError(bool e)
 {
     _hasError = e;
@@ -521,22 +506,20 @@ void SyncPage::setError(bool e)
     emit completeChanged();
 }
 
-
 void SyncPage::setComplete(bool c)
 {
     _complete = c;
     completeChanged();
 }
 
-
 /*** Sync Relay Page ***/
 
-SyncRelayPage::SyncRelayPage(QWidget *parent) : QWizardPage(parent)
+SyncRelayPage::SyncRelayPage(QWidget* parent)
+    : QWizardPage(parent)
 {
     mode = Success;
 }
 
-
 void SyncRelayPage::setMode(Mode m)
 {
     mode = m;
@@ -547,4 +530,4 @@ int SyncRelayPage::nextId() const
     emit startOver();
     return 0;
 }
-}  /* namespace CoreConfigWizardPages */
+} /* namespace CoreConfigWizardPages */