File indexing completed on 2024-06-23 05:13:53

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     crypto/gui/signencryptwizard.h
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2007 Klarälvdalens Datakonsult AB
0006 
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #pragma once
0011 
0012 #include <crypto/gui/wizard.h>
0013 
0014 #include <crypto/gui/signerresolvepage.h>
0015 
0016 #include <utils/pimpl_ptr.h>
0017 
0018 #include <KMime/Types>
0019 #include <gpgme++/global.h>
0020 
0021 #include <memory>
0022 #include <vector>
0023 
0024 namespace GpgME
0025 {
0026 class Key;
0027 }
0028 
0029 class QFileInfo;
0030 template<typename T>
0031 class QList;
0032 using QFileInfoList = QList<QFileInfo>;
0033 
0034 namespace Kleo
0035 {
0036 namespace Crypto
0037 {
0038 
0039 class Task;
0040 class TaskCollection;
0041 
0042 namespace Gui
0043 {
0044 
0045 class ObjectsPage;
0046 class ResolveRecipientsPage;
0047 class ResultPage;
0048 class SignerResolvePage;
0049 
0050 class SignEncryptWizard : public Wizard
0051 {
0052     Q_OBJECT
0053 public:
0054     explicit SignEncryptWizard(QWidget *parent = nullptr, Qt::WindowFlags f = {});
0055     ~SignEncryptWizard() override;
0056 
0057     struct Page {
0058         enum Id {
0059             ResolveSigner = 0,
0060             Objects,
0061             ResolveRecipients,
0062             Result,
0063         };
0064     };
0065 
0066     void setCommitPage(Page::Id);
0067 
0068     GpgME::Protocol presetProtocol() const;
0069     void setPresetProtocol(GpgME::Protocol proto);
0070 
0071     GpgME::Protocol selectedProtocol() const;
0072 
0073     /// SignOrEncryptFiles mode subinterface
0074     //@{
0075 
0076     QFileInfoList resolvedFiles() const;
0077     void setFiles(const QStringList &files);
0078 
0079     bool signingSelected() const;
0080     void setSigningSelected(bool selected);
0081 
0082     bool encryptionSelected() const;
0083     void setEncryptionSelected(bool selected);
0084 
0085     bool isSigningUserMutable() const;
0086     void setSigningUserMutable(bool isMutable);
0087 
0088     bool isEncryptionUserMutable() const;
0089     void setEncryptionUserMutable(bool isMutable);
0090 
0091     bool isMultipleProtocolsAllowed() const;
0092     void setMultipleProtocolsAllowed(bool allowed);
0093 
0094     //@}
0095 
0096     /** if true, the user is allowed to remove/add recipients via the UI.
0097      * Defaults to @p false.
0098      */
0099     bool recipientsUserMutable() const;
0100     void setRecipientsUserMutable(bool isMutable);
0101 
0102     void setSignersAndCandidates(const std::vector<KMime::Types::Mailbox> &signers, const std::vector<std::vector<GpgME::Key>> &keys);
0103 
0104     void setTaskCollection(const std::shared_ptr<TaskCollection> &tasks);
0105 
0106     std::vector<GpgME::Key> resolvedCertificates() const;
0107     std::vector<GpgME::Key> resolvedSigners() const;
0108 
0109     bool isAsciiArmorEnabled() const;
0110     void setAsciiArmorEnabled(bool enabled);
0111 
0112     bool keepResultPageOpenWhenDone() const;
0113     void setKeepResultPageOpenWhenDone(bool keep);
0114 
0115     void onNext(int currentId) override;
0116 
0117 Q_SIGNALS:
0118     void signersResolved();
0119     void objectsResolved();
0120     void recipientsResolved();
0121 
0122 protected:
0123     SignerResolvePage *signerResolvePage();
0124     const SignerResolvePage *signerResolvePage() const;
0125     ObjectsPage *objectsPage();
0126     ResultPage *resultPage();
0127     ResolveRecipientsPage *resolveRecipientsPage();
0128 
0129     void setSignerResolvePageValidator(const std::shared_ptr<SignerResolvePage::Validator> &validator);
0130 
0131 private:
0132     class Private;
0133     kdtools::pimpl_ptr<Private> d;
0134 };
0135 
0136 }
0137 }
0138 }