qt: Add missing header redirection
[gpgme.git] / lang / qt / src / qgpgmenewcryptoconfig.h
1 /*
2     qgpgmenewcryptoconfig.h
3
4     This file is part of qgpgme, the Qt API binding for gpgme
5     Copyright (c) 2010 Klarälvdalens Datakonsult AB
6     Copyright (c) 2016 Intevation GmbH
7
8     QGpgME is free software; you can redistribute it and/or
9     modify it under the terms of the GNU General Public License as
10     published by the Free Software Foundation; either version 2 of the
11     License, or (at your option) any later version.
12
13     QGpgME is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16     General Public License for more details.
17
18     You should have received a copy of the GNU General Public License
19     along with this program; if not, write to the Free Software
20     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21
22     In addition, as a special exception, the copyright holders give
23     permission to link the code of this program with any edition of
24     the Qt library by Trolltech AS, Norway (or with modified versions
25     of Qt that use the same license as Qt), and distribute linked
26     combinations including the two.  You must obey the GNU General
27     Public License in all respects for all of the code used other than
28     Qt.  If you modify this file, you may extend this exception to
29     your version of the file, but you are not obligated to do so.  If
30     you do not wish to do so, delete this exception statement from
31     your version.
32 */
33
34 #ifndef QGPGME_QGPGMENEWCRYPTOCONFIG_H
35 #define QGPGME_QGPGMENEWCRYPTOCONFIG_H
36
37 #include "qgpgme_export.h"
38 #include "cryptoconfig.h"
39
40 #include <QHash>
41 #include <QStringList>
42 #include <QVariant>
43
44 #ifdef BUILDING_QGPGME
45 # include "configuration.h"
46 #else
47 # include <gpgme++/configuration.h>
48 #endif
49
50
51 #include <vector>
52 #include <utility>
53
54 class QGpgMENewCryptoConfig;
55 class QGpgMENewCryptoConfigComponent;
56 class QGpgMENewCryptoConfigGroup;
57 class QGpgMENewCryptoConfigEntry;
58
59 class QGpgMENewCryptoConfigEntry : public QGpgME::CryptoConfigEntry
60 {
61 public:
62     QGpgMENewCryptoConfigEntry(const std::shared_ptr<QGpgMENewCryptoConfigGroup> &group, const GpgME::Configuration::Option &option);
63     ~QGpgMENewCryptoConfigEntry();
64
65     QString name() const Q_DECL_OVERRIDE;
66     QString description() const Q_DECL_OVERRIDE;
67     QString path() const Q_DECL_OVERRIDE;
68     bool isOptional() const Q_DECL_OVERRIDE;
69     bool isReadOnly() const Q_DECL_OVERRIDE;
70     bool isList() const Q_DECL_OVERRIDE;
71     bool isRuntime() const Q_DECL_OVERRIDE;
72     Level level() const Q_DECL_OVERRIDE;
73     ArgType argType() const Q_DECL_OVERRIDE;
74     bool isSet() const Q_DECL_OVERRIDE;
75     bool boolValue() const Q_DECL_OVERRIDE;
76     QString stringValue() const Q_DECL_OVERRIDE;
77     int intValue() const Q_DECL_OVERRIDE;
78     unsigned int uintValue() const Q_DECL_OVERRIDE;
79     QUrl urlValue() const Q_DECL_OVERRIDE;
80     unsigned int numberOfTimesSet() const Q_DECL_OVERRIDE;
81     std::vector<int> intValueList() const Q_DECL_OVERRIDE;
82     std::vector<unsigned int> uintValueList() const Q_DECL_OVERRIDE;
83     QList<QUrl> urlValueList() const Q_DECL_OVERRIDE;
84     void resetToDefault() Q_DECL_OVERRIDE;
85     void setBoolValue(bool) Q_DECL_OVERRIDE;
86     void setStringValue(const QString &) Q_DECL_OVERRIDE;
87     void setIntValue(int) Q_DECL_OVERRIDE;
88     void setUIntValue(unsigned int) Q_DECL_OVERRIDE;
89     void setURLValue(const QUrl &) Q_DECL_OVERRIDE;
90     void setNumberOfTimesSet(unsigned int) Q_DECL_OVERRIDE;
91     void setIntValueList(const std::vector<int> &) Q_DECL_OVERRIDE;
92     void setUIntValueList(const std::vector<unsigned int> &) Q_DECL_OVERRIDE;
93     void setURLValueList(const QList<QUrl> &) Q_DECL_OVERRIDE;
94     bool isDirty() const Q_DECL_OVERRIDE;
95
96 #if 0
97     void setDirty(bool b);
98     QString outputString() const;
99
100 protected:
101     bool isStringType() const;
102     QVariant stringToValue(const QString &value, bool unescape) const;
103     QString toString(bool escape) const;
104 #endif
105 private:
106     std::weak_ptr<QGpgMENewCryptoConfigGroup> m_group;
107     GpgME::Configuration::Option m_option;
108 };
109
110 class QGpgMENewCryptoConfigGroup : public QGpgME::CryptoConfigGroup
111 {
112 public:
113     QGpgMENewCryptoConfigGroup(const std::shared_ptr<QGpgMENewCryptoConfigComponent> &parent, const GpgME::Configuration::Option &option);
114     ~QGpgMENewCryptoConfigGroup();
115
116     QString name() const Q_DECL_OVERRIDE;
117     QString iconName() const Q_DECL_OVERRIDE
118     {
119         return QString();
120     }
121     QString description() const Q_DECL_OVERRIDE;
122     QString path() const Q_DECL_OVERRIDE;
123     QGpgME::CryptoConfigEntry::Level level() const Q_DECL_OVERRIDE;
124     QStringList entryList() const Q_DECL_OVERRIDE;
125     QGpgMENewCryptoConfigEntry *entry(const QString &name) const Q_DECL_OVERRIDE;
126
127 private:
128     friend class QGpgMENewCryptoConfigComponent; // it adds the entries
129     std::weak_ptr<QGpgMENewCryptoConfigComponent> m_component;
130     GpgME::Configuration::Option m_option;
131     QStringList m_entryNames;
132     QHash< QString, std::shared_ptr<QGpgMENewCryptoConfigEntry> > m_entriesByName;
133 };
134
135 /// For docu, see kleo/cryptoconfig.h
136 class QGpgMENewCryptoConfigComponent : public QGpgME::CryptoConfigComponent, public std::enable_shared_from_this<QGpgMENewCryptoConfigComponent>
137 {
138 public:
139     QGpgMENewCryptoConfigComponent();
140     ~QGpgMENewCryptoConfigComponent();
141
142     void setComponent(const GpgME::Configuration::Component &component);
143
144     QString name() const Q_DECL_OVERRIDE;
145     QString iconName() const Q_DECL_OVERRIDE
146     {
147         return name();
148     }
149     QString description() const Q_DECL_OVERRIDE;
150     QStringList groupList() const Q_DECL_OVERRIDE;
151     QGpgMENewCryptoConfigGroup *group(const QString &name) const Q_DECL_OVERRIDE;
152
153     void sync(bool runtime);
154
155 private:
156     GpgME::Configuration::Component m_component;
157     QHash< QString, std::shared_ptr<QGpgMENewCryptoConfigGroup> > m_groupsByName;
158 };
159
160 /**
161  * CryptoConfig implementation around the gpgconf command-line tool
162  * For method docu, see kleo/cryptoconfig.h
163  */
164 class QGPGME_EXPORT QGpgMENewCryptoConfig : public QGpgME::CryptoConfig
165 {
166 public:
167     /**
168      * Constructor
169      */
170     QGpgMENewCryptoConfig();
171     ~QGpgMENewCryptoConfig();
172
173     QStringList componentList() const Q_DECL_OVERRIDE;
174
175     QGpgMENewCryptoConfigComponent *component(const QString &name) const Q_DECL_OVERRIDE;
176
177     void clear() Q_DECL_OVERRIDE;
178     void sync(bool runtime) Q_DECL_OVERRIDE;
179
180 private:
181     /// @param showErrors if true, a messagebox will be shown if e.g. gpgconf wasn't found
182     void reloadConfiguration(bool showErrors);
183
184 private:
185     QHash< QString, std::shared_ptr<QGpgMENewCryptoConfigComponent> > m_componentsByName;
186     bool m_parsed;
187 };
188
189 #endif /* QGPGME_QGPGMENEWCRYPTOCONFIG_H */