1 /*
2     SPDX-FileCopyrightText: 2010 Tobias Koenig <tokoe@kde.org>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include <KDAV/Enums>
10 
11 #include <QWizard>
12 #include <QWizardPage>
13 
14 class KJob;
15 class QLineEdit;
16 class QTextBrowser;
17 
18 class QLabel;
19 class QButtonGroup;
20 class QCheckBox;
21 class QComboBox;
22 class QFormLayout;
23 class QRadioButton;
24 class KPasswordLineEdit;
25 
26 class SetupWizard : public QWizard
27 {
28     Q_OBJECT
29 
30 public:
31     explicit SetupWizard(QWidget *parent = nullptr);
32 
33     enum {
34         W_CredentialsPage,
35         W_PredefinedProviderPage,
36         W_ServerTypePage,
37         W_ConnectionPage,
38         W_CheckPage,
39     };
40 
41     class Url
42     {
43     public:
44         using List = QVector<Url>;
45 
46         KDAV::Protocol protocol;
47         QString url;
48         QString userName;
49         QString password;
50     };
51 
52     Url::List urls() const;
53     QString displayName() const;
54 };
55 
56 class PredefinedProviderPage : public QWizardPage
57 {
58 public:
59     explicit PredefinedProviderPage(QWidget *parent = nullptr);
60 
61     void initializePage() override;
62     int nextId() const override;
63 
64 private:
65     QLabel *mLabel = nullptr;
66     QButtonGroup *mProviderGroup = nullptr;
67     QRadioButton *mUseProvider = nullptr;
68     QRadioButton *mDontUseProvider = nullptr;
69 };
70 
71 class CredentialsPage : public QWizardPage
72 {
73 public:
74     explicit CredentialsPage(QWidget *parent = nullptr);
75     int nextId() const override;
76 
77 private:
78     QLineEdit *mUserName = nullptr;
79     KPasswordLineEdit *mPassword = nullptr;
80 };
81 
82 class ServerTypePage : public QWizardPage
83 {
84     Q_OBJECT
85 
86 public:
87     explicit ServerTypePage(QWidget *parent = nullptr);
88 
89     bool validatePage() override;
90 
91 private:
92     void manualConfigToggled(bool toggled);
93     QButtonGroup *mServerGroup = nullptr;
94     QComboBox *mProvidersCombo = nullptr;
95 };
96 
97 class ConnectionPage : public QWizardPage
98 {
99     Q_OBJECT
100 
101 public:
102     explicit ConnectionPage(QWidget *parent = nullptr);
103 
104     void initializePage() override;
105     void cleanupPage() override;
106 
107 private:
108     void urlElementChanged();
109     QFormLayout *mLayout = nullptr;
110     QLineEdit *mHost = nullptr;
111     QLineEdit *mPath = nullptr;
112     QCheckBox *mUseSecureConnection = nullptr;
113     QFormLayout *mPreviewLayout = nullptr;
114     QLabel *mCalDavUrlLabel = nullptr;
115     QLabel *mCalDavUrlPreview = nullptr;
116     QLabel *mCardDavUrlLabel = nullptr;
117     QLabel *mCardDavUrlPreview = nullptr;
118     QLabel *mGroupDavUrlLabel = nullptr;
119     QLabel *mGroupDavUrlPreview = nullptr;
120 };
121 
122 class CheckPage : public QWizardPage
123 {
124     Q_OBJECT
125 
126 public:
127     explicit CheckPage(QWidget *parent = nullptr);
128 
129 private:
130     void checkConnection();
131     void onFetchDone(KJob *);
132     QTextBrowser *mStatusLabel = nullptr;
133 };
134 
135