src: Yearly copyright bump
[quassel.git] / src / qtui / coreconfigwizard.h
index d948848..72dd0aa 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2015 by the Quassel Project                        *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   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;
-};
+
+}  // namespace CoreConfigWizardPages
 
 class CoreConfigWizard : public QWizard
 {
     Q_OBJECT
 
 public:
-    enum {
+    enum
+    {
         IntroPage,
         AdminUserPage,
+        AuthenticationSelectionPage,
         StorageSelectionPage,
         SyncPage,
         SyncRelayPage,
@@ -52,112 +58,138 @@ public:
         ConclusionPage
     };
 
-    CoreConfigWizard(CoreConnection *connection, 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; }
+    inline CoreConnectioncoreConnection() const { return _connection; }
 
 signals:
-    void setupCore(const QVariant &setupData);
-    void loginToCore(const QString &user, const QString &password, bool rememberPassword);
+    void setupCore(const QVariantsetupData);
+    void loginToCore(const QString& user, const QString& password, bool rememberPassword);
 
 public slots:
-    void loginSuccess();
     void syncFinished();
 
 private slots:
-    void prepareCoreSetup(const QString &backend, const QVariantMap &connectionProperties);
+    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;
+    CoreConfigWizardPages::SyncPage* syncPage;
+    CoreConfigWizardPages::SyncRelayPage* syncRelayPage;
 
-    CoreConnection *_connection;
+    CoreConnection_connection;
 };
 
-
 namespace CoreConfigWizardPages {
+
 class IntroPage : public QWizardPage
 {
     Q_OBJECT
 
 public:
-    IntroPage(QWidget *parent = 0);
-    int nextId() const;
+    IntroPage(QWidget* parent = nullptr);
+    int nextId() const override;
+
 private:
     Ui::CoreConfigWizardIntroPage ui;
 };
 
-
 class AdminUserPage : public QWizardPage
 {
     Q_OBJECT
 
 public:
-    AdminUserPage(QWidget *parent = 0);
-    int nextId() const;
-    bool isComplete() const;
+    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
 {
     Q_OBJECT
+    using FieldInfo = std::tuple<QString, QString, QVariant>;
 
 public:
-    StorageSelectionPage(const QHash<QString, QVariant> &backends, QWidget *parent = 0);
-    int nextId() const;
-    QString selectedBackend() const;
-    QVariantMap connectionProperties() const;
+    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();
+    void on_backendList_currentIndexChanged(int index);
+
 private:
     Ui::CoreConfigWizardStorageSelectionPage ui;
-    QGroupBox *_connectionBox;
-    QHash<QString, QVariant> _backends;
+    std::vector<QVariantMap> _backendProperties;
+    std::vector<std::vector<FieldInfo>> _backendFields;
 };
 
-
 class SyncPage : public QWizardPage
 {
     Q_OBJECT
 
 public:
-    SyncPage(QWidget *parent = 0);
-    void initializePage();
-    int nextId() const;
-    bool isComplete() const;
+    SyncPage(QWidget* parent = nullptr);
+    void initializePage() override;
+    int nextId() const override;
+    bool isComplete() const override;
 
 public slots:
-    void setStatus(const QString &status);
+    void setStatus(const QStringstatus);
     void setError(bool);
     void setComplete(bool);
 
 signals:
-    void setupCore(const QString &backend, const QVariantMap &);
+    void setupCore(const QString& backend, const QVariantMap&, const QString& authenticator, const QVariantMap&);
 
 private:
     Ui::CoreConfigWizardSyncPage ui;
-    bool complete;
-    bool hasError;
+    bool _complete{false};
+    bool _hasError{false};
 };
 
-
 class SyncRelayPage : public QWizardPage
 {
     Q_OBJECT
 
 public:
-    SyncRelayPage(QWidget *parent = 0);
-    int nextId() const;
-    enum Mode { Success, Error };
+    SyncRelayPage(QWidget* parent = nullptr);
+    int nextId() const override;
+    enum Mode
+    {
+        Success,
+        Error
+    };
 
 public slots:
     void setMode(Mode);
@@ -168,6 +200,5 @@ signals:
 private:
     Mode mode;
 };
-}
 
-#endif
+}  // namespace CoreConfigWizardPages