src: Yearly copyright bump
[quassel.git] / src / qtui / coreconfigwizard.h
index 1940fee..72dd0aa 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-2019 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 QVariantsetupData);
+    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