1 /* 2 cryptoconfigmodule_p.h 3 4 This file is part of libkleopatra 5 SPDX-FileCopyrightText: 2004, 2005 Klarälvdalens Datakonsult AB 6 7 SPDX-License-Identifier: GPL-2.0-or-later 8 */ 9 10 #pragma once 11 12 #include <QWidget> 13 14 #include <QList> 15 16 class KLineEdit; 17 class QSpinBox; 18 19 class QPushButton; 20 class QGridLayout; 21 class QLabel; 22 class QCheckBox; 23 class QComboBox; 24 25 namespace Kleo 26 { 27 class FileNameRequester; 28 } 29 30 namespace QGpgME 31 { 32 class CryptoConfig; 33 class CryptoConfigComponent; 34 class CryptoConfigGroup; 35 class CryptoConfigEntry; 36 } // namespace QGpgME 37 38 namespace Kleo 39 { 40 class CryptoConfigModule; 41 class CryptoConfigComponentGUI; 42 class CryptoConfigGroupGUI; 43 class CryptoConfigEntryGUI; 44 45 /** 46 * A widget corresponding to a component in the crypto config 47 */ 48 class CryptoConfigComponentGUI : public QWidget 49 { 50 Q_OBJECT 51 52 public: 53 CryptoConfigComponentGUI(CryptoConfigModule *module, QGpgME::CryptoConfigComponent *component, 54 QWidget *parent = nullptr); 55 56 bool save(); 57 void load(); 58 void defaults(); 59 60 private: 61 QGpgME::CryptoConfigComponent *mComponent = nullptr; 62 QList<CryptoConfigGroupGUI *> mGroupGUIs; 63 }; 64 65 /** 66 * A class managing widgets corresponding to a group in the crypto config 67 */ 68 class CryptoConfigGroupGUI : public QObject 69 { 70 Q_OBJECT 71 72 public: 73 CryptoConfigGroupGUI(CryptoConfigModule *module, QGpgME::CryptoConfigGroup *group, 74 const std::vector<QGpgME::CryptoConfigEntry *> &entries, 75 QGridLayout *layout, QWidget *parent = nullptr); 76 77 bool save(); 78 void load(); 79 void defaults(); 80 81 private: 82 QList<CryptoConfigEntryGUI *> mEntryGUIs; 83 }; 84 85 /** 86 * Factory for CryptoConfigEntryGUI instances 87 * Not a real factory, but can become one later. 88 */ 89 class CryptoConfigEntryGUIFactory 90 { 91 public: 92 static CryptoConfigEntryGUI *createEntryGUI( 93 CryptoConfigModule *module, 94 QGpgME::CryptoConfigEntry *entry, const QString &entryName, 95 QGridLayout *layout, QWidget *widget); 96 }; 97 98 /** 99 * Base class for the widget managers tied to an entry in the crypto config 100 */ 101 class CryptoConfigEntryGUI : public QObject 102 { 103 Q_OBJECT 104 public: 105 CryptoConfigEntryGUI(CryptoConfigModule *module, 106 QGpgME::CryptoConfigEntry *entry, 107 const QString &entryName); 108 load()109 void load() 110 { 111 doLoad(); 112 mChanged = false; 113 } save()114 void save() 115 { 116 Q_ASSERT(mChanged); 117 doSave(); 118 mChanged = false; 119 } 120 void resetToDefault(); 121 122 QString description() const; isChanged()123 bool isChanged() const 124 { 125 return mChanged; 126 } 127 128 Q_SIGNALS: 129 void changed(); 130 131 protected Q_SLOTS: slotChanged()132 void slotChanged() 133 { 134 mChanged = true; 135 Q_EMIT changed(); 136 } 137 138 protected: 139 virtual void doSave() = 0; 140 virtual void doLoad() = 0; 141 142 QGpgME::CryptoConfigEntry *mEntry = nullptr; 143 QString mName; 144 bool mChanged = false; 145 }; 146 147 /** 148 * A widget manager for a string entry in the crypto config 149 */ 150 class CryptoConfigEntryLineEdit : public CryptoConfigEntryGUI 151 { 152 Q_OBJECT 153 154 public: 155 CryptoConfigEntryLineEdit(CryptoConfigModule *module, 156 QGpgME::CryptoConfigEntry *entry, 157 const QString &entryName, 158 QGridLayout *layout, 159 QWidget *parent = nullptr); 160 161 void doSave() override; 162 void doLoad() override; 163 private: 164 KLineEdit *mLineEdit = nullptr; 165 }; 166 167 /** 168 * A widget manager for a debug-level entry in the crypto config 169 */ 170 class CryptoConfigEntryDebugLevel : public CryptoConfigEntryGUI 171 { 172 Q_OBJECT 173 public: 174 CryptoConfigEntryDebugLevel(CryptoConfigModule *module, QGpgME::CryptoConfigEntry *entry, 175 const QString &entryName, QGridLayout *layout, QWidget *parent = nullptr); 176 177 void doSave() override; 178 void doLoad() override; 179 private: 180 QComboBox *mComboBox = nullptr; 181 }; 182 183 /** 184 * A widget manager for a path entry in the crypto config 185 */ 186 class CryptoConfigEntryPath : public CryptoConfigEntryGUI 187 { 188 Q_OBJECT 189 190 public: 191 CryptoConfigEntryPath(CryptoConfigModule *module, 192 QGpgME::CryptoConfigEntry *entry, 193 const QString &entryName, 194 QGridLayout *layout, 195 QWidget *parent = nullptr); 196 197 void doSave() override; 198 void doLoad() override; 199 private: 200 Kleo::FileNameRequester *mFileNameRequester = nullptr; 201 }; 202 203 /** 204 * A widget manager for a directory path entry in the crypto config 205 */ 206 class CryptoConfigEntryDirPath : public CryptoConfigEntryGUI 207 { 208 Q_OBJECT 209 210 public: 211 CryptoConfigEntryDirPath(CryptoConfigModule *module, 212 QGpgME::CryptoConfigEntry *entry, 213 const QString &entryName, 214 QGridLayout *layout, 215 QWidget *parent = nullptr); 216 217 void doSave() override; 218 void doLoad() override; 219 private: 220 Kleo::FileNameRequester *mFileNameRequester = nullptr; 221 }; 222 223 /** 224 * A widget manager for an int/uint entry in the crypto config 225 */ 226 class CryptoConfigEntrySpinBox : public CryptoConfigEntryGUI 227 { 228 Q_OBJECT 229 230 public: 231 CryptoConfigEntrySpinBox(CryptoConfigModule *module, 232 QGpgME::CryptoConfigEntry *entry, 233 const QString &entryName, 234 QGridLayout *layout, 235 QWidget *parent = nullptr); 236 void doSave() override; 237 void doLoad() override; 238 private: 239 enum { Int, UInt, ListOfNone } mKind; 240 QSpinBox *mNumInput = nullptr; 241 }; 242 243 /** 244 * A widget manager for a bool entry in the crypto config 245 */ 246 class CryptoConfigEntryCheckBox : public CryptoConfigEntryGUI 247 { 248 Q_OBJECT 249 250 public: 251 CryptoConfigEntryCheckBox(CryptoConfigModule *module, 252 QGpgME::CryptoConfigEntry *entry, 253 const QString &entryName, 254 QGridLayout *layout, 255 QWidget *parent = nullptr); 256 void doSave() override; 257 void doLoad() override; 258 private: 259 QCheckBox *mCheckBox = nullptr; 260 }; 261 262 /** 263 * A widget manager for an LDAP list entry in the crypto config 264 */ 265 class CryptoConfigEntryLDAPURL : public CryptoConfigEntryGUI 266 { 267 Q_OBJECT 268 269 public: 270 CryptoConfigEntryLDAPURL(CryptoConfigModule *module, 271 QGpgME::CryptoConfigEntry *entry, 272 const QString &entryName, 273 QGridLayout *layout, 274 QWidget *parent = nullptr); 275 void doSave() override; 276 void doLoad() override; 277 private Q_SLOTS: 278 void slotOpenDialog(); 279 private: 280 void setURLList(const QList<QUrl> &urlList); 281 QLabel *mLabel = nullptr; 282 QPushButton *mPushButton = nullptr; 283 QList<QUrl> mURLList; 284 }; 285 286 } 287