/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel IRC Team *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef _CORECONFIGWIZARD_H_
-#define _CORECONFIGWIZARD_H_
+#pragma once
+
+#include <tuple>
+#include <vector>
-#include <QHash>
-#include <QWizard>
#include <QVariantMap>
+#include <QWizard>
-#include "ui_coreconfigwizardintropage.h"
#include "ui_coreconfigwizardadminuserpage.h"
+#include "ui_coreconfigwizardauthenticationselectionpage.h"
+#include "ui_coreconfigwizardintropage.h"
#include "ui_coreconfigwizardstorageselectionpage.h"
#include "ui_coreconfigwizardsyncpage.h"
+class CoreConnection;
+
namespace CoreConfigWizardPages {
- class SyncPage;
- class SyncRelayPage;
-};
-class CoreConfigWizard : public QWizard {
- Q_OBJECT
-
- public:
- enum {
- IntroPage,
- AdminUserPage,
- StorageSelectionPage,
- SyncPage,
- SyncRelayPage,
- StorageDetailsPage,
- ConclusionPage
+class SyncPage;
+class SyncRelayPage;
+
+} // namespace CoreConfigWizardPages
+
+class CoreConfigWizard : public QWizard
+{
+ Q_OBJECT
+
+public:
+ enum
+ {
+ IntroPage,
+ AdminUserPage,
+ AuthenticationSelectionPage,
+ StorageSelectionPage,
+ SyncPage,
+ SyncRelayPage,
+ StorageDetailsPage,
+ ConclusionPage
};
- CoreConfigWizard(const QList<QVariant> &backends, QWidget *parent = 0);
- QHash<QString, QVariant> backends() const;
+ CoreConfigWizard(CoreConnection* connection, const QVariantList& backendInfos, const QVariantList& authInfos, QWidget* parent = nullptr);
+
+ inline CoreConnection* coreConnection() const { return _connection; }
- signals:
- void setupCore(const QVariant &setupData);
- void loginToCore(const QVariantMap &loginData);
+signals:
+ void setupCore(const QVariant& setupData);
+ void loginToCore(const QString& user, const QString& password, bool rememberPassword);
- public slots:
- void loginSuccess();
+public slots:
void syncFinished();
- private slots:
- void prepareCoreSetup(const QString &backend);
+private slots:
+ void prepareCoreSetup(const QString& backend,
+ const QVariantMap& properties,
+ const QString& authenticator,
+ const QVariantMap& authProperties);
void coreSetupSuccess();
- void coreSetupFailed(const QString &);
+ void coreSetupFailed(const QString&);
void startOver();
- private:
- QHash<QString, QVariant> _backends;
- CoreConfigWizardPages::SyncPage *syncPage;
- CoreConfigWizardPages::SyncRelayPage *syncRelayPage;
+private:
+ CoreConfigWizardPages::SyncPage* syncPage;
+ CoreConfigWizardPages::SyncRelayPage* syncRelayPage;
+
+ CoreConnection* _connection;
};
namespace CoreConfigWizardPages {
- class IntroPage : public QWizardPage {
+class IntroPage : public QWizardPage
+{
Q_OBJECT
- public:
- IntroPage(QWidget *parent = 0);
- int nextId() const;
- private:
- Ui::CoreConfigWizardIntroPage ui;
- };
+public:
+ IntroPage(QWidget* parent = nullptr);
+ int nextId() const override;
- class AdminUserPage : public QWizardPage {
+private:
+ Ui::CoreConfigWizardIntroPage ui;
+};
+
+class AdminUserPage : public QWizardPage
+{
Q_OBJECT
- public:
- AdminUserPage(QWidget *parent = 0);
- int nextId() const;
- bool isComplete() const;
- private:
- Ui::CoreConfigWizardAdminUserPage ui;
- };
+public:
+ AdminUserPage(QWidget* parent = nullptr);
+ int nextId() const override;
+ bool isComplete() const override;
+
+private:
+ Ui::CoreConfigWizardAdminUserPage ui;
+};
+
+class AuthenticationSelectionPage : public QWizardPage
+{
+ Q_OBJECT
+ using FieldInfo = std::tuple<QString, QString, QVariant>;
+
+public:
+ AuthenticationSelectionPage(const QVariantList& authInfos, QWidget* parent = nullptr);
+ int nextId() const override;
+ QString displayName() const;
+ QString authenticator() const;
+ QVariantMap authProperties() const;
+
+private slots:
+ void on_backendList_currentIndexChanged(int index);
+
+private:
+ Ui::CoreConfigWizardAuthenticationSelectionPage ui;
+ std::vector<QVariantMap> _authProperties;
+ std::vector<std::vector<FieldInfo>> _authFields;
+};
- class StorageSelectionPage : public QWizardPage {
+class StorageSelectionPage : public QWizardPage
+{
Q_OBJECT
+ using FieldInfo = std::tuple<QString, QString, QVariant>;
+
+public:
+ StorageSelectionPage(const QVariantList& backendInfos, QWidget* parent = nullptr);
+ int nextId() const override;
+ QString displayName() const;
+ QString backend() const;
+ QVariantMap backendProperties() const;
+
+private slots:
+ void on_backendList_currentIndexChanged(int index);
+
+private:
+ Ui::CoreConfigWizardStorageSelectionPage ui;
+ std::vector<QVariantMap> _backendProperties;
+ std::vector<std::vector<FieldInfo>> _backendFields;
+};
- public:
- StorageSelectionPage(const QHash<QString, QVariant> &backends, QWidget *parent = 0);
- int nextId() const;
- QString selectedBackend() const;
- private slots:
- void on_backendList_currentIndexChanged();
- private:
- Ui::CoreConfigWizardStorageSelectionPage ui;
- QHash<QString, QVariant> _backends;
- };
-
- class SyncPage : public QWizardPage {
+class SyncPage : public QWizardPage
+{
Q_OBJECT
- public:
- SyncPage(QWidget *parent = 0);
- void initializePage();
- int nextId() const;
- bool isComplete() const;
+public:
+ SyncPage(QWidget* parent = nullptr);
+ void initializePage() override;
+ int nextId() const override;
+ bool isComplete() const override;
- public slots:
- void setStatus(const QString &status);
- void setError(bool);
- void setComplete(bool);
+public slots:
+ void setStatus(const QString& status);
+ void setError(bool);
+ void setComplete(bool);
- signals:
- void setupCore(const QString &backend);
+signals:
+ void setupCore(const QString& backend, const QVariantMap&, const QString& authenticator, const QVariantMap&);
- private:
- Ui::CoreConfigWizardSyncPage ui;
- bool complete;
- bool hasError;
- };
+private:
+ Ui::CoreConfigWizardSyncPage ui;
+ bool _complete{false};
+ bool _hasError{false};
+};
- class SyncRelayPage : public QWizardPage {
+class SyncRelayPage : public QWizardPage
+{
Q_OBJECT
- public:
- SyncRelayPage(QWidget *parent = 0);
- int nextId() const;
- enum Mode { Success, Error };
-
- public slots:
- void setMode(Mode);
+public:
+ SyncRelayPage(QWidget* parent = nullptr);
+ int nextId() const override;
+ enum Mode
+ {
+ Success,
+ Error
+ };
- signals:
- void startOver() const;
+public slots:
+ void setMode(Mode);
- private:
- Mode mode;
- };
+signals:
+ void startOver() const;
-}
+private:
+ Mode mode;
+};
-#endif
+} // namespace CoreConfigWizardPages